diff --git a/docs/features.txt b/docs/features.txt index 987f94e3560..cc800f3e556 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -548,7 +548,7 @@ Khronos extensions that are not part of any Vulkan version: VK_KHR_shader_expect_assume DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_KHR_shader_float_controls2 DONE (anv, nvk, radv, tu) VK_KHR_shader_maximal_reconvergence DONE (anv, lvp, nvk, radv) - VK_KHR_shader_subgroup_rotate DONE (anv, nvk, radv) + VK_KHR_shader_subgroup_rotate DONE (anv, nvk, radv, tu) VK_KHR_shader_subgroup_uniform_control_flow DONE (anv, hasvk, nvk, radv, tu) VK_KHR_shader_quad_control DONE (anv, radv) VK_KHR_shared_presentable_image not started diff --git a/src/freedreno/vulkan/tu_device.cc b/src/freedreno/vulkan/tu_device.cc index 0f6326a13f4..0b29be84fb8 100644 --- a/src/freedreno/vulkan/tu_device.cc +++ b/src/freedreno/vulkan/tu_device.cc @@ -210,6 +210,7 @@ get_device_extensions(const struct tu_physical_device *device, .KHR_shader_non_semantic_info = true, .KHR_shader_relaxed_extended_instruction = true, .KHR_shader_subgroup_extended_types = true, + .KHR_shader_subgroup_rotate = true, .KHR_shader_subgroup_uniform_control_flow = true, .KHR_shader_terminate_invocation = true, .KHR_spirv_1_4 = true, @@ -676,6 +677,9 @@ tu_get_features(struct tu_physical_device *pdevice, /* VK_KHR_shader_relaxed_extended_instruction */ features->shaderRelaxedExtendedInstruction = true; + + /* VK_KHR_subgroup_rotate */ + features->shaderSubgroupRotate = true; } static void @@ -696,6 +700,7 @@ tu_get_physical_device_properties_1_1(struct tu_physical_device *pdevice, VK_SUBGROUP_FEATURE_BALLOT_BIT | VK_SUBGROUP_FEATURE_SHUFFLE_BIT | VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT | + VK_SUBGROUP_FEATURE_ROTATE_BIT_KHR | VK_SUBGROUP_FEATURE_ARITHMETIC_BIT; if (pdevice->info->a6xx.has_getfiberid) { p->subgroupSupportedStages |= VK_SHADER_STAGE_ALL_GRAPHICS;