diff --git a/src/nouveau/vulkan/nvk_physical_device.c b/src/nouveau/vulkan/nvk_physical_device.c index 043f4275c6f..df9144483c0 100644 --- a/src/nouveau/vulkan/nvk_physical_device.c +++ b/src/nouveau/vulkan/nvk_physical_device.c @@ -533,6 +533,12 @@ nvk_get_device_properties(const struct nvk_instance *instance, .sparseResidencyNonResidentStrict = true, /* Vulkan 1.1 properties */ + .subgroupSize = 32, + .subgroupSupportedStages = nvk_nak_stages(), + .subgroupSupportedOperations = VK_SUBGROUP_FEATURE_BALLOT_BIT | + VK_SUBGROUP_FEATURE_BASIC_BIT | + VK_SUBGROUP_FEATURE_VOTE_BIT, + .subgroupQuadOperationsInAllStages = false, .pointClippingBehavior = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY, .maxMultiviewViewCount = NVK_MAX_MULTIVIEW_VIEW_COUNT, .maxMultiviewInstanceIndex = UINT32_MAX, diff --git a/src/nouveau/vulkan/nvk_shader.c b/src/nouveau/vulkan/nvk_shader.c index bc4567ae347..ec4b6f7ab7f 100644 --- a/src/nouveau/vulkan/nvk_shader.c +++ b/src/nouveau/vulkan/nvk_shader.c @@ -79,8 +79,8 @@ get_prog_optimize(void) return debug_get_num_option("NV50_PROG_OPTIMIZE", 3); } -static uint32_t -get_nak_stages(void) +VkShaderStageFlags +nvk_nak_stages(void) { const struct debug_control flags[] = { { "vs", BITFIELD64_BIT(MESA_SHADER_VERTEX) }, @@ -99,7 +99,7 @@ get_nak_stages(void) static bool use_nak(gl_shader_stage stage) { - return get_nak_stages() & BITFIELD64_BIT(stage); + return nvk_nak_stages() & BITFIELD64_BIT(stage); } uint64_t @@ -107,7 +107,7 @@ nvk_physical_device_compiler_flags(const struct nvk_physical_device *pdev) { uint64_t prog_debug = get_prog_debug(); uint64_t prog_optimize = get_prog_optimize(); - uint64_t nak_stages = get_nak_stages(); + uint64_t nak_stages = nvk_nak_stages(); uint64_t nak_flags = nak_debug_flags(pdev->nak); assert(prog_debug <= UINT8_MAX); @@ -153,6 +153,9 @@ nvk_physical_device_spirv_options(const struct nvk_physical_device *pdev, .runtime_descriptor_array = true, .shader_clock = true, .shader_viewport_index_layer = true, + .subgroup_ballot = true, + .subgroup_basic = true, + .subgroup_vote = true, .tessellation = true, .transform_feedback = true, .variable_pointers = true, diff --git a/src/nouveau/vulkan/nvk_shader.h b/src/nouveau/vulkan/nvk_shader.h index 14b2fa4813b..5394d39c814 100644 --- a/src/nouveau/vulkan/nvk_shader.h +++ b/src/nouveau/vulkan/nvk_shader.h @@ -96,6 +96,8 @@ nvk_shader_address(const struct nvk_shader *shader) return shader->upload_addr + shader->upload_padding; } +VkShaderStageFlags nvk_nak_stages(void); + uint64_t nvk_physical_device_compiler_flags(const struct nvk_physical_device *pdev);