anv: Add support for shaderStorageImageWriteWithoutFormat
authorAlex Smith <asmith@feralinteractive.com>
Tue, 14 Feb 2017 10:34:49 +0000 (10:34 +0000)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 14 Feb 2017 16:16:52 +0000 (08:16 -0800)
commit924a8cbb408e7dd110d172093908f99926b7970d
tree5804a5c32f959de05fbaaeeccfda2cd96e4f9fee
parent94d48b7f9f143ff333dff4eba8069ee26acbf4e0
anv: Add support for shaderStorageImageWriteWithoutFormat

This allows shaders to write to storage images declared with unknown
format if they are decorated with NonReadable ("writeonly" in GLSL).

Previously an image view would always use a lowered format for its
surface state, however when a shader declares a write-only image, we
should use the real format. Since we don't know at view creation time
whether it will be used with only write-only images in shaders, create
two surface states using both the original format and the lowered
format. When emitting the binding table, choose between the states
based on whether the image is declared write-only in the shader.

Tested on both Sascha Willems' computeshader sample (with the original
shaders and ones modified to declare images writeonly and omit their
format qualifiers) and on our own shaders for which we need support
for this.

Signed-off-by: Alex Smith <asmith@feralinteractive.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/vulkan/anv_device.c
src/intel/vulkan/anv_image.c
src/intel/vulkan/anv_nir_apply_pipeline_layout.c
src/intel/vulkan/anv_pipeline.c
src/intel/vulkan/anv_private.h
src/intel/vulkan/genX_cmd_buffer.c