pan/mdg: Implement gl_SampleID
[mesa.git] / src / panfrost / midgard / midgard_derivatives.c
index a67473a4fe943c6024b573b9796deadef8f9ec54..5c01ebaf64a0cd0746923350742c69e739e165f2 100644 (file)
@@ -101,8 +101,11 @@ midgard_emit_derivatives(compiler_context *ctx, nir_alu_instr *instr)
         midgard_instruction ins = {
                 .type = TAG_TEXTURE_4,
                 .mask = mask_of(nr_components),
-                .dest = nir_dest_index(ctx, &instr->dest.dest),
-                .src = { nir_alu_src_index(ctx, &instr->src[0]), ~0, ~0, ~0 },
+                .dest = nir_dest_index(&instr->dest.dest),
+                .dest_type = nir_type_float32,
+                .src = { ~0, nir_src_index(ctx, &instr->src[0].src), ~0, ~0 },
+                .swizzle = SWIZZLE_IDENTITY_4,
+                .src_types = { nir_type_float32, nir_type_float32 },
                 .texture = {
                         .op = mir_derivative_op(instr->op),
                         .format = MALI_TEX_2D,
@@ -112,16 +115,10 @@ midgard_emit_derivatives(compiler_context *ctx, nir_alu_instr *instr)
                 }
         };
 
-        ins.swizzle[0][2] = ins.swizzle[0][3] = COMPONENT_X;
-        ins.swizzle[1][2] = ins.swizzle[1][3] = COMPONENT_X;
-
         if (!instr->dest.dest.is_ssa)
                 ins.mask &= instr->dest.write_mask;
 
         emit_mir_instruction(ctx, ins);
-
-        /* TODO: Set .cont/.last automatically via dataflow analysis */
-        ctx->texture_op_count++;
 }
 
 void
@@ -158,9 +155,6 @@ midgard_lower_derivatives(compiler_context *ctx, midgard_block *block)
                 /* Insert the new instruction */
                 mir_insert_instruction_before(ctx, mir_next_op(ins), dup);
 
-                /* TODO: Set .cont/.last automatically via dataflow analysis */
-                ctx->texture_op_count++;
-
                 /* We'll need both instructions to write to the same index, so
                  * rewrite to use a register */