Mesa (master): radv: fix compute pipeline keys when optimizations are disabled
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Nov 4 10:02:43 UTC 2019
Module: Mesa
Branch: master
Commit: 9ab27647ff5379e8095a70c23dd16792f074c8c7
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9ab27647ff5379e8095a70c23dd16792f074c8c7
Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
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 <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
---
src/amd/vulkan/radv_pipeline.c | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index 544237062a3..ee0a2438788 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -5065,6 +5065,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,
@@ -5098,13 +5111,16 @@ static VkResult radv_compute_pipeline_create(
pStages[MESA_SHADER_COMPUTE] = &pCreateInfo->stage;
+ struct radv_pipeline_key key =
+ radv_generate_compute_pipeline_key(pipeline, pCreateInfo);
+
if (radv_device_use_secure_compile(device->instance)) {
- result = radv_secure_compile(pipeline, device, &(struct radv_pipeline_key) {0}, pStages, pCreateInfo->flags, 1);
+ result = radv_secure_compile(pipeline, device, &key, pStages, pCreateInfo->flags, 1);
*pPipeline = radv_pipeline_to_handle(pipeline);
return result;
} else {
- radv_create_shaders(pipeline, device, cache, &(struct radv_pipeline_key) {0}, pStages, pCreateInfo->flags, pipeline_feedback, stage_feedbacks);
+ 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);
More information about the mesa-commit
mailing list