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 <ja...@jlekstrand.net <mailto:ja...@jlekstrand.net>>

On Thu, Feb 9, 2017 at 8:06 AM, Alex Smith <asm...@feralinteractive.com <mailto:asm...@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 <asm...@feralinteractive.com
    <mailto:asm...@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@lists.freedesktop.org <mailto:mesa-dev@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@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to