anv/apply_pipeline_layout: Set image.write_only to false
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 13 Feb 2017 16:30:14 +0000 (08:30 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 14 Feb 2017 16:16:45 +0000 (08:16 -0800)
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 <lionel.g.landwerlin@intel.com>
src/intel/vulkan/anv_nir_apply_pipeline_layout.c

index 8846c2e6c08e6fc3ceb857f72c68b759ab6ceedd..d6b85611419cd094d978e328a69f29fe8432b7bf 100644 (file)
@@ -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;
          }