nir: fix lower vars to ssa for larger vector sizes.
This has a couple of hardcoded vec4 limits in it, change them to the proper sizing to avoid future issues. Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
2774d39366
commit
6fd6246d92
|
@ -534,7 +534,7 @@ rename_variables(struct lower_variables_state *state)
|
||||||
nir_op_imov);
|
nir_op_imov);
|
||||||
mov->src[0].src = nir_src_for_ssa(
|
mov->src[0].src = nir_src_for_ssa(
|
||||||
nir_phi_builder_value_get_block_def(node->pb_value, block));
|
nir_phi_builder_value_get_block_def(node->pb_value, block));
|
||||||
for (unsigned i = intrin->num_components; i < 4; i++)
|
for (unsigned i = intrin->num_components; i < NIR_MAX_VEC_COMPONENTS; i++)
|
||||||
mov->src[0].swizzle[i] = 0;
|
mov->src[0].swizzle[i] = 0;
|
||||||
|
|
||||||
assert(intrin->dest.is_ssa);
|
assert(intrin->dest.is_ssa);
|
||||||
|
@ -584,8 +584,8 @@ rename_variables(struct lower_variables_state *state)
|
||||||
* intrin->num_components and value->num_components
|
* intrin->num_components and value->num_components
|
||||||
* may differ.
|
* may differ.
|
||||||
*/
|
*/
|
||||||
unsigned swiz[4];
|
unsigned swiz[NIR_MAX_VEC_COMPONENTS];
|
||||||
for (unsigned i = 0; i < 4; i++)
|
for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++)
|
||||||
swiz[i] = i < intrin->num_components ? i : 0;
|
swiz[i] = i < intrin->num_components ? i : 0;
|
||||||
|
|
||||||
new_def = nir_swizzle(&b, value, swiz,
|
new_def = nir_swizzle(&b, value, swiz,
|
||||||
|
@ -597,7 +597,7 @@ rename_variables(struct lower_variables_state *state)
|
||||||
* written values with the existing contents of unwritten
|
* written values with the existing contents of unwritten
|
||||||
* channels, creating a new SSA value for the whole vector.
|
* channels, creating a new SSA value for the whole vector.
|
||||||
*/
|
*/
|
||||||
nir_ssa_def *srcs[4];
|
nir_ssa_def *srcs[NIR_MAX_VEC_COMPONENTS];
|
||||||
for (unsigned i = 0; i < intrin->num_components; i++) {
|
for (unsigned i = 0; i < intrin->num_components; i++) {
|
||||||
if (wrmask & (1 << i)) {
|
if (wrmask & (1 << i)) {
|
||||||
srcs[i] = nir_channel(&b, value, i);
|
srcs[i] = nir_channel(&b, value, i);
|
||||||
|
|
Loading…
Reference in New Issue