diff --git a/docs/features.txt b/docs/features.txt index 76176df65b4..273a6e503d2 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -538,7 +538,7 @@ Khronos extensions that are not part of any Vulkan version: VK_KHR_shader_clock DONE (anv, hasvk, lvp, nvk, radv, vn) VK_KHR_shader_expect_assume DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_KHR_shader_maximal_reconvergence DONE (anv, lvp, nvk, radv) - VK_KHR_shader_subgroup_rotate DONE (anv, radv) + VK_KHR_shader_subgroup_rotate DONE (anv, nvk, radv) VK_KHR_shader_subgroup_uniform_control_flow DONE (anv, hasvk, nvk, radv) VK_KHR_shader_quad_control DONE (radv) VK_KHR_shared_presentable_image not started diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index 40f5f5f8147..f0bfb20b0d7 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -1,5 +1,5 @@ VK_EXT_map_memory_placed on RADV, ANV and NVK -VK_KHR_shader_subgroup_rotate on RADV and ANV +VK_KHR_shader_subgroup_rotate on RADV and ANV and NVK VK_KHR_load_store_op_none on RADV, ANV, NVK and Turnip VK_KHR_line_rasterization on RADV, ANV, NVK and Turnip VK_KHR_index_type_uint8 on RADV, ANV, NVK and Turnip diff --git a/src/nouveau/vulkan/nvk_physical_device.c b/src/nouveau/vulkan/nvk_physical_device.c index 42be88898da..833bbfa039d 100644 --- a/src/nouveau/vulkan/nvk_physical_device.c +++ b/src/nouveau/vulkan/nvk_physical_device.c @@ -150,6 +150,7 @@ nvk_get_device_extensions(const struct nvk_instance *instance, .KHR_shader_maximal_reconvergence = true, .KHR_shader_non_semantic_info = true, .KHR_shader_subgroup_extended_types = true, + .KHR_shader_subgroup_rotate = nvk_use_nak(info), .KHR_shader_subgroup_uniform_control_flow = nvk_use_nak(info), .KHR_shader_terminate_invocation = (nvk_nak_stages(info) & VK_SHADER_STAGE_FRAGMENT_BIT) != 0, @@ -426,6 +427,10 @@ nvk_get_device_features(const struct nv_device_info *info, /* VK_KHR_shader_maximal_reconvergence */ .shaderMaximalReconvergence = true, + /* VK_KHR_shader_subgroup_rotate */ + .shaderSubgroupRotate = nvk_use_nak(info), + .shaderSubgroupRotateClustered = nvk_use_nak(info), + /* VK_KHR_vertex_attribute_divisor */ .vertexAttributeInstanceRateDivisor = true, .vertexAttributeInstanceRateZeroDivisor = true, @@ -761,6 +766,8 @@ nvk_get_device_properties(const struct nvk_instance *instance, VK_SUBGROUP_FEATURE_BASIC_BIT | VK_SUBGROUP_FEATURE_CLUSTERED_BIT | VK_SUBGROUP_FEATURE_QUAD_BIT | + VK_SUBGROUP_FEATURE_ROTATE_BIT_KHR | + VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT_KHR | VK_SUBGROUP_FEATURE_SHUFFLE_BIT | VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT | VK_SUBGROUP_FEATURE_VOTE_BIT, diff --git a/src/nouveau/vulkan/nvk_shader.c b/src/nouveau/vulkan/nvk_shader.c index 7b2fa05795d..0982857daf2 100644 --- a/src/nouveau/vulkan/nvk_shader.c +++ b/src/nouveau/vulkan/nvk_shader.c @@ -156,6 +156,7 @@ nvk_get_spirv_options(struct vk_physical_device *vk_pdev, .subgroup_ballot = true, .subgroup_basic = true, .subgroup_quad = true, + .subgroup_rotate = true, .subgroup_shuffle = true, .subgroup_uniform_control_flow = true, .subgroup_vote = true,