st/mesa: consolidate setting MaxTextureImageUnits
authorMarek Olšák <maraeo@gmail.com>
Thu, 2 May 2013 00:41:11 +0000 (02:41 +0200)
committerMarek Olšák <maraeo@gmail.com>
Sat, 11 May 2013 21:45:01 +0000 (23:45 +0200)
Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/state_tracker/st_extensions.c

index d32f50a416cac3e2c8febbd7cef84e9fc40f2e14..0aac086cf432c628dc201d89c11767623e035750 100644 (file)
@@ -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