mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 13:28:06 +02:00
v3d: Fix up VS output setup during precompiles.
I noticed that a VS I was debugging was missing all of its output stores -- outputs_written was for POS, VAR0, VAR3, while the shader's variables were POS, VAR9, and VAR12. I'm not sure what outputs_written is supposed to be doing here, but we can just walk the declared variables and avoid both this bug and the emission of extra stvpms for less-than-vec4 varyings.
This commit is contained in:
parent
e1385e879d
commit
f8e6b364b0
1 changed files with 10 additions and 6 deletions
|
|
@ -217,13 +217,17 @@ v3d_shader_precompile(struct v3d_context *v3d,
|
|||
v3d_setup_shared_precompile_key(so, &key.base);
|
||||
|
||||
/* Compile VS: All outputs */
|
||||
for (int vary = 0; vary < 64; vary++) {
|
||||
if (!(s->info.outputs_written & (1ull << vary)))
|
||||
continue;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
nir_foreach_variable(var, &s->outputs) {
|
||||
unsigned array_len = MAX2(glsl_get_length(var->type), 1);
|
||||
assert(array_len == 1);
|
||||
(void)array_len;
|
||||
|
||||
int slot = var->data.location;
|
||||
for (int i = 0; i < glsl_get_components(var->type); i++) {
|
||||
int swiz = var->data.location_frac + i;
|
||||
key.fs_inputs[key.num_fs_inputs++] =
|
||||
v3d_slot_from_slot_and_component(vary,
|
||||
i);
|
||||
v3d_slot_from_slot_and_component(slot,
|
||||
swiz);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue