pan/midgard: Generalize temp coordinate to non-2D
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Fri, 20 Dec 2019 22:01:29 +0000 (17:01 -0500)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tue, 24 Dec 2019 23:46:23 +0000 (23:46 +0000)
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/panfrost/midgard/midgard_compile.c

index 1e61cf77dd2d978fb5011092a54b9afe51e519be..5e3c50f50eefdf4cbec8695a0b40aec785ff665d 100644 (file)
@@ -1753,10 +1753,12 @@ emit_texop_native(compiler_context *ctx, nir_tex_instr *instr,
                 case nir_tex_src_coord: {
                         emit_explicit_constant(ctx, index, index);
 
+                        unsigned coord_mask = mask_of(instr->coord_components);
+
                         if (needs_temp_coord) {
                                 /* mov coord_temp, coords */
                                 midgard_instruction mov = v_mov(index, coords);
-                                mov.mask = 0x3;
+                                mov.mask = coord_mask;
                                 emit_mir_instruction(ctx, mov);
                         } else {
                                 coords = index;
@@ -1768,11 +1770,11 @@ emit_texop_native(compiler_context *ctx, nir_tex_instr *instr,
                          * components to keep everything happy */
 
                         if (midgard_texop == TEXTURE_OP_TEXEL_FETCH) {
-                                /* mov index.zw, #0 */
+                                /* mov index.zw, #0, or generalized */
                                 midgard_instruction mov =
                                         v_mov(SSA_FIXED_REGISTER(REGISTER_CONSTANT), coords);
                                 mov.has_constants = true;
-                                mov.mask = (1 << COMPONENT_Z) | (1 << COMPONENT_W);
+                                mov.mask = coord_mask ^ 0xF;
                                 emit_mir_instruction(ctx, mov);
                         }