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

Lionel Landwerlin lionel.g.landwerlin at intel.com
Mon Feb 13 16:29:17 UTC 2017


Run this by our CI earlier today and got a few failures :

dEQP-VK.image.load_store.buffer.r8g8b8a8_snorm
dEQP-VK.image.load_store.buffer.r8g8b8a8_unorm
dEQP-VK.image.format_reinterpret.buffer.r32_uint_r8g8b8a8_snorm
dEQP-VK.image.format_reinterpret.buffer.r8g8b8a8_uint_r8g8b8a8_unorm
dEQP-VK.image.format_reinterpret.buffer.r8g8b8a8_sint_r8g8b8a8_snorm
dEQP-VK.image.format_reinterpret.buffer.r8g8b8a8_sint_r8g8b8a8_unorm
dEQP-VK.image.format_reinterpret.buffer.r32_sint_r8g8b8a8_unorm
dEQP-VK.image.format_reinterpret.buffer.r32_sint_r8g8b8a8_snorm
dEQP-VK.image.format_reinterpret.buffer.r32_uint_r8g8b8a8_unorm
dEQP-VK.image.format_reinterpret.buffer.r8g8b8a8_snorm_r8g8b8a8_unorm
dEQP-VK.image.store.buffer.r8g8b8a8_unorm
dEQP-VK.image.store.buffer.r8g8b8a8_snorm

I'm not quite sure why, it seems our backend discards format layout 
qualifiers when we have writeonly set.

-
Lionel

On 13/02/17 16:10, Jason Ekstrand wrote:
> Reviewed-by: Jason Ekstrand <jason at jlekstrand.net 
> <mailto:jason at jlekstrand.net>>
>
> On Thu, Feb 9, 2017 at 8:06 AM, Alex Smith 
> <asmith at feralinteractive.com <mailto:asmith at feralinteractive.com>> 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
>     <mailto:asmith at feralinteractive.com>>
>     ---
>      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:
>     --
>     2.7.4
>
>     _______________________________________________
>     mesa-dev mailing list
>     mesa-dev at lists.freedesktop.org <mailto:mesa-dev at lists.freedesktop.org>
>     https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>     <https://lists.freedesktop.org/mailman/listinfo/mesa-dev>
>
>
>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170213/3219ec3f/attachment.html>


More information about the mesa-dev mailing list