From 2c3091858164a1941e75205a823eb6d83b4468ae Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Mon, 13 Feb 2017 08:30:14 -0800 Subject: [PATCH] anv/apply_pipeline_layout: Set image.write_only to false This makes our driver robust to changes in spirv_to_nir which would set this flag on the variable. Right now, our driver relies on spirv_to_nir *not* setting var->data.image.write_only for correctness. Any patch which implements the shaderStorageImageWriteWithoutFormat will need to effectively revert this commit. Reviewed-by: Lionel Landwerlin --- src/intel/vulkan/anv_nir_apply_pipeline_layout.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c index 8846c2e6c08..d6b85611419 100644 --- a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c +++ b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c @@ -398,6 +398,18 @@ anv_nir_apply_pipeline_layout(struct anv_pipeline *pipeline, unsigned binding = var->data.binding; unsigned image_index = state.set[set].image_offsets[binding]; + /* We have a very tight coupling between back-end compiler and + * state setup which requires us to fill the image surface state + * out differently if and only if the image is declared write-only. + * Right now, our state setup code sets up all images as if they + * are read-write. This means that the compiler needs to see + * read-only as well. + * + * Whenever we implement shaderStorageImageWriteWithoutFormat, we + * need to delete this. + */ + var->data.image.write_only = false; + var->data.driver_location = shader->num_uniforms + image_index * BRW_IMAGE_PARAM_SIZE * 4; }