mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-19 04:58:08 +02:00
With the new nir_opt_barrier_modes() pass, we may encounter control
barriers with no memory modes set, such as:
@barrier () (execution_scope=WORKGROUP, memory_scope=WORKGROUP, mem_semantics=ACQ|REL, mem_modes=0)
The DXIL validator documentation [1] mentions an
INSTR.BARRIERMODENOMEMORY validation rule:
"sync must include some form of memory barrier - _u (UAV) and/or
_g (Thread Group Shared Memory). Only _t (thread group sync) is
optional."
We were generating a dx.op.barrier instruction with only one flag,
DXIL_BARRIER_MODE_SYNC_THREAD_GROUP. This seems to run afoul of the
above validator rule. So, this patch adjusts the code generator to
set DXIL_BARRIER_MODE_UAV_FENCE_THREAD_GROUP too, whenever
UAV_FENCE_GLOBAL isn't required.
[1] https://github.com/microsoft/DirectXShaderCompiler/blob/main/docs/DXIL.rst
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24842>
|
||
|---|---|---|
| .. | ||
| dxcapi.h | ||
| dxil_buffer.c | ||
| dxil_buffer.h | ||
| dxil_buffer_test.c | ||
| dxil_container.c | ||
| dxil_container.h | ||
| dxil_dump.c | ||
| dxil_dump.h | ||
| dxil_dump_decls.h | ||
| dxil_enums.c | ||
| dxil_enums.h | ||
| dxil_function.c | ||
| dxil_function.h | ||
| dxil_internal.h | ||
| dxil_module.c | ||
| dxil_module.h | ||
| dxil_nir.c | ||
| dxil_nir.h | ||
| dxil_nir_algebraic.py | ||
| dxil_nir_lower_int_cubemaps.c | ||
| dxil_nir_lower_int_cubemaps.h | ||
| dxil_nir_lower_int_samplers.c | ||
| dxil_nir_lower_int_samplers.h | ||
| dxil_nir_lower_vs_vertex_conversion.c | ||
| dxil_nir_tess.c | ||
| dxil_signature.c | ||
| dxil_signature.h | ||
| dxil_validator.cpp | ||
| dxil_validator.h | ||
| dxil_versions.h | ||
| meson.build | ||
| nir_to_dxil.c | ||
| nir_to_dxil.h | ||