spirv: Add pointer helper vars to OpCopyMemory
Reviewed-by: Jesse Natalie <jenatali@microsoft.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Karol Herbst <kherbst@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6472>
This commit is contained in:

committed by
Marge Bot

parent
e7fbec0e09
commit
207b462e93
@@ -2636,10 +2636,13 @@ vtn_handle_variables(struct vtn_builder *b, SpvOp opcode,
|
|||||||
}
|
}
|
||||||
|
|
||||||
case SpvOpCopyMemory: {
|
case SpvOpCopyMemory: {
|
||||||
struct vtn_value *dest = vtn_value(b, w[1], vtn_value_type_pointer);
|
struct vtn_value *dest_val = vtn_value(b, w[1], vtn_value_type_pointer);
|
||||||
struct vtn_value *src = vtn_value(b, w[2], vtn_value_type_pointer);
|
struct vtn_value *src_val = vtn_value(b, w[2], vtn_value_type_pointer);
|
||||||
|
struct vtn_pointer *dest = dest_val->pointer;
|
||||||
|
struct vtn_pointer *src = src_val->pointer;
|
||||||
|
|
||||||
vtn_assert_types_equal(b, opcode, dest->type->deref, src->type->deref);
|
vtn_assert_types_equal(b, opcode, dest_val->type->deref,
|
||||||
|
src_val->type->deref);
|
||||||
|
|
||||||
unsigned idx = 3, dest_alignment, src_alignment;
|
unsigned idx = 3, dest_alignment, src_alignment;
|
||||||
SpvMemoryAccessMask dest_access, src_access;
|
SpvMemoryAccessMask dest_access, src_access;
|
||||||
@@ -2652,13 +2655,13 @@ vtn_handle_variables(struct vtn_builder *b, SpvOp opcode,
|
|||||||
src_access = dest_access;
|
src_access = dest_access;
|
||||||
}
|
}
|
||||||
|
|
||||||
vtn_emit_make_visible_barrier(b, src_access, src_scope, src->pointer->mode);
|
vtn_emit_make_visible_barrier(b, src_access, src_scope, src->mode);
|
||||||
|
|
||||||
vtn_variable_copy(b, dest->pointer, src->pointer,
|
vtn_variable_copy(b, dest, src,
|
||||||
spv_access_to_gl_access(dest_access),
|
spv_access_to_gl_access(dest_access),
|
||||||
spv_access_to_gl_access(src_access));
|
spv_access_to_gl_access(src_access));
|
||||||
|
|
||||||
vtn_emit_make_available_barrier(b, dest_access, dest_scope, dest->pointer->mode);
|
vtn_emit_make_available_barrier(b, dest_access, dest_scope, dest->mode);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user