mesa: Allow sampling from units >= MAX_TEXTURE_UNITS in shaders.
The total number of units used by a shader is limited to MAX_TEXTURE_UNITS, but the actual indices are only limited by MAX_COMBINED_TEXTURE_IMAGE_UNITS, since they're shared between vertex and fragment shaders. NOTE: This is a candidate for the 7.11 branch. Signed-off-by: Henri Verbeet <hverbeet@gmail.com> Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
@@ -1856,7 +1856,7 @@ struct gl_program
|
||||
GLbitfield SystemValuesRead; /**< Bitmask of SYSTEM_VALUE_x inputs used */
|
||||
GLbitfield InputFlags[MAX_PROGRAM_INPUTS]; /**< PROG_PARAM_BIT_x flags */
|
||||
GLbitfield OutputFlags[MAX_PROGRAM_OUTPUTS]; /**< PROG_PARAM_BIT_x flags */
|
||||
GLbitfield TexturesUsed[MAX_TEXTURE_UNITS]; /**< TEXTURE_x_BIT bitmask */
|
||||
GLbitfield TexturesUsed[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; /**< TEXTURE_x_BIT bitmask */
|
||||
GLbitfield SamplersUsed; /**< Bitfield of which samplers are used */
|
||||
GLbitfield ShadowSamplers; /**< Texture units used for shadow sampling. */
|
||||
|
||||
|
@@ -1032,7 +1032,7 @@ validate_samplers(const struct gl_program *prog, char *errMsg)
|
||||
"TEXTURE_2D",
|
||||
"TEXTURE_1D",
|
||||
};
|
||||
GLint targetUsed[MAX_TEXTURE_IMAGE_UNITS];
|
||||
GLint targetUsed[MAX_COMBINED_TEXTURE_IMAGE_UNITS];
|
||||
GLbitfield samplersUsed = prog->SamplersUsed;
|
||||
GLuint i;
|
||||
|
||||
|
@@ -580,7 +580,7 @@ _mesa_update_shader_textures_used(struct gl_program *prog)
|
||||
if (prog->SamplersUsed & (1 << s)) {
|
||||
GLuint unit = prog->SamplerUnits[s];
|
||||
GLuint tgt = prog->SamplerTargets[s];
|
||||
assert(unit < MAX_TEXTURE_IMAGE_UNITS);
|
||||
assert(unit < Elements(prog->TexturesUsed));
|
||||
assert(tgt < NUM_TEXTURE_TARGETS);
|
||||
prog->TexturesUsed[unit] |= (1 << tgt);
|
||||
}
|
||||
@@ -674,7 +674,7 @@ set_program_uniform(struct gl_context *ctx, struct gl_program *program,
|
||||
GLuint texUnit = ((GLuint *) values)[i];
|
||||
|
||||
/* check that the sampler (tex unit index) is legal */
|
||||
if (texUnit >= ctx->Const.MaxTextureImageUnits) {
|
||||
if (texUnit >= ctx->Const.MaxCombinedTextureImageUnits) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE,
|
||||
"glUniform1(invalid sampler/tex unit index for '%s')",
|
||||
param->Name);
|
||||
|
Reference in New Issue
Block a user