mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 09:20:12 +01:00
intel/fs: Implement scoped_memory_barrier
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
901071044e
commit
e142061399
1 changed files with 19 additions and 8 deletions
|
|
@ -4208,6 +4208,7 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case nir_intrinsic_scoped_memory_barrier:
|
||||||
case nir_intrinsic_group_memory_barrier:
|
case nir_intrinsic_group_memory_barrier:
|
||||||
case nir_intrinsic_memory_barrier_shared:
|
case nir_intrinsic_memory_barrier_shared:
|
||||||
case nir_intrinsic_memory_barrier_atomic_counter:
|
case nir_intrinsic_memory_barrier_atomic_counter:
|
||||||
|
|
@ -4215,15 +4216,25 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
|
||||||
case nir_intrinsic_memory_barrier_image:
|
case nir_intrinsic_memory_barrier_image:
|
||||||
case nir_intrinsic_memory_barrier: {
|
case nir_intrinsic_memory_barrier: {
|
||||||
bool l3_fence, slm_fence;
|
bool l3_fence, slm_fence;
|
||||||
if (devinfo->gen >= 11) {
|
if (instr->intrinsic == nir_intrinsic_scoped_memory_barrier) {
|
||||||
l3_fence = instr->intrinsic != nir_intrinsic_memory_barrier_shared;
|
nir_variable_mode modes = nir_intrinsic_memory_modes(instr);
|
||||||
slm_fence = instr->intrinsic == nir_intrinsic_group_memory_barrier ||
|
l3_fence = modes & (nir_var_shader_out |
|
||||||
instr->intrinsic == nir_intrinsic_memory_barrier ||
|
nir_var_mem_ssbo |
|
||||||
instr->intrinsic == nir_intrinsic_memory_barrier_shared;
|
nir_var_mem_global);
|
||||||
} else {
|
|
||||||
/* Prior to gen11, we only have one kind of fence. */
|
/* Prior to gen11, we only have one kind of fence. */
|
||||||
l3_fence = true;
|
slm_fence = devinfo->gen >= 11 && (modes & nir_var_mem_shared);
|
||||||
slm_fence = false;
|
l3_fence |= devinfo->gen < 11 && (modes & nir_var_mem_shared);
|
||||||
|
} else {
|
||||||
|
if (devinfo->gen >= 11) {
|
||||||
|
l3_fence = instr->intrinsic != nir_intrinsic_memory_barrier_shared;
|
||||||
|
slm_fence = instr->intrinsic == nir_intrinsic_group_memory_barrier ||
|
||||||
|
instr->intrinsic == nir_intrinsic_memory_barrier ||
|
||||||
|
instr->intrinsic == nir_intrinsic_memory_barrier_shared;
|
||||||
|
} else {
|
||||||
|
/* Prior to gen11, we only have one kind of fence. */
|
||||||
|
l3_fence = true;
|
||||||
|
slm_fence = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Be conservative in Gen11+ and always stall in a fence. Since there
|
/* Be conservative in Gen11+ and always stall in a fence. Since there
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue