diff --git a/docs/features.txt b/docs/features.txt index e1bce7f6798..3cbe1328bbd 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -502,7 +502,7 @@ Vulkan 1.3 -- all DONE: anv, lvp, nvk, radv, tu, vn, v3dv VK_EXT_private_data DONE (anv, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_EXT_image_robustness DONE (anv, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn) VK_EXT_shader_demote_to_helper_invocation DONE (anv, hasvk, lvp, nvk, radv, tu, v3dv, vn) - VK_EXT_subgroup_size_control DONE (anv, hasvk, lvp, nvk, radv, tu, v3dv, vn) + VK_EXT_subgroup_size_control DONE (anv, hasvk, lvp, nvk, radv, tu, v3dv, vn, panvk) VK_EXT_texel_buffer_alignment DONE (anv, hasvk, lvp, nvk, pvr, radv, tu, v3dv, vn) VK_EXT_texture_compression_astc_hdr DONE (vn) VK_EXT_tooling_info DONE (anv, hasvk, nvk, panvk, pvr, radv, tu, v3dv, vn) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index e3b96fc45ae..fb6bc1865cd 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -36,3 +36,4 @@ VK_KHR_depth_clamp_zero_one on RADV VK_KHR_maintenance8 on radv VK_KHR_shader_subgroup_rotate on panvk/v10+ Vulkan 1.1 on panvk/v10+ +VK_EXT_subgroup_size_control on panvk/v10+ diff --git a/src/panfrost/vulkan/panvk_physical_device.c b/src/panfrost/vulkan/panvk_physical_device.c index f257aff30c8..f9bab2c3493 100644 --- a/src/panfrost/vulkan/panvk_physical_device.c +++ b/src/panfrost/vulkan/panvk_physical_device.c @@ -245,6 +245,7 @@ get_device_extensions(const struct panvk_physical_device *device, .EXT_sampler_filter_minmax = arch >= 10, .EXT_scalar_block_layout = true, .EXT_shader_module_identifier = true, + .EXT_subgroup_size_control = true, .EXT_tooling_info = true, .GOOGLE_decorate_string = true, .GOOGLE_hlsl_functionality1 = true, @@ -356,8 +357,8 @@ get_features(const struct panvk_physical_device *device, .privateData = true, .shaderDemoteToHelperInvocation = false, .shaderTerminateInvocation = false, - .subgroupSizeControl = false, - .computeFullSubgroups = false, + .subgroupSizeControl = true, + .computeFullSubgroups = true, .synchronization2 = true, .textureCompressionASTC_HDR = false, .shaderZeroInitializeWorkgroupMemory = true, @@ -773,10 +774,11 @@ get_device_properties(const struct panvk_instance *instance, /* Vulkan 1.3 properties */ /* XXX: 1.3 support */ /* XXX: VK_EXT_subgroup_size_control */ - .minSubgroupSize = 8, - .maxSubgroupSize = 8, - .maxComputeWorkgroupSubgroups = 48, - .requiredSubgroupSizeStages = VK_SHADER_STAGE_ALL, + .minSubgroupSize = pan_subgroup_size(arch), + .maxSubgroupSize = pan_subgroup_size(arch), + .maxComputeWorkgroupSubgroups = + device->kmod.props.max_threads_per_wg / pan_subgroup_size(arch), + .requiredSubgroupSizeStages = VK_SHADER_STAGE_COMPUTE_BIT, /* XXX: VK_EXT_inline_uniform_block */ .maxInlineUniformBlockSize = MAX_INLINE_UNIFORM_BLOCK_SIZE, .maxPerStageDescriptorInlineUniformBlocks =