mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-01 22:40:09 +01:00
nir/lower_task_shader: allow offsetting of the start of payload
We need this, because on Intel task payload starts with private header,
followed by user-accessible data.
Fixes: 37e78803d7 ("intel/compiler: use nir_lower_task_shader pass")
Reviewed-by: Caio Oliveira <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19409>
This commit is contained in:
parent
7aaafaa8ae
commit
f6adfd6278
2 changed files with 9 additions and 1 deletions
|
|
@ -5440,6 +5440,7 @@ bool nir_lower_gs_intrinsics(nir_shader *shader, nir_lower_gs_intrinsics_flags o
|
|||
typedef struct {
|
||||
bool payload_to_shared_for_atomics : 1;
|
||||
bool payload_to_shared_for_small_types : 1;
|
||||
uint32_t payload_offset_in_bytes;
|
||||
} nir_lower_task_shader_options;
|
||||
|
||||
bool nir_lower_task_shader(nir_shader *shader, nir_lower_task_shader_options options);
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ typedef struct {
|
|||
bool payload_in_shared;
|
||||
/* Shared memory address where task_payload will be located. */
|
||||
uint32_t payload_shared_addr;
|
||||
uint32_t payload_offset_in_bytes;
|
||||
} lower_task_state;
|
||||
|
||||
static bool
|
||||
|
|
@ -216,7 +217,12 @@ emit_shared_to_payload_copy(nir_builder *b,
|
|||
.memory_modes = nir_var_mem_shared);
|
||||
|
||||
for (unsigned i = 0; i < copies_per_invocation; ++i) {
|
||||
unsigned const_off = bytes_per_copy * invocations * i;
|
||||
/* Payload_size is a size of user-accessible payload, but on some
|
||||
* hardware (e.g. Intel) payload has a private header, which we have
|
||||
* to offset (payload_offset_in_bytes).
|
||||
*/
|
||||
unsigned const_off =
|
||||
bytes_per_copy * invocations * i + s->payload_offset_in_bytes;
|
||||
|
||||
/* Read from shared memory. */
|
||||
nir_ssa_def *copy =
|
||||
|
|
@ -430,6 +436,7 @@ nir_lower_task_shader(nir_shader *shader,
|
|||
lower_task_state state = {
|
||||
.payload_shared_addr = ALIGN(shader->info.shared_size, 16),
|
||||
.payload_in_shared = payload_in_shared,
|
||||
.payload_offset_in_bytes = options.payload_offset_in_bytes,
|
||||
};
|
||||
|
||||
if (payload_in_shared)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue