mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-25 16:58:10 +02:00
jay: Set Dispatch GRF Start Register in jay_setup_payload()
We want it to be set to wherever the push constants ended up. Setting it close to the setup_payload_push() call makes this easier. We'll also be adding some extra UGPRs for the fragment shader payload soon, and the partitioning code will just have one big UGPR partition for payload fields, push constants, and general purpose UGPRs, so it really won't know how to do this very well without duplicating a bunch of information. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41688>
This commit is contained in:
parent
0670b40013
commit
4555cd23c6
2 changed files with 26 additions and 16 deletions
|
|
@ -2456,6 +2456,24 @@ read_vector_payload(struct payload_builder *b, enum jay_file file, unsigned len)
|
|||
return jay_collect_vectors(b->b, defs, len);
|
||||
}
|
||||
|
||||
static void
|
||||
setup_payload_dispatch_start(struct nir_to_jay_state *nj,
|
||||
struct payload_builder *p)
|
||||
{
|
||||
jay_shader *s = nj->s;
|
||||
|
||||
const unsigned start_grf = p->offsets[GPR] * jay_grf_per_gpr(nj->s) +
|
||||
p->offsets[UGPR] / jay_ugpr_per_grf(nj->s);
|
||||
|
||||
if (s->stage == MESA_SHADER_FRAGMENT && s->dispatch_width == 32) {
|
||||
s->prog_data->fs.dispatch_grf_start_reg_32 = start_grf;
|
||||
} else if (s->stage == MESA_SHADER_FRAGMENT && s->dispatch_width == 16) {
|
||||
s->prog_data->fs.dispatch_grf_start_reg_16 = start_grf;
|
||||
} else {
|
||||
s->prog_data->base.dispatch_grf_start_reg = start_grf;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
setup_payload_push(struct nir_to_jay_state *nj, struct payload_builder *p)
|
||||
{
|
||||
|
|
@ -2482,12 +2500,13 @@ setup_vertex_payload(struct nir_to_jay_state *nj, struct payload_builder *p)
|
|||
*/
|
||||
p->offsets[GPR] += 7;
|
||||
|
||||
setup_payload_dispatch_start(nj, p);
|
||||
setup_payload_push(nj, p);
|
||||
|
||||
for (unsigned i = 0; i < (8 * nj->s->prog_data->vue.urb_read_length); ++i) {
|
||||
assert(i < ARRAY_SIZE(nj->payload.vs.attributes));
|
||||
nj->payload.vs.attributes[i] = read_payload(p, GPR);
|
||||
}
|
||||
|
||||
setup_payload_push(nj, p);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -2498,6 +2517,8 @@ setup_compute_payload(struct nir_to_jay_state *nj, struct payload_builder *p)
|
|||
|
||||
nj->payload.inline_data =
|
||||
read_vector_payload(p, UGPR, jay_ugpr_per_grf(nj->s));
|
||||
|
||||
setup_payload_dispatch_start(nj, p);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -2553,8 +2574,6 @@ setup_fragment_payload(struct nir_to_jay_state *nj, struct payload_builder *p)
|
|||
nj->payload.u1 = read_vector_payload(p, UGPR, jay_ugpr_per_grf(nj->s));
|
||||
}
|
||||
|
||||
setup_payload_push(nj, p);
|
||||
|
||||
u_foreach_bit(i, nj->s->prog_data->fs.barycentric_interp_modes) {
|
||||
fs->bary[i] = read_vector_payload(p, GPR, 2);
|
||||
}
|
||||
|
|
@ -2567,6 +2586,9 @@ setup_fragment_payload(struct nir_to_jay_state *nj, struct payload_builder *p)
|
|||
fs->coord.w = read_payload(p, GPR);
|
||||
}
|
||||
|
||||
setup_payload_dispatch_start(nj, p);
|
||||
setup_payload_push(nj, p);
|
||||
|
||||
unsigned nr_attribs = 16 * 4; /* TODO */
|
||||
for (unsigned i = 0; i < nr_attribs; ++i) {
|
||||
jay_def comps[] = { read_payload(p, UGPR), read_payload(p, UGPR),
|
||||
|
|
|
|||
|
|
@ -1493,7 +1493,6 @@ jay_partition_grf(jay_shader *shader)
|
|||
assert((uniform_grfs + nonuniform_grfs) == JAY_NUM_PHYS_GRF);
|
||||
|
||||
/* Partition GRFs between GPR & UGPR */
|
||||
unsigned dispatch_grf = 0;
|
||||
unsigned stride4_header_size = 0;
|
||||
|
||||
if (shader->stage == MESA_SHADER_VERTEX) {
|
||||
|
|
@ -1508,7 +1507,6 @@ jay_partition_grf(jay_shader *shader)
|
|||
};
|
||||
|
||||
build_partition(shader, blocks, ARRAY_SIZE(blocks));
|
||||
dispatch_grf = blocks[0] + blocks[1];
|
||||
stride4_header_size = blocks[1] + blocks[3];
|
||||
} else if (shader->stage == MESA_SHADER_FRAGMENT) {
|
||||
unsigned len0 = jay_grf_per_gpr(shader);
|
||||
|
|
@ -1521,7 +1519,6 @@ jay_partition_grf(jay_shader *shader)
|
|||
nonuniform_grfs - payload_grfs, /* GPR: General & EOT */
|
||||
};
|
||||
build_partition(shader, blocks, ARRAY_SIZE(blocks));
|
||||
dispatch_grf = blocks[0] + blocks[1];
|
||||
stride4_header_size = blocks[1];
|
||||
} else {
|
||||
unsigned blocks[] = { uniform_grfs - 4, nonuniform_grfs, 4 };
|
||||
|
|
@ -1538,15 +1535,6 @@ jay_partition_grf(jay_shader *shader)
|
|||
// print_partition(p);
|
||||
validate_partition(p, stride4_header_size, nonuniform_gprs);
|
||||
|
||||
if (shader->stage == MESA_SHADER_FRAGMENT && shader->dispatch_width == 32) {
|
||||
shader->prog_data->fs.dispatch_grf_start_reg_32 = dispatch_grf;
|
||||
} else if (shader->stage == MESA_SHADER_FRAGMENT &&
|
||||
shader->dispatch_width == 16) {
|
||||
shader->prog_data->fs.dispatch_grf_start_reg_16 = dispatch_grf;
|
||||
} else {
|
||||
shader->prog_data->base.dispatch_grf_start_reg = dispatch_grf;
|
||||
}
|
||||
|
||||
/* By construction of our partition, the entire GRF is used. */
|
||||
shader->prog_data->base.grf_used = JAY_NUM_PHYS_GRF;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue