broadcom/compiler: implement non-uniform offset on vertex outputs
Reviewed-by: Juan A. Suarez <jasuarez@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10723>
This commit is contained in:
parent
067ad7eccc
commit
f71893a942
|
@ -2476,24 +2476,26 @@ emit_store_output_gs(struct v3d_compile *c, nir_intrinsic_instr *instr)
|
||||||
static void
|
static void
|
||||||
emit_store_output_vs(struct v3d_compile *c, nir_intrinsic_instr *instr)
|
emit_store_output_vs(struct v3d_compile *c, nir_intrinsic_instr *instr)
|
||||||
{
|
{
|
||||||
/* XXX perf: Use stvpmv with uniform non-constant offsets and
|
|
||||||
* stvpmd with non-uniform offsets and enable
|
|
||||||
* PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR.
|
|
||||||
*/
|
|
||||||
assert(c->s->info.stage == MESA_SHADER_VERTEX);
|
assert(c->s->info.stage == MESA_SHADER_VERTEX);
|
||||||
assert(instr->num_components == 1);
|
assert(instr->num_components == 1);
|
||||||
|
|
||||||
uint32_t base = nir_intrinsic_base(instr);
|
uint32_t base = nir_intrinsic_base(instr);
|
||||||
|
struct qreg val = ntq_get_src(c, instr->src[0], 0);
|
||||||
|
|
||||||
if (nir_src_is_const(instr->src[1])) {
|
if (nir_src_is_const(instr->src[1])) {
|
||||||
vir_VPM_WRITE(c,
|
vir_VPM_WRITE(c, val,
|
||||||
ntq_get_src(c, instr->src[0], 0),
|
|
||||||
base + nir_src_as_uint(instr->src[1]));
|
base + nir_src_as_uint(instr->src[1]));
|
||||||
} else {
|
} else {
|
||||||
vir_VPM_WRITE_indirect(c,
|
struct qreg offset = vir_ADD(c,
|
||||||
ntq_get_src(c, instr->src[0], 0),
|
|
||||||
vir_ADD(c,
|
|
||||||
ntq_get_src(c, instr->src[1], 1),
|
ntq_get_src(c, instr->src[1], 1),
|
||||||
vir_uniform_ui(c, base)));
|
vir_uniform_ui(c, base));
|
||||||
|
bool is_uniform_offset =
|
||||||
|
!vir_in_nonuniform_control_flow(c) &&
|
||||||
|
!nir_src_is_divergent(instr->src[1]);
|
||||||
|
if (is_uniform_offset)
|
||||||
|
vir_VPM_WRITE_indirect(c, val, offset);
|
||||||
|
else
|
||||||
|
vir_STVPMD(c, offset, val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue