Hi,

On 02.01.2018 06:11, Jason Ekstrand wrote:
This patch depends on the first three patches of this series:

https://patchwork.freedesktop.org/series/35469/

I tested subset of Sacha Willems' demos with the above patch series + this patch. Without them, raytracing demo (still) crashes, with them, it works fine.

Tested-by: Eero Tamminen <[email protected]>


On Mon, Jan 1, 2018 at 8:09 PM, Jason Ekstrand <[email protected] <mailto:[email protected]>> wrote:

    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104424
    <https://bugs.freedesktop.org/show_bug.cgi?id=104424>
    ---
      src/compiler/spirv/vtn_variables.c | 31
    +++++++++++++++++++++++++------
      1 file changed, 25 insertions(+), 6 deletions(-)

    diff --git a/src/compiler/spirv/vtn_variables.c
    b/src/compiler/spirv/vtn_variables.c
    index d69b056..48797f6 100644
    --- a/src/compiler/spirv/vtn_variables.c
    +++ b/src/compiler/spirv/vtn_variables.c
    @@ -1899,6 +1899,28 @@ vtn_create_variable(struct vtn_builder *b,
    struct vtn_value *val,
         }
      }

    +static void
    +vtn_assert_types_equal(struct vtn_builder *b, SpvOp opcode,
    +                       struct vtn_type *dst_type, struct vtn_type
    *src_type)
    +{
    +   if (dst_type->val == src_type->val)
    +      return;
    +
    +   if (dst_type->type == src_type->type) {
    +      /* Early versions of GLSLang would re-emit types
    unnecessarily and you
    +       * would end up with OpLoad, OpStore, or OpCopyMemory opcodes
    which have
    +       * mismatched source and destination types.
    +       */
    +      vtn_warn("Source and destination types of %s do not match",
    +               spirv_op_to_string(opcode));
    +   } else {
    +      vtn_fail("Source and destination types of %s do not match: %s
    vs. %s",
    +               spirv_op_to_string(opcode),
    +               glsl_get_type_name(dst_type->type),
    +               glsl_get_type_name(src_type->type));
    +   }
    +}
    +
      void
      vtn_handle_variables(struct vtn_builder *b, SpvOp opcode,
                           const uint32_t *w, unsigned count)
    @@ -1975,8 +1997,7 @@ vtn_handle_variables(struct vtn_builder *b,
    SpvOp opcode,
            struct vtn_value *dest = vtn_value(b, w[1],
    vtn_value_type_pointer);
            struct vtn_value *src = vtn_value(b, w[2],
    vtn_value_type_pointer);

    -      vtn_fail_if(dest->type->deref != src->type->deref,
    -                  "Dereferenced pointer types to OpCopyMemory do
    not match");
    +      vtn_assert_types_equal(b, opcode, dest->type->deref,
    src->type->deref);

            vtn_variable_copy(b, dest->pointer, src->pointer);
            break;
    @@ -1988,8 +2009,7 @@ vtn_handle_variables(struct vtn_builder *b,
    SpvOp opcode,
            struct vtn_value *src_val = vtn_value(b, w[3],
    vtn_value_type_pointer);
            struct vtn_pointer *src = src_val->pointer;

    -      vtn_fail_if(res_type != src_val->type->deref,
    -                  "Result and pointer types of OpLoad do not match");
    +      vtn_assert_types_equal(b, opcode, res_type,
    src_val->type->deref);

            if (src->mode == vtn_variable_mode_image ||
                src->mode == vtn_variable_mode_sampler) {
    @@ -2006,8 +2026,7 @@ vtn_handle_variables(struct vtn_builder *b,
    SpvOp opcode,
            struct vtn_pointer *dest = dest_val->pointer;
            struct vtn_value *src_val = vtn_untyped_value(b, w[2]);

    -      vtn_fail_if(dest_val->type->deref != src_val->type,
    -                  "Value and pointer types of OpStore do not match");
    +      vtn_assert_types_equal(b, opcode, dest_val->type->deref,
    src_val->type);

            if (glsl_type_is_sampler(dest->type->type)) {
               vtn_warn("OpStore of a sampler detected.  Doing
    on-the-fly copy "
    --
    2.5.0.400.gff86faf




_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to