nvk: Enable subgroups features

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
This commit is contained in:
Faith Ekstrand 2023-10-23 09:10:56 -05:00 committed by Marge Bot
parent 4bd9c99ca0
commit c7c73d6d17
3 changed files with 15 additions and 4 deletions

View file

@ -533,6 +533,12 @@ nvk_get_device_properties(const struct nvk_instance *instance,
.sparseResidencyNonResidentStrict = true, .sparseResidencyNonResidentStrict = true,
/* Vulkan 1.1 properties */ /* 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, .pointClippingBehavior = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY,
.maxMultiviewViewCount = NVK_MAX_MULTIVIEW_VIEW_COUNT, .maxMultiviewViewCount = NVK_MAX_MULTIVIEW_VIEW_COUNT,
.maxMultiviewInstanceIndex = UINT32_MAX, .maxMultiviewInstanceIndex = UINT32_MAX,

View file

@ -79,8 +79,8 @@ get_prog_optimize(void)
return debug_get_num_option("NV50_PROG_OPTIMIZE", 3); return debug_get_num_option("NV50_PROG_OPTIMIZE", 3);
} }
static uint32_t VkShaderStageFlags
get_nak_stages(void) nvk_nak_stages(void)
{ {
const struct debug_control flags[] = { const struct debug_control flags[] = {
{ "vs", BITFIELD64_BIT(MESA_SHADER_VERTEX) }, { "vs", BITFIELD64_BIT(MESA_SHADER_VERTEX) },
@ -99,7 +99,7 @@ get_nak_stages(void)
static bool static bool
use_nak(gl_shader_stage stage) use_nak(gl_shader_stage stage)
{ {
return get_nak_stages() & BITFIELD64_BIT(stage); return nvk_nak_stages() & BITFIELD64_BIT(stage);
} }
uint64_t 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_debug = get_prog_debug();
uint64_t prog_optimize = get_prog_optimize(); 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); uint64_t nak_flags = nak_debug_flags(pdev->nak);
assert(prog_debug <= UINT8_MAX); assert(prog_debug <= UINT8_MAX);
@ -153,6 +153,9 @@ nvk_physical_device_spirv_options(const struct nvk_physical_device *pdev,
.runtime_descriptor_array = true, .runtime_descriptor_array = true,
.shader_clock = true, .shader_clock = true,
.shader_viewport_index_layer = true, .shader_viewport_index_layer = true,
.subgroup_ballot = true,
.subgroup_basic = true,
.subgroup_vote = true,
.tessellation = true, .tessellation = true,
.transform_feedback = true, .transform_feedback = true,
.variable_pointers = true, .variable_pointers = true,

View file

@ -96,6 +96,8 @@ nvk_shader_address(const struct nvk_shader *shader)
return shader->upload_addr + shader->upload_padding; return shader->upload_addr + shader->upload_padding;
} }
VkShaderStageFlags nvk_nak_stages(void);
uint64_t uint64_t
nvk_physical_device_compiler_flags(const struct nvk_physical_device *pdev); nvk_physical_device_compiler_flags(const struct nvk_physical_device *pdev);