panfrost: Inline panfrost_get_default_swizzle
[mesa.git] / src / gallium / drivers / panfrost / pan_assemble.c
index 54c5ba7970099a8be6d12a42ca1387fe21143066..6f84248b2f1fb1ddfd8b5315f550054d9c6cedc2 100644 (file)
@@ -27,6 +27,7 @@
 #include <string.h>
 #include "pan_bo.h"
 #include "pan_context.h"
+#include "pan_format.h"
 #include "pan_util.h"
 
 #include "compiler/nir/nir.h"
@@ -96,14 +97,28 @@ panfrost_shader_compile(
         meta->midgard1.uniform_count = MIN2(program.uniform_count, program.uniform_cutoff);
         meta->midgard1.work_count = program.work_register_count;
 
+        bool vertex_id = s->info.system_values_read & (1 << SYSTEM_VALUE_VERTEX_ID);
+        bool instance_id = s->info.system_values_read & (1 << SYSTEM_VALUE_INSTANCE_ID);
+
         switch (stage) {
         case MESA_SHADER_VERTEX:
                 meta->attribute_count = util_bitcount64(s->info.inputs_read);
                 meta->varying_count = util_bitcount64(s->info.outputs_written);
+
+                if (vertex_id)
+                        meta->attribute_count = MAX2(meta->attribute_count, PAN_VERTEX_ID + 1);
+
+                if (instance_id)
+                        meta->attribute_count = MAX2(meta->attribute_count, PAN_INSTANCE_ID + 1);
+
                 break;
         case MESA_SHADER_FRAGMENT:
                 meta->attribute_count = 0;
                 meta->varying_count = util_bitcount64(s->info.inputs_read);
+                if (s->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_DEPTH))
+                        state->writes_depth = true;
+                if (s->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_STENCIL))
+                        state->writes_stencil = true;
                 break;
         case MESA_SHADER_COMPUTE:
                 /* TODO: images */
@@ -126,7 +141,7 @@ panfrost_shader_compile(
         /* Separate as primary uniform count is truncated */
         state->uniform_count = program.uniform_count;
 
-        meta->midgard1.unknown2 = 8; /* XXX */
+        meta->midgard1.flags_hi = 8; /* XXX */
 
         unsigned default_vec1_swizzle = panfrost_get_default_swizzle(1);
         unsigned default_vec2_swizzle = panfrost_get_default_swizzle(2);
@@ -138,7 +153,7 @@ panfrost_shader_compile(
 
                 /* Default to a vec4 varying */
                 struct mali_attr_meta v = {
-                        .format = MALI_RGBA32F,
+                        .format = program.varying_type[i],
                         .swizzle = default_vec4_swizzle,
                         .unknown1 = 0x2,
                 };