[Mesa-dev] [PATCH v2 2/3] spirv: Add support for SpvCapabilityStorageImageWriteWithoutFormat

Lionel Landwerlin lionel.g.landwerlin at intel.com
Tue Feb 14 10:54:28 UTC 2017


Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>

On 14/02/17 10:34, Alex Smith wrote:
> Allow that capability if the driver indicates that it is supported, and
> flag whether images are read-only/write-only in the nir_variable (based
> on the NonReadable and NonWritable decorations), which drivers may need
> to implement this.
>
> Signed-off-by: Alex Smith <asmith at feralinteractive.com>
> Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
> ---
> No changes in v2.
>
> CTS regressions caused by the previous version of this patch are fixed
> by the first patch in this series.
> ---
>   src/compiler/spirv/nir_spirv.h     | 1 +
>   src/compiler/spirv/spirv_to_nir.c  | 5 ++++-
>   src/compiler/spirv/vtn_variables.c | 5 ++++-
>   3 files changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/src/compiler/spirv/nir_spirv.h b/src/compiler/spirv/nir_spirv.h
> index e0ebc62..e43e9b5 100644
> --- a/src/compiler/spirv/nir_spirv.h
> +++ b/src/compiler/spirv/nir_spirv.h
> @@ -49,6 +49,7 @@ struct nir_spirv_supported_extensions {
>      bool image_ms_array;
>      bool tessellation;
>      bool draw_parameters;
> +   bool image_write_without_format;
>   };
>   
>   nir_function *spirv_to_nir(const uint32_t *words, size_t word_count,
> diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
> index 416e12a..3f77ddf 100644
> --- a/src/compiler/spirv/spirv_to_nir.c
> +++ b/src/compiler/spirv/spirv_to_nir.c
> @@ -2666,7 +2666,6 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
>         case SpvCapabilityMinLod:
>         case SpvCapabilityTransformFeedback:
>         case SpvCapabilityStorageImageReadWithoutFormat:
> -      case SpvCapabilityStorageImageWriteWithoutFormat:
>            vtn_warn("Unsupported SPIR-V capability: %s",
>                     spirv_capability_to_string(cap));
>            break;
> @@ -2702,6 +2701,10 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
>            spv_check_supported(draw_parameters, cap);
>            break;
>   
> +      case SpvCapabilityStorageImageWriteWithoutFormat:
> +         spv_check_supported(image_write_without_format, cap);
> +         break;
> +
>         default:
>            unreachable("Unhandled capability");
>         }
> diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c
> index 098cfb5..d7d882e 100644
> --- a/src/compiler/spirv/vtn_variables.c
> +++ b/src/compiler/spirv/vtn_variables.c
> @@ -1054,8 +1054,12 @@ apply_var_decoration(struct vtn_builder *b, nir_variable *nir_var,
>         assert(nir_var->constant_initializer != NULL);
>         nir_var->data.read_only = true;
>         break;
> +   case SpvDecorationNonReadable:
> +      nir_var->data.image.write_only = true;
> +      break;
>      case SpvDecorationNonWritable:
>         nir_var->data.read_only = true;
> +      nir_var->data.image.read_only = true;
>         break;
>      case SpvDecorationComponent:
>         nir_var->data.location_frac = dec->literals[0];
> @@ -1107,7 +1111,6 @@ apply_var_decoration(struct vtn_builder *b, nir_variable *nir_var,
>      case SpvDecorationAliased:
>      case SpvDecorationVolatile:
>      case SpvDecorationCoherent:
> -   case SpvDecorationNonReadable:
>      case SpvDecorationUniform:
>      case SpvDecorationStream:
>      case SpvDecorationOffset:




More information about the mesa-dev mailing list