Module: Mesa Branch: 19.2 Commit: 3ed8c942446277b02dc7efabfb49813c10c417c2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3ed8c942446277b02dc7efabfb49813c10c417c2
Author: Samuel Pitoiset <[email protected]> Date: Fri Nov 1 09:34:12 2019 +0100 radv: fix compute pipeline keys when optimizations are disabled If an app first creates a compute pipeline with VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT set, then re-compile it without that flag, the driver should re-compile the compute shader. Otherwise, it will return the unoptimized one. Fixes: ce188813bfe ("radv: add initial support for VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT") Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]> (cherry picked from commit 9ab27647ff5379e8095a70c23dd16792f074c8c7) --- src/amd/vulkan/radv_pipeline.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 584d4cc5bea..a0ceb48d2fa 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -4755,6 +4755,19 @@ radv_compute_generate_pm4(struct radv_pipeline *pipeline) assert(pipeline->cs.cdw <= pipeline->cs.max_dw); } +static struct radv_pipeline_key +radv_generate_compute_pipeline_key(struct radv_pipeline *pipeline, + const VkComputePipelineCreateInfo *pCreateInfo) +{ + struct radv_pipeline_key key; + memset(&key, 0, sizeof(key)); + + if (pCreateInfo->flags & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT) + key.optimisations_disabled = 1; + + return key; +} + static VkResult radv_compute_pipeline_create( VkDevice _device, VkPipelineCache _cache, @@ -4787,7 +4800,11 @@ static VkResult radv_compute_pipeline_create( stage_feedbacks[MESA_SHADER_COMPUTE] = &creation_feedback->pPipelineStageCreationFeedbacks[0]; pStages[MESA_SHADER_COMPUTE] = &pCreateInfo->stage; - radv_create_shaders(pipeline, device, cache, &(struct radv_pipeline_key) {0}, pStages, pCreateInfo->flags, pipeline_feedback, stage_feedbacks); + + struct radv_pipeline_key key = + radv_generate_compute_pipeline_key(pipeline, pCreateInfo); + + radv_create_shaders(pipeline, device, cache, &key, pStages, pCreateInfo->flags, pipeline_feedback, stage_feedbacks); pipeline->user_data_0[MESA_SHADER_COMPUTE] = radv_pipeline_stage_to_user_data_0(pipeline, MESA_SHADER_COMPUTE, device->physical_device->rad_info.chip_class); pipeline->need_indirect_descriptor_sets |= pipeline->shaders[MESA_SHADER_COMPUTE]->info.need_indirect_descriptor_sets; _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
