diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h index 56ee81aa061..c4cc267fc0c 100644 --- a/src/compiler/shader_info.h +++ b/src/compiler/shader_info.h @@ -91,6 +91,7 @@ struct spirv_supported_capabilities { bool subgroup_arithmetic; bool subgroup_ballot; bool subgroup_basic; + bool subgroup_dispatch; bool subgroup_quad; bool subgroup_shuffle; bool subgroup_uniform_control_flow; diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index bd164c234da..a400c51c143 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -4535,6 +4535,18 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode, spv_check_supported(amd_shader_ballot, cap); break; + case SpvCapabilitySubgroupDispatch: + spv_check_supported(subgroup_dispatch, cap); + /* Missing : + * - SpvOpGetKernelLocalSizeForSubgroupCount + * - SpvOpGetKernelMaxNumSubgroups + * - SpvExecutionModeSubgroupsPerWorkgroup + * - SpvExecutionModeSubgroupsPerWorkgroupId + */ + vtn_warn("Not fully supported capability: %s", + spirv_capability_to_string(cap)); + break; + case SpvCapabilityVariablePointersStorageBuffer: case SpvCapabilityVariablePointers: spv_check_supported(variable_pointers, cap); diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index be19266736e..c5b6bdddab4 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -146,6 +146,7 @@ anv_shader_compile_to_nir(struct anv_device *device, .subgroup_arithmetic = true, .subgroup_basic = true, .subgroup_ballot = true, + .subgroup_dispatch = true, .subgroup_quad = true, .subgroup_uniform_control_flow = true, .subgroup_shuffle = true,