gallium: assorted state tracker fixes for > 8 texture samplers
authorBrian Paul <brianp@vmware.com>
Fri, 2 Jan 2009 23:54:11 +0000 (16:54 -0700)
committerBrian Paul <brianp@vmware.com>
Fri, 2 Jan 2009 23:54:11 +0000 (16:54 -0700)
src/mesa/state_tracker/st_atom_texture.c
src/mesa/state_tracker/st_extensions.c
src/mesa/state_tracker/st_mesa_to_tgsi.c
src/mesa/state_tracker/st_mesa_to_tgsi.h
src/mesa/state_tracker/st_program.c

index 18ffc08c6b129f5fe2f141412adafd0332d65989..21f7321f97a3d6b80daaefeb020863a011694be8 100644 (file)
@@ -53,7 +53,7 @@ update_textures(struct st_context *st)
    st->state.num_textures = 0;
 
    /* loop over sampler units (aka tex image units) */
-   for (su = 0; su < st->ctx->Const.MaxTextureCoordUnits; su++) {
+   for (su = 0; su < st->ctx->Const.MaxTextureImageUnits; su++) {
       struct pipe_texture *pt = NULL;
 
       if (samplersUsed & (1 << su)) {
index 33421149b063c8c104b04ae7c1ec851bd4656d3a..7023659c17d435bdc608aac9cef62c1642be4f92 100644 (file)
@@ -84,9 +84,7 @@ void st_init_limits(struct st_context *st)
    c->MaxTextureRectSize
       = _min(1 << (c->MaxTextureLevels - 1), MAX_TEXTURE_RECT_SIZE);
 
-   c->MaxTextureUnits
-      = c->MaxTextureImageUnits
-      = c->MaxTextureCoordUnits
+   c->MaxTextureImageUnits
       = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS),
             MAX_TEXTURE_IMAGE_UNITS);
 
@@ -94,6 +92,10 @@ void st_init_limits(struct st_context *st)
       = _min(screen->get_param(screen, PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS),
              MAX_VERTEX_TEXTURE_IMAGE_UNITS);
 
+   c->MaxTextureCoordUnits = MAX_TEXTURE_COORD_UNITS;
+
+   c->MaxTextureUnits = MIN2(c->MaxTextureImageUnits, c->MaxTextureCoordUnits);
+
    c->MaxDrawBuffers
       = _clamp(screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS),
               1, MAX_DRAW_BUFFERS);
index ce8b4411940c3d5706159b331179f68d8581c392..5b5707fa1c5c84c60ffc026edff69c0c2d58c535 100644 (file)
@@ -745,6 +745,7 @@ find_temporaries(const struct gl_program *program,
  */
 GLuint
 st_translate_mesa_program(
+   GLcontext *ctx,
    uint procType,
    const struct gl_program *program,
    GLuint numInputs,
@@ -992,7 +993,7 @@ st_translate_mesa_program(
    }
 
    /* texture samplers */
-   for (i = 0; i < 8; i++) {
+   for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) {
       if (program->SamplersUsed & (1 << i)) {
          struct tgsi_full_declaration fulldecl;
 
index 7b2bee1ab7084eb806803f37fe4cd6c75de6053e..b465b3bddcf5b1707725504f8a880e8ecda69e3e 100644 (file)
@@ -41,6 +41,7 @@ struct gl_program;
 
 GLuint
 st_translate_mesa_program(
+   GLcontext *ctx,
    uint procType,
    const struct gl_program *program,
    GLuint numInputs,
index cf4b39cee40df24eb7db6c483e678723cb41e58f..442eeed1470a34515640c575e97ccfaa0633f053 100644 (file)
@@ -317,7 +317,8 @@ st_translate_vertex_program(struct st_context *st,
 
    /* XXX: fix static allocation of tokens:
     */
-   num_tokens = st_translate_mesa_program(TGSI_PROCESSOR_VERTEX,
+   num_tokens = st_translate_mesa_program(st->ctx,
+                                          TGSI_PROCESSOR_VERTEX,
                                           &stvp->Base.Base,
                                           /* inputs */
                                           vs_num_inputs,
@@ -503,7 +504,8 @@ st_translate_fragment_program(struct st_context *st,
 
    /* XXX: fix static allocation of tokens:
     */
-   num_tokens = st_translate_mesa_program(TGSI_PROCESSOR_FRAGMENT,
+   num_tokens = st_translate_mesa_program(st->ctx,
+                                          TGSI_PROCESSOR_FRAGMENT,
                                           &stfp->Base.Base,
                                           /* inputs */
                                           fs_num_inputs,