Commit d917ad5d authored by Brian Paul's avatar Brian Paul

gallium: assorted state tracker fixes for > 8 texture samplers

parent 84cffc2e
...@@ -53,7 +53,7 @@ update_textures(struct st_context *st) ...@@ -53,7 +53,7 @@ update_textures(struct st_context *st)
st->state.num_textures = 0; st->state.num_textures = 0;
/* loop over sampler units (aka tex image units) */ /* 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; struct pipe_texture *pt = NULL;
if (samplersUsed & (1 << su)) { if (samplersUsed & (1 << su)) {
......
...@@ -84,9 +84,7 @@ void st_init_limits(struct st_context *st) ...@@ -84,9 +84,7 @@ void st_init_limits(struct st_context *st)
c->MaxTextureRectSize c->MaxTextureRectSize
= _min(1 << (c->MaxTextureLevels - 1), MAX_TEXTURE_RECT_SIZE); = _min(1 << (c->MaxTextureLevels - 1), MAX_TEXTURE_RECT_SIZE);
c->MaxTextureUnits c->MaxTextureImageUnits
= c->MaxTextureImageUnits
= c->MaxTextureCoordUnits
= _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS), = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS),
MAX_TEXTURE_IMAGE_UNITS); MAX_TEXTURE_IMAGE_UNITS);
...@@ -94,6 +92,10 @@ void st_init_limits(struct st_context *st) ...@@ -94,6 +92,10 @@ void st_init_limits(struct st_context *st)
= _min(screen->get_param(screen, PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS), = _min(screen->get_param(screen, PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS),
MAX_VERTEX_TEXTURE_IMAGE_UNITS); MAX_VERTEX_TEXTURE_IMAGE_UNITS);
c->MaxTextureCoordUnits = MAX_TEXTURE_COORD_UNITS;
c->MaxTextureUnits = MIN2(c->MaxTextureImageUnits, c->MaxTextureCoordUnits);
c->MaxDrawBuffers c->MaxDrawBuffers
= _clamp(screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS), = _clamp(screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS),
1, MAX_DRAW_BUFFERS); 1, MAX_DRAW_BUFFERS);
......
...@@ -745,6 +745,7 @@ find_temporaries(const struct gl_program *program, ...@@ -745,6 +745,7 @@ find_temporaries(const struct gl_program *program,
*/ */
GLuint GLuint
st_translate_mesa_program( st_translate_mesa_program(
GLcontext *ctx,
uint procType, uint procType,
const struct gl_program *program, const struct gl_program *program,
GLuint numInputs, GLuint numInputs,
...@@ -992,7 +993,7 @@ st_translate_mesa_program( ...@@ -992,7 +993,7 @@ st_translate_mesa_program(
} }
/* texture samplers */ /* texture samplers */
for (i = 0; i < 8; i++) { for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) {
if (program->SamplersUsed & (1 << i)) { if (program->SamplersUsed & (1 << i)) {
struct tgsi_full_declaration fulldecl; struct tgsi_full_declaration fulldecl;
......
...@@ -41,6 +41,7 @@ struct gl_program; ...@@ -41,6 +41,7 @@ struct gl_program;
GLuint GLuint
st_translate_mesa_program( st_translate_mesa_program(
GLcontext *ctx,
uint procType, uint procType,
const struct gl_program *program, const struct gl_program *program,
GLuint numInputs, GLuint numInputs,
......
...@@ -317,7 +317,8 @@ st_translate_vertex_program(struct st_context *st, ...@@ -317,7 +317,8 @@ st_translate_vertex_program(struct st_context *st,
/* XXX: fix static allocation of tokens: /* 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, &stvp->Base.Base,
/* inputs */ /* inputs */
vs_num_inputs, vs_num_inputs,
...@@ -503,7 +504,8 @@ st_translate_fragment_program(struct st_context *st, ...@@ -503,7 +504,8 @@ st_translate_fragment_program(struct st_context *st,
/* XXX: fix static allocation of tokens: /* 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, &stfp->Base.Base,
/* inputs */ /* inputs */
fs_num_inputs, fs_num_inputs,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment