mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 13:00:09 +01:00
panfrost: Extend fetched framebuffer results
So NIR doesn't complain about invalid swizzles when reading a format with less than 4 channels. Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5755>
This commit is contained in:
parent
d94584c5a6
commit
317be5a16d
1 changed files with 17 additions and 0 deletions
|
|
@ -230,6 +230,22 @@ pan_fill_4(nir_builder *b, nir_ssa_def *v)
|
|||
return nir_vec(b, q, 4);
|
||||
}
|
||||
|
||||
static nir_ssa_def *
|
||||
pan_extend(nir_builder *b, nir_ssa_def *v, unsigned N)
|
||||
{
|
||||
nir_ssa_def *q[4];
|
||||
assert(v->num_components <= 4);
|
||||
assert(N <= 4);
|
||||
|
||||
for (unsigned j = 0; j < v->num_components; ++j)
|
||||
q[j] = nir_channel(b, v, j);
|
||||
|
||||
for (unsigned j = v->num_components; j < N; ++j)
|
||||
q[j] = nir_imm_int(b, 0);
|
||||
|
||||
return nir_vec(b, q, N);
|
||||
}
|
||||
|
||||
static nir_ssa_def *
|
||||
pan_replicate_4(nir_builder *b, nir_ssa_def *v)
|
||||
{
|
||||
|
|
@ -692,6 +708,7 @@ pan_lower_fb_load(nir_shader *shader,
|
|||
}
|
||||
|
||||
unpacked = nir_convert_to_bit_size(b, unpacked, src_type, bits);
|
||||
unpacked = pan_extend(b, unpacked, nir_dest_num_components(intr->dest));
|
||||
|
||||
nir_src rewritten = nir_src_for_ssa(unpacked);
|
||||
nir_ssa_def_rewrite_uses_after(&intr->dest.ssa, rewritten, &intr->instr);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue