[Mesa-dev] [PATCH 10/17] st/mesa: consolidate setting MaxTextureImageUnits

Marek Olšák maraeo at gmail.com
Wed May 1 20:43:01 PDT 2013


---
 src/mesa/state_tracker/st_extensions.c |   26 +++++++++++---------------
 1 file changed, 11 insertions(+), 15 deletions(-)

diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index d32f50a..0aac086 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -89,25 +89,10 @@ void st_init_limits(struct st_context *st)
    c->MaxArrayTextureLayers
       = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS);
 
-   c->FragmentProgram.MaxTextureImageUnits
-      = _min(screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT,
-                                      PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS),
-            MAX_TEXTURE_IMAGE_UNITS);
-
-   c->VertexProgram.MaxTextureImageUnits
-      = _min(screen->get_shader_param(screen, PIPE_SHADER_VERTEX,
-                                      PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS),
-             MAX_TEXTURE_IMAGE_UNITS);
-
    c->MaxCombinedTextureImageUnits
       = _min(screen->get_param(screen, PIPE_CAP_MAX_COMBINED_SAMPLERS),
              MAX_COMBINED_TEXTURE_IMAGE_UNITS);
 
-   c->MaxTextureCoordUnits
-      = _min(c->FragmentProgram.MaxTextureImageUnits, MAX_TEXTURE_COORD_UNITS);
-
-   c->MaxTextureUnits = _min(c->FragmentProgram.MaxTextureImageUnits, c->MaxTextureCoordUnits);
-
    /* Define max viewport size and max renderbuffer size in terms of
     * max texture size (note: max tex RECT size = max tex 2D size).
     * If this isn't true for some hardware we'll need new PIPE_CAP_ queries.
@@ -188,6 +173,11 @@ void st_init_limits(struct st_context *st)
          continue;
       }
 
+      pc->MaxTextureImageUnits =
+         _min(screen->get_shader_param(screen, sh,
+                                       PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS),
+              MAX_TEXTURE_IMAGE_UNITS);
+
       pc->MaxInstructions    = pc->MaxNativeInstructions    =
          screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INSTRUCTIONS);
       pc->MaxAluInstructions = pc->MaxNativeAluInstructions =
@@ -253,6 +243,12 @@ void st_init_limits(struct st_context *st)
       options->LowerClipDistance = true;
    }
 
+   /* This depends on program constants. */
+   c->MaxTextureCoordUnits
+      = _min(c->FragmentProgram.MaxTextureImageUnits, MAX_TEXTURE_COORD_UNITS);
+
+   c->MaxTextureUnits = _min(c->FragmentProgram.MaxTextureImageUnits, c->MaxTextureCoordUnits);
+
    c->VertexProgram.MaxAttribs = MIN2(c->VertexProgram.MaxAttribs, 16);
 
    /* PIPE_SHADER_CAP_MAX_INPUTS for the FS specifies the maximum number
-- 
1.7.10.4



More information about the mesa-dev mailing list