From bc4c853b490b1a230c9018df60670583be121009 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 6 Jan 2020 21:31:46 -0500 Subject: [PATCH] pan/midgard: Account for z/w flip in texelFetch Required for proper txf of 2D arrays. Fixes dEQP-GLES3.functional.shaders.texture_functions.texelfetch.*2darray* Signed-off-by: Alyssa Rosenzweig Reviewed-by: Tomeu Vizoso --- src/panfrost/midgard/midgard_compile.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/panfrost/midgard/midgard_compile.c b/src/panfrost/midgard/midgard_compile.c index 39796d3eb9a..568a08da44c 100644 --- a/src/panfrost/midgard/midgard_compile.c +++ b/src/panfrost/midgard/midgard_compile.c @@ -1784,6 +1784,11 @@ emit_texop_native(compiler_context *ctx, nir_tex_instr *instr, unsigned coord_mask = mask_of(instr->coord_components); + bool flip_zw = (instr->sampler_dim == GLSL_SAMPLER_DIM_2D) && (coord_mask & (1 << COMPONENT_Z)); + + if (flip_zw) + coord_mask ^= ((1 << COMPONENT_Z) | (1 << COMPONENT_W)); + if (instr->sampler_dim == GLSL_SAMPLER_DIM_CUBE) { /* texelFetch is undefined on samplerCube */ assert(midgard_texop != TEXTURE_OP_TEXEL_FETCH); @@ -1806,6 +1811,10 @@ emit_texop_native(compiler_context *ctx, nir_tex_instr *instr, /* mov coord_temp, coords */ midgard_instruction mov = v_mov(index, coords); mov.mask = coord_mask; + + if (flip_zw) + mov.swizzle[1][COMPONENT_W] = COMPONENT_Z; + emit_mir_instruction(ctx, mov); } else { coords = index; -- 2.30.2