Treat image units and coordinate units differently.
Previously MaxTextureUnits was used to validate both texture image units and texture coordinate units in fragment programs. Instead, use MaxTextureCoordUnits for texture coordinate units and MaxTextureImageUnits for texture image units. Fixes bugzilla #19468. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
@@ -963,6 +963,8 @@ parse_output_color_num (GLcontext * ctx, const GLubyte ** inst,
|
||||
|
||||
|
||||
/**
|
||||
* Validate the index of a texture coordinate
|
||||
*
|
||||
* \param coord The texture unit index
|
||||
* \return 0 on sucess, 1 on error
|
||||
*/
|
||||
@@ -972,8 +974,8 @@ parse_texcoord_num (GLcontext * ctx, const GLubyte ** inst,
|
||||
{
|
||||
GLint i = parse_integer (inst, Program);
|
||||
|
||||
if ((i < 0) || (i >= (int)ctx->Const.MaxTextureUnits)) {
|
||||
program_error(ctx, Program->Position, "Invalid texture unit index");
|
||||
if ((i < 0) || (i >= (int)ctx->Const.MaxTextureCoordUnits)) {
|
||||
program_error(ctx, Program->Position, "Invalid texture coordinate index");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -981,6 +983,29 @@ parse_texcoord_num (GLcontext * ctx, const GLubyte ** inst,
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate the index of a texture image unit
|
||||
*
|
||||
* \param coord The texture unit index
|
||||
* \return 0 on sucess, 1 on error
|
||||
*/
|
||||
static GLuint
|
||||
parse_teximage_num (GLcontext * ctx, const GLubyte ** inst,
|
||||
struct arb_program *Program, GLuint * coord)
|
||||
{
|
||||
GLint i = parse_integer (inst, Program);
|
||||
|
||||
if ((i < 0) || (i >= (int)ctx->Const.MaxTextureImageUnits)) {
|
||||
program_error(ctx, Program->Position, "Invalid texture image index");
|
||||
return 1;
|
||||
}
|
||||
|
||||
*coord = (GLuint) i;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \param coord The weight index
|
||||
* \return 0 on sucess, 1 on error
|
||||
@@ -3003,7 +3028,7 @@ parse_fp_instruction (GLcontext * ctx, const GLubyte ** inst,
|
||||
return 1;
|
||||
|
||||
/* texImageUnit */
|
||||
if (parse_texcoord_num (ctx, inst, Program, &texcoord))
|
||||
if (parse_teximage_num (ctx, inst, Program, &texcoord))
|
||||
return 1;
|
||||
fp->TexSrcUnit = texcoord;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user