Mesa (main): panfrost: Pack message preloads from compiler

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Feb 24 20:12:34 UTC 2022


Module: Mesa
Branch: main
Commit: 6618697e0e7224b1759047578138ffd4e7d96db3
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6618697e0e7224b1759047578138ffd4e7d96db3

Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date:   Wed Feb 23 13:49:16 2022 -0500

panfrost: Pack message preloads from compiler

Include full message preload descriptors in the RSD on v7, and do the obvious
packing for fragment shader message preloads.

Signed-off-by: Alyssa Rosenzweig <alyssa at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9438>

---

 src/panfrost/lib/genxml/v7.xml |  4 ++--
 src/panfrost/lib/pan_shader.h  | 31 +++++++++++++++++++++++++++++--
 src/panfrost/util/pan_ir.h     |  4 +---
 3 files changed, 32 insertions(+), 7 deletions(-)

diff --git a/src/panfrost/lib/genxml/v7.xml b/src/panfrost/lib/genxml/v7.xml
index c2e021c244f..18b81eaca5f 100644
--- a/src/panfrost/lib/genxml/v7.xml
+++ b/src/panfrost/lib/genxml/v7.xml
@@ -881,8 +881,8 @@
     <field name="Thread Balancing" size="16" start="13:0" type="uint"/>
     <field name="Secondary preload" size="32" start="13:0" type="Preload"/>
     <field name="Secondary shader" size="64" start="14:0" type="address"/>
-    <field name="Message Preload 1" size="16" start="15:0" type="uint"/>
-    <field name="Message Preload 2" size="16" start="15:16" type="uint"/>
+    <field name="Message Preload 1" size="16" start="15:0" type="Message Preload"/>
+    <field name="Message Preload 2" size="16" start="15:16" type="Message Preload"/>
   </struct>
 
   <struct name="Uniform Buffer" align="8">
diff --git a/src/panfrost/lib/pan_shader.h b/src/panfrost/lib/pan_shader.h
index 7009dd71633..9e48ee856d6 100644
--- a/src/panfrost/lib/pan_shader.h
+++ b/src/panfrost/lib/pan_shader.h
@@ -160,6 +160,33 @@ pan_make_preload(gl_shader_stage stage,
         }
 }
 
+#if PAN_ARCH == 7
+static inline void
+pan_pack_message_preload(struct MALI_MESSAGE_PRELOAD *cfg,
+                         const struct bifrost_message_preload *msg)
+{
+        enum mali_message_preload_register_format regfmt = msg->fp16 ?
+                MALI_MESSAGE_PRELOAD_REGISTER_FORMAT_F16 :
+                MALI_MESSAGE_PRELOAD_REGISTER_FORMAT_F32;
+
+        if (msg->enabled && msg->texture) {
+                cfg->type = MALI_MESSAGE_TYPE_VAR_TEX;
+                cfg->var_tex.varying_index = msg->varying_index;
+                cfg->var_tex.sampler_index = msg->sampler_index;
+                cfg->var_tex.register_format = regfmt;
+                cfg->var_tex.skip = msg->skip;
+                cfg->var_tex.zero_lod = msg->zero_lod;
+        } else if (msg->enabled) {
+                cfg->type = MALI_MESSAGE_TYPE_LD_VAR;
+                cfg->ld_var.varying_index = msg->varying_index;
+                cfg->ld_var.register_format = regfmt;
+                cfg->ld_var.num_components = msg->num_components;
+        } else {
+                cfg->type = MALI_MESSAGE_TYPE_DISABLED;
+        }
+}
+#endif
+
 static inline void
 pan_shader_prepare_bifrost_rsd(const struct pan_shader_info *info,
                                struct MALI_RENDERER_STATE *rsd)
@@ -188,8 +215,8 @@ pan_shader_prepare_bifrost_rsd(const struct pan_shader_info *info,
                 rsd->properties.shader_wait_dependency_6 = info->bifrost.wait_6;
                 rsd->properties.shader_wait_dependency_7 = info->bifrost.wait_7;
 
-                rsd->message_preload_1 = info->bifrost.messages[0];
-                rsd->message_preload_2 = info->bifrost.messages[1];
+                pan_pack_message_preload(&rsd->message_preload_1, &info->bifrost.messages[0]);
+                pan_pack_message_preload(&rsd->message_preload_2, &info->bifrost.messages[1]);
 #endif
         } else if (info->stage == MESA_SHADER_VERTEX && info->vs.secondary_enable) {
                 rsd->secondary_preload.uniform_count = fau_count;
diff --git a/src/panfrost/util/pan_ir.h b/src/panfrost/util/pan_ir.h
index 5cc268483e1..94a3045d544 100644
--- a/src/panfrost/util/pan_ir.h
+++ b/src/panfrost/util/pan_ir.h
@@ -217,9 +217,7 @@ struct bifrost_shader_info {
         struct bifrost_shader_blend_info blend[8];
         nir_alu_type blend_src1_type;
         bool wait_6, wait_7;
-
-        /* Packed, preloaded message descriptors */
-        uint16_t messages[2];
+        struct bifrost_message_preload messages[2];
 };
 
 struct midgard_shader_info {



More information about the mesa-commit mailing list