@@ -3543,6 +3543,69 @@ TEST_F(TrimCapabilitiesPassTest,
35433543 EXPECT_EQ (std::get<1 >(result), Pass::Status::SuccessWithoutChange);
35443544}
35453545
3546+ TEST_F (TrimCapabilitiesPassTest, QuadControlKHR_RemoveIfNotUsed) {
3547+ const std::string kTest = R"(
3548+ OpCapability Shader
3549+ OpCapability QuadControlKHR
3550+ ; CHECK-NOT: OpCapability QuadControlKHR
3551+ OpExtension "SPV_KHR_quad_control"
3552+ ; CHECK-NOT: OpExtension "SPV_KHR_quad_control"
3553+ OpMemoryModel Logical GLSL450
3554+ OpEntryPoint Fragment %main "main" %out_var_SV_Target
3555+ OpExecutionMode %main OriginUpperLeft
3556+ OpSource HLSL 660
3557+ OpName %out_var_SV_Target "out.var.SV_Target"
3558+ OpName %main "main"
3559+ OpDecorate %out_var_SV_Target Location 0
3560+ %float = OpTypeFloat 32
3561+ %v4float = OpTypeVector %float 4
3562+ %_ptr_Output_v4float = OpTypePointer Output %v4float
3563+ %void = OpTypeVoid
3564+ %7 = OpTypeFunction %void
3565+ %out_var_SV_Target = OpVariable %_ptr_Output_v4float Output
3566+ %main = OpFunction %void None %7
3567+ %8 = OpLabel
3568+ OpReturn
3569+ OpFunctionEnd
3570+ )" ;
3571+ const auto result =
3572+ SinglePassRunAndMatch<TrimCapabilitiesPass>(kTest , /* skip_nop= */ false );
3573+ EXPECT_EQ (std::get<1 >(result), Pass::Status::SuccessWithChange);
3574+ }
3575+
3576+ TEST_F (TrimCapabilitiesPassTest, QuadControlKHR_RemainsWithQuadAny) {
3577+ const std::string kTest = R"(
3578+ OpCapability Shader
3579+ OpCapability QuadControlKHR
3580+ ; CHECK: OpCapability QuadControlKHR
3581+ OpExtension "SPV_KHR_quad_control"
3582+ ; CHECK: OpExtension "SPV_KHR_quad_control"
3583+ OpMemoryModel Logical GLSL450
3584+ OpEntryPoint Fragment %main "main" %out_var_SV_Target
3585+ OpExecutionMode %main OriginUpperLeft
3586+ OpSource HLSL 660
3587+ OpName %out_var_SV_Target "out.var.SV_Target"
3588+ OpName %main "main"
3589+ OpDecorate %out_var_SV_Target Location 0
3590+ %bool = OpTypeBool
3591+ %float = OpTypeFloat 32
3592+ %v4float = OpTypeVector %float 4
3593+ %_ptr_Output_v4float = OpTypePointer Output %v4float
3594+ %void = OpTypeVoid
3595+ %7 = OpTypeFunction %void
3596+ %out_var_SV_Target = OpVariable %_ptr_Output_v4float Output
3597+ %main = OpFunction %void None %7
3598+ %8 = OpLabel
3599+ %true = OpConstantTrue %bool
3600+ %10 = OpGroupNonUniformQuadAnyKHR %bool %true
3601+ OpReturn
3602+ OpFunctionEnd
3603+ )" ;
3604+ const auto result =
3605+ SinglePassRunAndMatch<TrimCapabilitiesPass>(kTest , /* skip_nop= */ false );
3606+ EXPECT_EQ (std::get<1 >(result), Pass::Status::SuccessWithoutChange);
3607+ }
3608+
35463609INSTANTIATE_TEST_SUITE_P (
35473610 TrimCapabilitiesPassTestSubgroupClustered_Unsigned_I,
35483611 TrimCapabilitiesPassTestSubgroupClustered_Unsigned,
0 commit comments