nir: Consider deref instructions in lower_phis_to_scalar
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com> Acked-by: Rob Clark <robdclark@gmail.com> Acked-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Acked-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -83,10 +83,19 @@ is_phi_src_scalarizable(nir_phi_src *src,
|
|||||||
nir_intrinsic_instr *src_intrin = nir_instr_as_intrinsic(src_instr);
|
nir_intrinsic_instr *src_intrin = nir_instr_as_intrinsic(src_instr);
|
||||||
|
|
||||||
switch (src_intrin->intrinsic) {
|
switch (src_intrin->intrinsic) {
|
||||||
|
case nir_intrinsic_load_deref: {
|
||||||
|
nir_deref_instr *deref = nir_src_as_deref(src_intrin->src[0]);
|
||||||
|
return deref->mode == nir_var_shader_in ||
|
||||||
|
deref->mode == nir_var_uniform;
|
||||||
|
}
|
||||||
|
|
||||||
case nir_intrinsic_load_var:
|
case nir_intrinsic_load_var:
|
||||||
return src_intrin->variables[0]->var->data.mode == nir_var_shader_in ||
|
return src_intrin->variables[0]->var->data.mode == nir_var_shader_in ||
|
||||||
src_intrin->variables[0]->var->data.mode == nir_var_uniform;
|
src_intrin->variables[0]->var->data.mode == nir_var_uniform;
|
||||||
|
|
||||||
|
case nir_intrinsic_interp_deref_at_centroid:
|
||||||
|
case nir_intrinsic_interp_deref_at_sample:
|
||||||
|
case nir_intrinsic_interp_deref_at_offset:
|
||||||
case nir_intrinsic_interp_var_at_centroid:
|
case nir_intrinsic_interp_var_at_centroid:
|
||||||
case nir_intrinsic_interp_var_at_sample:
|
case nir_intrinsic_interp_var_at_sample:
|
||||||
case nir_intrinsic_interp_var_at_offset:
|
case nir_intrinsic_interp_var_at_offset:
|
||||||
@@ -299,8 +308,6 @@ nir_lower_phis_to_scalar(nir_shader *shader)
|
|||||||
{
|
{
|
||||||
bool progress = false;
|
bool progress = false;
|
||||||
|
|
||||||
nir_assert_lowered_derefs(shader, nir_lower_load_store_derefs);
|
|
||||||
|
|
||||||
nir_foreach_function(function, shader) {
|
nir_foreach_function(function, shader) {
|
||||||
if (function->impl)
|
if (function->impl)
|
||||||
progress = lower_phis_to_scalar_impl(function->impl) || progress;
|
progress = lower_phis_to_scalar_impl(function->impl) || progress;
|
||||||
|
Reference in New Issue
Block a user