panfrost: Document Midgard Inf/NaN suppress bit
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 27 May 2020 20:07:00 +0000 (16:07 -0400)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 27 May 2020 20:49:44 +0000 (16:49 -0400)
We should probably not be setting this..

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

src/gallium/drivers/panfrost/pan_cmdstream.c
src/panfrost/include/panfrost-job.h
src/panfrost/pandecode/decode.c

index 733351eee235a436ce35a04a037451304c16305a..fa5c7e2da5db6908100647c7a78a6f20ecf6275a 100644 (file)
@@ -346,7 +346,10 @@ panfrost_shader_meta_init(struct panfrost_context *ctx,
                 meta->midgard1.uniform_count = MIN2(ss->uniform_count,
                                                     ss->uniform_cutoff);
                 meta->midgard1.work_count = ss->work_reg_count;
-                meta->midgard1.flags_hi = 0x8; /* XXX */
+
+                /* TODO: This is not conformant on ES3 */
+                meta->midgard1.flags_hi = MALI_SUPPRESS_INF_NAN;
+
                 meta->midgard1.flags_lo = 0x220;
                 meta->midgard1.uniform_buffer_count = panfrost_ubo_count(ctx, st);
         }
index 1234d3bbfa981cb6a3b666280550f585e3a07d9e..177242d42a9cd7cbf546f0a26ee9328d444ce77d 100644 (file)
@@ -415,6 +415,17 @@ enum mali_format {
 /* Should be set when the fragment shader updates the stencil value. */
 #define MALI_WRITES_S (1 << 2)
 
+/* Mode to suppress generation of Infinity and NaN values by clamping inf
+ * (-inf) to MAX_FLOAT (-MIN_FLOAT) and flushing NaN to 0.0
+ *
+ * Compare suppress_inf/suppress_nan flags on the Bifrost clause header for the
+ * same functionality.
+ *
+ * This is not conformant on GLES3 or OpenCL, but is optional on GLES2, where
+ * it works around app bugs (e.g. in glmark2-es2 -bterrain with FP16).
+ */
+#define MALI_SUPPRESS_INF_NAN (1 << 3)
+
 /* The raw Midgard blend payload can either be an equation or a shader
  * address, depending on the context */
 
index 1bd1273f735420fd51fad43972ce9cf0f5c0bb66..77134cddbd44b988a27e0a7cf0035191a7b6eff1 100644 (file)
@@ -273,6 +273,7 @@ static const struct pandecode_flag_info shader_midgard1_flag_lo_info [] = {
 
 static const struct pandecode_flag_info shader_midgard1_flag_hi_info [] = {
         FLAG_INFO(WRITES_S),
+        FLAG_INFO(SUPPRESS_INF_NAN),
         {}
 };
 #undef FLAG_INFO