mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-28 10:20:09 +01:00
spirv: Handle MakePointerAvailable/Visible
Emit barriers with semantics matching the access operand and the
storage class of the pointer.
v2: Fix order of visible / available emission relative to the
operations. (Bas)
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
parent
129c85c28b
commit
b8784fe652
1 changed files with 32 additions and 0 deletions
|
|
@ -2533,6 +2533,22 @@ vtn_handle_variables(struct vtn_builder *b, SpvOp opcode,
|
|||
return;
|
||||
}
|
||||
|
||||
if (count > 4) {
|
||||
unsigned idx = 5;
|
||||
SpvMemoryAccessMask access = w[4];
|
||||
if (access & SpvMemoryAccessAlignedMask)
|
||||
idx++;
|
||||
|
||||
if (access & SpvMemoryAccessMakePointerVisibleMask) {
|
||||
SpvMemorySemanticsMask semantics =
|
||||
SpvMemorySemanticsMakeVisibleMask |
|
||||
vtn_storage_class_to_memory_semantics(src->ptr_type->storage_class);
|
||||
|
||||
SpvScope scope = vtn_constant_uint(b, w[idx]);
|
||||
vtn_emit_memory_barrier(b, scope, semantics);
|
||||
}
|
||||
}
|
||||
|
||||
vtn_push_ssa(b, w[2], res_type, vtn_variable_load(b, src));
|
||||
break;
|
||||
}
|
||||
|
|
@ -2582,6 +2598,22 @@ vtn_handle_variables(struct vtn_builder *b, SpvOp opcode,
|
|||
|
||||
struct vtn_ssa_value *src = vtn_ssa_value(b, w[2]);
|
||||
vtn_variable_store(b, src, dest);
|
||||
|
||||
if (count > 3) {
|
||||
unsigned idx = 4;
|
||||
SpvMemoryAccessMask access = w[3];
|
||||
|
||||
if (access & SpvMemoryAccessAlignedMask)
|
||||
idx++;
|
||||
|
||||
if (access & SpvMemoryAccessMakePointerAvailableMask) {
|
||||
SpvMemorySemanticsMask semantics =
|
||||
SpvMemorySemanticsMakeAvailableMask |
|
||||
vtn_storage_class_to_memory_semantics(dest->ptr_type->storage_class);
|
||||
SpvScope scope = vtn_constant_uint(b, w[idx]);
|
||||
vtn_emit_memory_barrier(b, scope, semantics);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue