mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2024-11-26 21:30:07 +00:00
Opt: Add opaque tests
This commit is contained in:
parent
78cf86150e
commit
1d477b9898
@ -807,6 +807,120 @@ OpFunctionEnd
|
|||||||
defs_before + func_before, defs_after + func_after, true, true);
|
defs_before + func_before, defs_after + func_after, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(AggressiveDCETest, ElimOpaque) {
|
||||||
|
// SPIR-V not representable from GLSL; not generatable from HLSL
|
||||||
|
// for the moment.
|
||||||
|
|
||||||
|
const std::string defs_before =
|
||||||
|
R"(OpCapability Shader
|
||||||
|
%1 = OpExtInstImport "GLSL.std.450"
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main" %outColor %texCoords
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpSource GLSL 140
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %S_t "S_t"
|
||||||
|
OpMemberName %S_t 0 "v0"
|
||||||
|
OpMemberName %S_t 1 "v1"
|
||||||
|
OpMemberName %S_t 2 "smp"
|
||||||
|
OpName %outColor "outColor"
|
||||||
|
OpName %sampler15 "sampler15"
|
||||||
|
OpName %s0 "s0"
|
||||||
|
OpName %texCoords "texCoords"
|
||||||
|
OpDecorate %sampler15 DescriptorSet 0
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%9 = OpTypeFunction %void
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%v2float = OpTypeVector %float 2
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||||
|
%outColor = OpVariable %_ptr_Output_v4float Output
|
||||||
|
%14 = OpTypeImage %float 2D 0 0 0 1 Unknown
|
||||||
|
%15 = OpTypeSampledImage %14
|
||||||
|
%S_t = OpTypeStruct %v2float %v2float %15
|
||||||
|
%_ptr_Function_S_t = OpTypePointer Function %S_t
|
||||||
|
%17 = OpTypeFunction %void %_ptr_Function_S_t
|
||||||
|
%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
|
||||||
|
%_ptr_Function_15 = OpTypePointer Function %15
|
||||||
|
%sampler15 = OpVariable %_ptr_UniformConstant_15 UniformConstant
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%int_2 = OpConstant %int 2
|
||||||
|
%_ptr_Function_v2float = OpTypePointer Function %v2float
|
||||||
|
%_ptr_Input_v2float = OpTypePointer Input %v2float
|
||||||
|
%texCoords = OpVariable %_ptr_Input_v2float Input
|
||||||
|
)";
|
||||||
|
|
||||||
|
const std::string defs_after =
|
||||||
|
R"(OpCapability Shader
|
||||||
|
%1 = OpExtInstImport "GLSL.std.450"
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main" %outColor %texCoords
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpSource GLSL 140
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %S_t "S_t"
|
||||||
|
OpMemberName %S_t 0 "v0"
|
||||||
|
OpMemberName %S_t 1 "v1"
|
||||||
|
OpMemberName %S_t 2 "smp"
|
||||||
|
OpName %outColor "outColor"
|
||||||
|
OpName %sampler15 "sampler15"
|
||||||
|
OpName %texCoords "texCoords"
|
||||||
|
OpDecorate %sampler15 DescriptorSet 0
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%9 = OpTypeFunction %void
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%v2float = OpTypeVector %float 2
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||||
|
%outColor = OpVariable %_ptr_Output_v4float Output
|
||||||
|
%14 = OpTypeImage %float 2D 0 0 0 1 Unknown
|
||||||
|
%15 = OpTypeSampledImage %14
|
||||||
|
%S_t = OpTypeStruct %v2float %v2float %15
|
||||||
|
%_ptr_Function_S_t = OpTypePointer Function %S_t
|
||||||
|
%17 = OpTypeFunction %void %_ptr_Function_S_t
|
||||||
|
%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
|
||||||
|
%_ptr_Function_15 = OpTypePointer Function %15
|
||||||
|
%sampler15 = OpVariable %_ptr_UniformConstant_15 UniformConstant
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%int_2 = OpConstant %int 2
|
||||||
|
%_ptr_Function_v2float = OpTypePointer Function %v2float
|
||||||
|
%_ptr_Input_v2float = OpTypePointer Input %v2float
|
||||||
|
%texCoords = OpVariable %_ptr_Input_v2float Input
|
||||||
|
)";
|
||||||
|
|
||||||
|
const std::string func_before =
|
||||||
|
R"(%main = OpFunction %void None %9
|
||||||
|
%25 = OpLabel
|
||||||
|
%s0 = OpVariable %_ptr_Function_S_t Function
|
||||||
|
%26 = OpLoad %v2float %texCoords
|
||||||
|
%27 = OpLoad %S_t %s0
|
||||||
|
%28 = OpCompositeInsert %S_t %26 %27 0
|
||||||
|
%29 = OpLoad %15 %sampler15
|
||||||
|
%30 = OpCompositeInsert %S_t %29 %28 2
|
||||||
|
OpStore %s0 %30
|
||||||
|
%31 = OpImageSampleImplicitLod %v4float %29 %26
|
||||||
|
OpStore %outColor %31
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
)";
|
||||||
|
|
||||||
|
const std::string func_after =
|
||||||
|
R"(%main = OpFunction %void None %9
|
||||||
|
%25 = OpLabel
|
||||||
|
%26 = OpLoad %v2float %texCoords
|
||||||
|
%29 = OpLoad %15 %sampler15
|
||||||
|
%31 = OpImageSampleImplicitLod %v4float %29 %26
|
||||||
|
OpStore %outColor %31
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
)";
|
||||||
|
|
||||||
|
SinglePassRunAndCheck<opt::AggressiveDCEPass>(
|
||||||
|
defs_before + func_before, defs_after + func_after, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
// TODO(greg-lunarg): Add tests to verify handling of these cases:
|
// TODO(greg-lunarg): Add tests to verify handling of these cases:
|
||||||
//
|
//
|
||||||
// Check that logical addressing required
|
// Check that logical addressing required
|
||||||
|
@ -188,6 +188,88 @@ OpFunctionEnd
|
|||||||
predefs + after, true, true);
|
predefs + after, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(InsertExtractElimTest, OptimizeOpaque) {
|
||||||
|
// SPIR-V not representable in GLSL; not generatable from HLSL
|
||||||
|
// for the moment.
|
||||||
|
|
||||||
|
const std::string predefs =
|
||||||
|
R"(OpCapability Shader
|
||||||
|
%1 = OpExtInstImport "GLSL.std.450"
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main" %outColor %texCoords
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpSource GLSL 140
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %S_t "S_t"
|
||||||
|
OpMemberName %S_t 0 "v0"
|
||||||
|
OpMemberName %S_t 1 "v1"
|
||||||
|
OpMemberName %S_t 2 "smp"
|
||||||
|
OpName %outColor "outColor"
|
||||||
|
OpName %sampler15 "sampler15"
|
||||||
|
OpName %s0 "s0"
|
||||||
|
OpName %texCoords "texCoords"
|
||||||
|
OpDecorate %sampler15 DescriptorSet 0
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%9 = OpTypeFunction %void
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%v2float = OpTypeVector %float 2
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||||
|
%outColor = OpVariable %_ptr_Output_v4float Output
|
||||||
|
%14 = OpTypeImage %float 2D 0 0 0 1 Unknown
|
||||||
|
%15 = OpTypeSampledImage %14
|
||||||
|
%S_t = OpTypeStruct %v2float %v2float %15
|
||||||
|
%_ptr_Function_S_t = OpTypePointer Function %S_t
|
||||||
|
%17 = OpTypeFunction %void %_ptr_Function_S_t
|
||||||
|
%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
|
||||||
|
%_ptr_Function_15 = OpTypePointer Function %15
|
||||||
|
%sampler15 = OpVariable %_ptr_UniformConstant_15 UniformConstant
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%int_2 = OpConstant %int 2
|
||||||
|
%_ptr_Function_v2float = OpTypePointer Function %v2float
|
||||||
|
%_ptr_Input_v2float = OpTypePointer Input %v2float
|
||||||
|
%texCoords = OpVariable %_ptr_Input_v2float Input
|
||||||
|
)";
|
||||||
|
|
||||||
|
const std::string before =
|
||||||
|
R"(%main = OpFunction %void None %9
|
||||||
|
%25 = OpLabel
|
||||||
|
%s0 = OpVariable %_ptr_Function_S_t Function
|
||||||
|
%26 = OpLoad %v2float %texCoords
|
||||||
|
%27 = OpLoad %S_t %s0
|
||||||
|
%28 = OpCompositeInsert %S_t %26 %27 0
|
||||||
|
%29 = OpLoad %15 %sampler15
|
||||||
|
%30 = OpCompositeInsert %S_t %29 %28 2
|
||||||
|
OpStore %s0 %30
|
||||||
|
%31 = OpCompositeExtract %15 %30 2
|
||||||
|
%32 = OpCompositeExtract %v2float %30 0
|
||||||
|
%33 = OpImageSampleImplicitLod %v4float %31 %32
|
||||||
|
OpStore %outColor %33
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
)";
|
||||||
|
|
||||||
|
const std::string after =
|
||||||
|
R"(%main = OpFunction %void None %9
|
||||||
|
%25 = OpLabel
|
||||||
|
%s0 = OpVariable %_ptr_Function_S_t Function
|
||||||
|
%26 = OpLoad %v2float %texCoords
|
||||||
|
%27 = OpLoad %S_t %s0
|
||||||
|
%28 = OpCompositeInsert %S_t %26 %27 0
|
||||||
|
%29 = OpLoad %15 %sampler15
|
||||||
|
%30 = OpCompositeInsert %S_t %29 %28 2
|
||||||
|
OpStore %s0 %30
|
||||||
|
%33 = OpImageSampleImplicitLod %v4float %29 %26
|
||||||
|
OpStore %outColor %33
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
)";
|
||||||
|
|
||||||
|
SinglePassRunAndCheck<opt::InsertExtractElimPass>(predefs + before,
|
||||||
|
predefs + after, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(InsertExtractElimTest, ConflictingInsertPreventsOptimization) {
|
TEST_F(InsertExtractElimTest, ConflictingInsertPreventsOptimization) {
|
||||||
// Note: The SPIR-V assembly has had store/load elimination
|
// Note: The SPIR-V assembly has had store/load elimination
|
||||||
// performed to allow the inserts and extracts to directly
|
// performed to allow the inserts and extracts to directly
|
||||||
|
@ -345,6 +345,119 @@ OpFunctionEnd
|
|||||||
predefs_before + before, predefs_after + after, true, true);
|
predefs_before + before, predefs_after + after, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(LocalAccessChainConvertTest, OpaqueConverted) {
|
||||||
|
// SPIR-V not representable in GLSL; not generatable from HLSL
|
||||||
|
// at the moment
|
||||||
|
|
||||||
|
const std::string predefs =
|
||||||
|
R"(OpCapability Shader
|
||||||
|
%1 = OpExtInstImport "GLSL.std.450"
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main" %outColor %texCoords
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpSource GLSL 140
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %S_t "S_t"
|
||||||
|
OpMemberName %S_t 0 "v0"
|
||||||
|
OpMemberName %S_t 1 "v1"
|
||||||
|
OpMemberName %S_t 2 "smp"
|
||||||
|
OpName %foo_struct_S_t_vf2_vf21_ "foo(struct-S_t-vf2-vf21;"
|
||||||
|
OpName %s "s"
|
||||||
|
OpName %outColor "outColor"
|
||||||
|
OpName %sampler15 "sampler15"
|
||||||
|
OpName %s0 "s0"
|
||||||
|
OpName %texCoords "texCoords"
|
||||||
|
OpName %param "param"
|
||||||
|
OpDecorate %sampler15 DescriptorSet 0
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%12 = OpTypeFunction %void
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%v2float = OpTypeVector %float 2
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||||
|
%outColor = OpVariable %_ptr_Output_v4float Output
|
||||||
|
%17 = OpTypeImage %float 2D 0 0 0 1 Unknown
|
||||||
|
%18 = OpTypeSampledImage %17
|
||||||
|
%S_t = OpTypeStruct %v2float %v2float %18
|
||||||
|
%_ptr_Function_S_t = OpTypePointer Function %S_t
|
||||||
|
%20 = OpTypeFunction %void %_ptr_Function_S_t
|
||||||
|
%_ptr_UniformConstant_18 = OpTypePointer UniformConstant %18
|
||||||
|
%_ptr_Function_18 = OpTypePointer Function %18
|
||||||
|
%sampler15 = OpVariable %_ptr_UniformConstant_18 UniformConstant
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%int_2 = OpConstant %int 2
|
||||||
|
%_ptr_Function_v2float = OpTypePointer Function %v2float
|
||||||
|
%_ptr_Input_v2float = OpTypePointer Input %v2float
|
||||||
|
%texCoords = OpVariable %_ptr_Input_v2float Input
|
||||||
|
)";
|
||||||
|
|
||||||
|
const std::string before =
|
||||||
|
R"(%main = OpFunction %void None %12
|
||||||
|
%28 = OpLabel
|
||||||
|
%s0 = OpVariable %_ptr_Function_S_t Function
|
||||||
|
%param = OpVariable %_ptr_Function_S_t Function
|
||||||
|
%29 = OpLoad %v2float %texCoords
|
||||||
|
%30 = OpAccessChain %_ptr_Function_v2float %s0 %int_0
|
||||||
|
OpStore %30 %29
|
||||||
|
%31 = OpLoad %18 %sampler15
|
||||||
|
%32 = OpAccessChain %_ptr_Function_18 %s0 %int_2
|
||||||
|
OpStore %32 %31
|
||||||
|
%33 = OpLoad %S_t %s0
|
||||||
|
OpStore %param %33
|
||||||
|
%34 = OpAccessChain %_ptr_Function_18 %param %int_2
|
||||||
|
%35 = OpLoad %18 %34
|
||||||
|
%36 = OpAccessChain %_ptr_Function_v2float %param %int_0
|
||||||
|
%37 = OpLoad %v2float %36
|
||||||
|
%38 = OpImageSampleImplicitLod %v4float %35 %37
|
||||||
|
OpStore %outColor %38
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
)";
|
||||||
|
|
||||||
|
const std::string after =
|
||||||
|
R"(%main = OpFunction %void None %12
|
||||||
|
%28 = OpLabel
|
||||||
|
%s0 = OpVariable %_ptr_Function_S_t Function
|
||||||
|
%param = OpVariable %_ptr_Function_S_t Function
|
||||||
|
%29 = OpLoad %v2float %texCoords
|
||||||
|
%45 = OpLoad %S_t %s0
|
||||||
|
%46 = OpCompositeInsert %S_t %29 %45 0
|
||||||
|
OpStore %s0 %46
|
||||||
|
%31 = OpLoad %18 %sampler15
|
||||||
|
%47 = OpLoad %S_t %s0
|
||||||
|
%48 = OpCompositeInsert %S_t %31 %47 2
|
||||||
|
OpStore %s0 %48
|
||||||
|
%33 = OpLoad %S_t %s0
|
||||||
|
OpStore %param %33
|
||||||
|
%49 = OpLoad %S_t %param
|
||||||
|
%50 = OpCompositeExtract %18 %49 2
|
||||||
|
%51 = OpLoad %S_t %param
|
||||||
|
%52 = OpCompositeExtract %v2float %51 0
|
||||||
|
%38 = OpImageSampleImplicitLod %v4float %50 %52
|
||||||
|
OpStore %outColor %38
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
)";
|
||||||
|
|
||||||
|
const std::string remain =
|
||||||
|
R"(%foo_struct_S_t_vf2_vf21_ = OpFunction %void None %20
|
||||||
|
%s = OpFunctionParameter %_ptr_Function_S_t
|
||||||
|
%39 = OpLabel
|
||||||
|
%40 = OpAccessChain %_ptr_Function_18 %s %int_2
|
||||||
|
%41 = OpLoad %18 %40
|
||||||
|
%42 = OpAccessChain %_ptr_Function_v2float %s %int_0
|
||||||
|
%43 = OpLoad %v2float %42
|
||||||
|
%44 = OpImageSampleImplicitLod %v4float %41 %43
|
||||||
|
OpStore %outColor %44
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
)";
|
||||||
|
|
||||||
|
SinglePassRunAndCheck<opt::LocalAccessChainConvertPass>(
|
||||||
|
predefs + before + remain, predefs + after + remain, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(LocalAccessChainConvertTest,
|
TEST_F(LocalAccessChainConvertTest,
|
||||||
UntargetedTypeNotConverted) {
|
UntargetedTypeNotConverted) {
|
||||||
|
|
||||||
|
@ -553,6 +553,138 @@ OpFunctionEnd
|
|||||||
predefs_before + before, predefs_after + after, true, true);
|
predefs_before + before, predefs_after + after, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(LocalSingleBlockLoadStoreElimTest, ElimOpaque) {
|
||||||
|
// SPIR-V not representable in GLSL; not generatable from HLSL
|
||||||
|
// at the moment
|
||||||
|
|
||||||
|
const std::string predefs_before =
|
||||||
|
R"(OpCapability Shader
|
||||||
|
%1 = OpExtInstImport "GLSL.std.450"
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main" %outColor %texCoords
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpSource GLSL 140
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %S_t "S_t"
|
||||||
|
OpMemberName %S_t 0 "v0"
|
||||||
|
OpMemberName %S_t 1 "v1"
|
||||||
|
OpMemberName %S_t 2 "smp"
|
||||||
|
OpName %outColor "outColor"
|
||||||
|
OpName %sampler15 "sampler15"
|
||||||
|
OpName %s0 "s0"
|
||||||
|
OpName %texCoords "texCoords"
|
||||||
|
OpName %param "param"
|
||||||
|
OpDecorate %sampler15 DescriptorSet 0
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%12 = OpTypeFunction %void
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%v2float = OpTypeVector %float 2
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||||
|
%outColor = OpVariable %_ptr_Output_v4float Output
|
||||||
|
%17 = OpTypeImage %float 2D 0 0 0 1 Unknown
|
||||||
|
%18 = OpTypeSampledImage %17
|
||||||
|
%S_t = OpTypeStruct %v2float %v2float %18
|
||||||
|
%_ptr_Function_S_t = OpTypePointer Function %S_t
|
||||||
|
%20 = OpTypeFunction %void %_ptr_Function_S_t
|
||||||
|
%_ptr_UniformConstant_18 = OpTypePointer UniformConstant %18
|
||||||
|
%_ptr_Function_18 = OpTypePointer Function %18
|
||||||
|
%sampler15 = OpVariable %_ptr_UniformConstant_18 UniformConstant
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%int_2 = OpConstant %int 2
|
||||||
|
%_ptr_Function_v2float = OpTypePointer Function %v2float
|
||||||
|
%_ptr_Input_v2float = OpTypePointer Input %v2float
|
||||||
|
%texCoords = OpVariable %_ptr_Input_v2float Input
|
||||||
|
)";
|
||||||
|
|
||||||
|
const std::string predefs_after =
|
||||||
|
R"(OpCapability Shader
|
||||||
|
%1 = OpExtInstImport "GLSL.std.450"
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main" %outColor %texCoords
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpSource GLSL 140
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %S_t "S_t"
|
||||||
|
OpMemberName %S_t 0 "v0"
|
||||||
|
OpMemberName %S_t 1 "v1"
|
||||||
|
OpMemberName %S_t 2 "smp"
|
||||||
|
OpName %outColor "outColor"
|
||||||
|
OpName %sampler15 "sampler15"
|
||||||
|
OpName %s0 "s0"
|
||||||
|
OpName %texCoords "texCoords"
|
||||||
|
OpDecorate %sampler15 DescriptorSet 0
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%10 = OpTypeFunction %void
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%v2float = OpTypeVector %float 2
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||||
|
%outColor = OpVariable %_ptr_Output_v4float Output
|
||||||
|
%15 = OpTypeImage %float 2D 0 0 0 1 Unknown
|
||||||
|
%16 = OpTypeSampledImage %15
|
||||||
|
%S_t = OpTypeStruct %v2float %v2float %16
|
||||||
|
%_ptr_Function_S_t = OpTypePointer Function %S_t
|
||||||
|
%18 = OpTypeFunction %void %_ptr_Function_S_t
|
||||||
|
%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
|
||||||
|
%_ptr_Function_16 = OpTypePointer Function %16
|
||||||
|
%sampler15 = OpVariable %_ptr_UniformConstant_16 UniformConstant
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%int_2 = OpConstant %int 2
|
||||||
|
%_ptr_Function_v2float = OpTypePointer Function %v2float
|
||||||
|
%_ptr_Input_v2float = OpTypePointer Input %v2float
|
||||||
|
%texCoords = OpVariable %_ptr_Input_v2float Input
|
||||||
|
)";
|
||||||
|
|
||||||
|
const std::string before =
|
||||||
|
R"( %main = OpFunction %void None %12
|
||||||
|
%28 = OpLabel
|
||||||
|
%s0 = OpVariable %_ptr_Function_S_t Function
|
||||||
|
%param = OpVariable %_ptr_Function_S_t Function
|
||||||
|
%29 = OpLoad %v2float %texCoords
|
||||||
|
%30 = OpLoad %S_t %s0
|
||||||
|
%31 = OpCompositeInsert %S_t %29 %30 0
|
||||||
|
OpStore %s0 %31
|
||||||
|
%32 = OpLoad %18 %sampler15
|
||||||
|
%33 = OpLoad %S_t %s0
|
||||||
|
%34 = OpCompositeInsert %S_t %32 %33 2
|
||||||
|
OpStore %s0 %34
|
||||||
|
%35 = OpLoad %S_t %s0
|
||||||
|
OpStore %param %35
|
||||||
|
%36 = OpLoad %S_t %param
|
||||||
|
%37 = OpCompositeExtract %18 %36 2
|
||||||
|
%38 = OpLoad %S_t %param
|
||||||
|
%39 = OpCompositeExtract %v2float %38 0
|
||||||
|
%40 = OpImageSampleImplicitLod %v4float %37 %39
|
||||||
|
OpStore %outColor %40
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
)";
|
||||||
|
|
||||||
|
const std::string after =
|
||||||
|
R"(%main = OpFunction %void None %10
|
||||||
|
%26 = OpLabel
|
||||||
|
%s0 = OpVariable %_ptr_Function_S_t Function
|
||||||
|
%27 = OpLoad %v2float %texCoords
|
||||||
|
%28 = OpLoad %S_t %s0
|
||||||
|
%29 = OpCompositeInsert %S_t %27 %28 0
|
||||||
|
%30 = OpLoad %16 %sampler15
|
||||||
|
%32 = OpCompositeInsert %S_t %30 %29 2
|
||||||
|
OpStore %s0 %32
|
||||||
|
%35 = OpCompositeExtract %16 %32 2
|
||||||
|
%37 = OpCompositeExtract %v2float %32 0
|
||||||
|
%38 = OpImageSampleImplicitLod %v4float %35 %37
|
||||||
|
OpStore %outColor %38
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
)";
|
||||||
|
|
||||||
|
SinglePassRunAndCheck<opt::LocalSingleBlockLoadStoreElimPass>(
|
||||||
|
predefs_before + before, predefs_after + after, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
// TODO(greg-lunarg): Add tests to verify handling of these cases:
|
// TODO(greg-lunarg): Add tests to verify handling of these cases:
|
||||||
//
|
//
|
||||||
// Other target variable types
|
// Other target variable types
|
||||||
|
Loading…
Reference in New Issue
Block a user