diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index a7dcb6e9387..67e0d353519 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -2900,6 +2900,22 @@ radv_generate_graphics_pipeline_key(const struct radv_graphics_pipeline *pipelin key.dynamic_color_write_mask = !!(pipeline->dynamic_states & RADV_DYNAMIC_COLOR_WRITE_MASK); + if (device->physical_device->use_ngg) { + VkShaderStageFlags ngg_stage; + + if (pipeline->active_stages & VK_SHADER_STAGE_GEOMETRY_BIT) { + ngg_stage = VK_SHADER_STAGE_GEOMETRY_BIT; + } else if (pipeline->active_stages & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) { + ngg_stage = VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT; + } else { + ngg_stage = VK_SHADER_STAGE_VERTEX_BIT; + } + + key.dynamic_provoking_vtx_mode = + !!(pipeline->dynamic_states & RADV_DYNAMIC_PROVOKING_VERTEX_MODE) && + (ngg_stage == VK_SHADER_STAGE_VERTEX_BIT || ngg_stage == VK_SHADER_STAGE_GEOMETRY_BIT); + } + return key; } diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h index 89f21ceaa1b..b8d966d6412 100644 --- a/src/amd/vulkan/radv_shader.h +++ b/src/amd/vulkan/radv_shader.h @@ -65,6 +65,7 @@ struct radv_pipeline_key { uint32_t dynamic_patch_control_points : 1; uint32_t dynamic_rasterization_samples : 1; uint32_t dynamic_color_write_mask : 1; + uint32_t dynamic_provoking_vtx_mode : 1; struct { uint32_t instance_rate_inputs;