fix incorrect sampler numbering/indexing.
All samplers indexes were zero.
cherry-picked from master (b6fb0940c2
)
This commit is contained in:
@@ -283,25 +283,31 @@ _mesa_add_uniform(struct gl_program_parameter_list *paramList,
|
||||
* \param name uniform's name
|
||||
* \param datatype GL_SAMPLER_2D, GL_SAMPLER_2D_RECT_ARB, etc.
|
||||
* \param index the sampler number (as seen in TEX instructions)
|
||||
* \return sampler index (starting at zero) or -1 if error
|
||||
*/
|
||||
GLint
|
||||
_mesa_add_sampler(struct gl_program_parameter_list *paramList,
|
||||
const char *name, GLenum datatype, GLuint index)
|
||||
const char *name, GLenum datatype)
|
||||
{
|
||||
GLint i = _mesa_lookup_parameter_index(paramList, -1, name);
|
||||
if (i >= 0 && paramList->Parameters[i].Type == PROGRAM_SAMPLER) {
|
||||
ASSERT(paramList->Parameters[i].Size == 1);
|
||||
ASSERT(paramList->Parameters[i].DataType == datatype);
|
||||
ASSERT(paramList->ParameterValues[i][0] == index);
|
||||
/* already in list */
|
||||
return i;
|
||||
return (GLint) paramList->ParameterValues[i][0];
|
||||
}
|
||||
else {
|
||||
GLfloat indexf = index;
|
||||
const GLint size = 1; /* a sampler is basically a texture unit number */
|
||||
i = _mesa_add_parameter(paramList, PROGRAM_SAMPLER, name,
|
||||
size, datatype, &indexf, NULL);
|
||||
return i;
|
||||
GLfloat value;
|
||||
GLint numSamplers = 0;
|
||||
for (i = 0; i < paramList->NumParameters; i++) {
|
||||
if (paramList->Parameters[i].Type == PROGRAM_SAMPLER)
|
||||
numSamplers++;
|
||||
}
|
||||
value = (GLfloat) numSamplers;
|
||||
(void) _mesa_add_parameter(paramList, PROGRAM_SAMPLER, name,
|
||||
size, datatype, &value, NULL);
|
||||
return numSamplers;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -114,7 +114,7 @@ _mesa_add_uniform(struct gl_program_parameter_list *paramList,
|
||||
|
||||
extern GLint
|
||||
_mesa_add_sampler(struct gl_program_parameter_list *paramList,
|
||||
const char *name, GLenum datatype, GLuint index);
|
||||
const char *name, GLenum datatype);
|
||||
|
||||
extern GLint
|
||||
_mesa_add_varying(struct gl_program_parameter_list *paramList,
|
||||
|
@@ -2841,8 +2841,7 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var,
|
||||
* store->Index = sampler number (0..7, typically)
|
||||
* store->Size = texture type index (1D, 2D, 3D, cube, etc)
|
||||
*/
|
||||
const GLint sampNum = A->numSamplers++;
|
||||
_mesa_add_sampler(prog->Parameters, varName, datatype, sampNum);
|
||||
GLint sampNum = _mesa_add_sampler(prog->Parameters, varName, datatype);
|
||||
store = _slang_new_ir_storage(PROGRAM_SAMPLER, sampNum, texIndex);
|
||||
if (dbg) printf("SAMPLER ");
|
||||
}
|
||||
|
@@ -1620,7 +1620,6 @@ parse_init_declarator(slang_parse_ctx * C, slang_output_ctx * O,
|
||||
A.program = O->program;
|
||||
A.vartable = O->vartable;
|
||||
A.curFuncEndLabel = NULL;
|
||||
A.numSamplers = 0;
|
||||
if (!_slang_codegen_global_variable(&A, var, C->type))
|
||||
return 0;
|
||||
}
|
||||
@@ -1643,7 +1642,6 @@ parse_init_declarator(slang_parse_ctx * C, slang_output_ctx * O,
|
||||
A.space.funcs = O->funs;
|
||||
A.space.structs = O->structs;
|
||||
A.space.vars = O->vars;
|
||||
A.numSamplers = 0;
|
||||
if (!initialize_global(&A, var))
|
||||
return 0;
|
||||
}
|
||||
@@ -1777,7 +1775,6 @@ parse_function(slang_parse_ctx * C, slang_output_ctx * O, int definition,
|
||||
A.program = O->program;
|
||||
A.vartable = O->vartable;
|
||||
A.log = C->L;
|
||||
A.numSamplers = 0;
|
||||
|
||||
_slang_codegen_function(&A, *parsed_func_ret);
|
||||
}
|
||||
|
@@ -65,7 +65,6 @@ typedef struct slang_assemble_ctx_
|
||||
struct slang_label_ *curFuncEndLabel;
|
||||
struct slang_ir_node_ *CurLoop;
|
||||
struct slang_function_ *CurFunction;
|
||||
GLuint numSamplers;
|
||||
} slang_assemble_ctx;
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user