panfrost: XMLify the rest of shader_meta
[mesa.git] / src / panfrost / lib / pan_blit.c
index 0676b85f25f50d535cabd72d9da08c6c0244ced4..59a026850bac9ea3ea85e184e7ecef9e0be9d38a 100644 (file)
@@ -216,12 +216,18 @@ panfrost_load_midg(
                 cfg.depth_pass = MALI_STENCIL_OP_REPLACE;
         };
 
+        struct mali_blend_equation_packed eq;
+
+        pan_pack(&eq, BLEND_EQUATION, cfg) {
+                cfg.rgb_mode = 0x122;
+                cfg.alpha_mode = 0x122;
+
+                if (loc < FRAG_RESULT_DATA0)
+                        cfg.color_mask = 0x0;
+        }
+
         union midgard_blend replace = {
-                .equation = {
-                        .rgb_mode = 0x122,
-                        .alpha_mode = 0x122,
-                        .color_mask = MALI_MASK_R | MALI_MASK_G | MALI_MASK_B | MALI_MASK_A,
-                }
+                .equation = eq
         };
 
         if (blend_shader)
@@ -238,15 +244,19 @@ panfrost_load_midg(
 
         bool ms = image->nr_samples > 1;
 
+        struct mali_shader_packed shader;
+
+        pan_pack(&shader, SHADER, cfg) {
+                cfg.shader = pool->dev->blit_shaders.loads[loc][T][ms];
+                cfg.varying_count = 1;
+                cfg.texture_count = 1;
+                cfg.sampler_count = 1;
+
+                assert(cfg.shader);
+        }
+
         struct mali_shader_meta shader_meta = {
-                .shader = pool->dev->blit_shaders.loads[loc][T][ms],
-                .sampler_count = 1,
-                .texture_count = 1,
-                .varying_count = 1,
-                .midgard1 = {
-                        .flags_lo = 0x20,
-                        .work_count = 4,
-                },
+                .shader = shader,
                 .coverage_mask = ~0,
                 .unknown2_3 = MALI_DEPTH_FUNC(MALI_FUNC_ALWAYS) | 0x10,
                 .unknown2_4 = 0x4e0,
@@ -259,30 +269,33 @@ panfrost_load_midg(
                 }
         };
 
+        struct mali_midgard_properties_packed midgard_props;
+
+        pan_pack(&midgard_props, MIDGARD_PROPERTIES, cfg) {
+                cfg.work_register_count = 4;
+                cfg.early_z_enable = (loc >= FRAG_RESULT_DATA0);
+                cfg.stencil_from_shader = (loc == FRAG_RESULT_STENCIL);
+                cfg.depth_source = (loc == FRAG_RESULT_DEPTH) ?
+                        MALI_DEPTH_SOURCE_SHADER :
+                        MALI_DEPTH_SOURCE_FIXED_FUNCTION;
+        }
+
+        memcpy(&shader_meta.midgard_props, &midgard_props, sizeof(midgard_props));
+
         if (ms)
                 shader_meta.unknown2_3 |= MALI_HAS_MSAA | MALI_PER_SAMPLE;
         else
                 shader_meta.unknown2_4 |= MALI_NO_MSAA;
 
-        assert(shader_meta.shader);
-
         if (pool->dev->quirks & MIDGARD_SFBD) {
                 shader_meta.unknown2_4 |= (0x10 | MALI_NO_DITHER);
                 shader_meta.blend = replace;
-
-                if (loc < FRAG_RESULT_DATA0)
-                        shader_meta.blend.equation.color_mask = 0x0;
         }
 
-        if (loc == FRAG_RESULT_DEPTH) {
-                shader_meta.midgard1.flags_lo |= MALI_WRITES_Z;
+        if (loc == FRAG_RESULT_DEPTH)
                 shader_meta.unknown2_3 |= MALI_DEPTH_WRITEMASK;
-        } else if (loc == FRAG_RESULT_STENCIL) {
-                shader_meta.midgard1.flags_hi |= MALI_WRITES_S;
+        else if (loc == FRAG_RESULT_STENCIL)
                 shader_meta.unknown2_4 |= MALI_STENCIL_TEST;
-        } else {
-                shader_meta.midgard1.flags_lo |= MALI_EARLY_Z;
-        }
 
         /* Create the texture descriptor. We partially compute the base address
          * ourselves to account for layer, such that the texture descriptor