From: Alyssa Rosenzweig Date: Tue, 7 Jan 2020 02:31:46 +0000 (-0500) Subject: pan/midgard: Account for z/w flip in texelFetch X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bc4c853b490b1a230c9018df60670583be121009;p=mesa.git 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 --- 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;