diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c index be0b52757e5..08424c3e56d 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c @@ -370,6 +370,15 @@ get_src(struct etna_compile *c, nir_src *src) return (hw_src) { .use = 1, .rgroup = INST_RGROUP_INTERNAL }; case nir_intrinsic_load_frag_coord: return SRC_REG(0, INST_SWIZ_IDENTITY); + case nir_intrinsic_load_texture_rect_scaling: { + int sampler = nir_src_as_int(intr->src[0]); + nir_const_value values[] = { + TEXSCALE(sampler, 0), + TEXSCALE(sampler, 1), + }; + + return src_swizzle(const_src(c, values, 2), SWIZZLE(X,Y,X,X)); + } default: compile_error(c, "Unhandled NIR intrinsic type: %s\n", nir_intrinsic_infos[intr->intrinsic].name); @@ -582,6 +591,7 @@ emit_intrinsic(struct etna_compile *c, nir_intrinsic_instr * intr) break; case nir_intrinsic_load_input: case nir_intrinsic_load_instance_id: + case nir_intrinsic_load_texture_rect_scaling: break; default: compile_error(c, "Unhandled NIR intrinsic type: %s\n", diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.h b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.h index a44710704ae..149532b647a 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.h +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.h @@ -215,7 +215,8 @@ dest_for_instr(nir_instr *instr) if (intr->intrinsic == nir_intrinsic_load_uniform || intr->intrinsic == nir_intrinsic_load_ubo || intr->intrinsic == nir_intrinsic_load_input || - intr->intrinsic == nir_intrinsic_load_instance_id) + intr->intrinsic == nir_intrinsic_load_instance_id || + intr->intrinsic == nir_intrinsic_load_texture_rect_scaling) dest = &intr->dest; } break; case nir_instr_type_deref: