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);
|
||||
|
||||
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:
|
||||
return src_intrin->variables[0]->var->data.mode == nir_var_shader_in ||
|
||||
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_sample:
|
||||
case nir_intrinsic_interp_var_at_offset:
|
||||
@@ -299,8 +308,6 @@ nir_lower_phis_to_scalar(nir_shader *shader)
|
||||
{
|
||||
bool progress = false;
|
||||
|
||||
nir_assert_lowered_derefs(shader, nir_lower_load_store_derefs);
|
||||
|
||||
nir_foreach_function(function, shader) {
|
||||
if (function->impl)
|
||||
progress = lower_phis_to_scalar_impl(function->impl) || progress;
|
||||
|
Reference in New Issue
Block a user