Mesa (master): gallium: Disable varying packing on hardware with <= 8 texture indirections.

Paul Berry stereotype441 at kemper.freedesktop.org
Fri Dec 14 19:29:55 UTC 2012


Module: Mesa
Branch: master
Commit: 4bb8661b1ba69a223eb4d186ed9528525c3269f3
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=4bb8661b1ba69a223eb4d186ed9528525c3269f3

Author: Paul Berry <stereotype441 at gmail.com>
Date:   Thu Dec 13 12:45:54 2012 -0800

gallium: Disable varying packing on hardware with <=8 texture indirections.

In practice this will disable varying packing on R300, R400, i915g,
and nv30.

Reviewed-by: Marek Olšák <maraeo at gmail.com>

---

 src/mesa/state_tracker/st_extensions.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 726d868..f3f01eb 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -663,4 +663,18 @@ void st_init_extensions(struct st_context *st)
    }
    if (screen->get_param(screen, PIPE_CAP_TEXTURE_BUFFER_OBJECTS))
       ctx->Extensions.ARB_texture_buffer_object = GL_TRUE;
+
+   /* Unpacking a varying in the fragment shader costs 1 texture indirection.
+    * If the number of available texture indirections is very limited, then we
+    * prefer to disable varying packing rather than run the risk of varying
+    * packing preventing a shader from running.
+    */
+   if (screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT,
+                                PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS) <= 8) {
+      /* We can't disable varying packing if transform feedback is available,
+       * because transform feedback code assumes a packed varying layout.
+       */
+      if (!ctx->Extensions.EXT_transform_feedback)
+         ctx->Const.DisableVaryingPacking = GL_TRUE;
+   }
 }




More information about the mesa-commit mailing list