mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2024-11-23 04:00:05 +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);
|
||||
}
|
||||
|
||||
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:
|
||||
//
|
||||
// Check that logical addressing required
|
||||
|
@ -188,6 +188,88 @@ OpFunctionEnd
|
||||
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) {
|
||||
// Note: The SPIR-V assembly has had store/load elimination
|
||||
// performed to allow the inserts and extracts to directly
|
||||
|
@ -345,6 +345,119 @@ OpFunctionEnd
|
||||
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,
|
||||
UntargetedTypeNotConverted) {
|
||||
|
||||
|
@ -553,6 +553,138 @@ OpFunctionEnd
|
||||
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:
|
||||
//
|
||||
// Other target variable types
|
||||
|
Loading…
Reference in New Issue
Block a user