move TexturesUsed[] into gl_program since vertex programs/shaders can use textures nowadays
This commit is contained in:
@@ -1853,6 +1853,7 @@ struct gl_program
|
|||||||
|
|
||||||
GLbitfield InputsRead; /* Bitmask of which input regs are read */
|
GLbitfield InputsRead; /* Bitmask of which input regs are read */
|
||||||
GLbitfield OutputsWritten; /* Bitmask of which output regs are written to */
|
GLbitfield OutputsWritten; /* Bitmask of which output regs are written to */
|
||||||
|
GLbitfield TexturesUsed[MAX_TEXTURE_IMAGE_UNITS]; /**< TEXTURE_x_BIT bitmask */
|
||||||
|
|
||||||
/** Named parameters, constants, etc. from program text */
|
/** Named parameters, constants, etc. from program text */
|
||||||
struct gl_program_parameter_list *Parameters;
|
struct gl_program_parameter_list *Parameters;
|
||||||
@@ -1895,7 +1896,6 @@ struct gl_vertex_program
|
|||||||
struct gl_fragment_program
|
struct gl_fragment_program
|
||||||
{
|
{
|
||||||
struct gl_program Base; /**< base class */
|
struct gl_program Base; /**< base class */
|
||||||
GLbitfield TexturesUsed[MAX_TEXTURE_IMAGE_UNITS]; /**< TEXTURE_x_BIT bitmask */
|
|
||||||
GLuint NumAluInstructions; /**< GL_ARB_fragment_program */
|
GLuint NumAluInstructions; /**< GL_ARB_fragment_program */
|
||||||
GLuint NumTexInstructions;
|
GLuint NumTexInstructions;
|
||||||
GLuint NumTexIndirections;
|
GLuint NumTexIndirections;
|
||||||
|
@@ -2959,7 +2959,7 @@ update_texture_state( GLcontext *ctx )
|
|||||||
* settle on the one with highest priority (see texture_override below).
|
* settle on the one with highest priority (see texture_override below).
|
||||||
*/
|
*/
|
||||||
if (fprog) {
|
if (fprog) {
|
||||||
enableBits = fprog->TexturesUsed[unit];
|
enableBits = fprog->Base.TexturesUsed[unit];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!texUnit->Enabled)
|
if (!texUnit->Enabled)
|
||||||
|
@@ -4038,7 +4038,7 @@ _mesa_parse_arb_fragment_program(GLcontext* ctx, GLenum target,
|
|||||||
program->Base.InputsRead = ap.Base.InputsRead;
|
program->Base.InputsRead = ap.Base.InputsRead;
|
||||||
program->Base.OutputsWritten = ap.Base.OutputsWritten;
|
program->Base.OutputsWritten = ap.Base.OutputsWritten;
|
||||||
for (i = 0; i < MAX_TEXTURE_IMAGE_UNITS; i++)
|
for (i = 0; i < MAX_TEXTURE_IMAGE_UNITS; i++)
|
||||||
program->TexturesUsed[i] = ap.TexturesUsed[i];
|
program->Base.TexturesUsed[i] = ap.TexturesUsed[i];
|
||||||
program->FogOption = ap.FogOption;
|
program->FogOption = ap.FogOption;
|
||||||
|
|
||||||
if (program->Base.Instructions)
|
if (program->Base.Instructions)
|
||||||
|
@@ -1563,7 +1563,7 @@ _mesa_parse_nv_fragment_program(GLcontext *ctx, GLenum dstTarget,
|
|||||||
program->Base.InputsRead = parseState.inputsRead;
|
program->Base.InputsRead = parseState.inputsRead;
|
||||||
program->Base.OutputsWritten = parseState.outputsWritten;
|
program->Base.OutputsWritten = parseState.outputsWritten;
|
||||||
for (u = 0; u < ctx->Const.MaxTextureImageUnits; u++)
|
for (u = 0; u < ctx->Const.MaxTextureImageUnits; u++)
|
||||||
program->TexturesUsed[u] = parseState.texturesUsed[u];
|
program->Base.TexturesUsed[u] = parseState.texturesUsed[u];
|
||||||
|
|
||||||
/* save program parameters */
|
/* save program parameters */
|
||||||
program->Base.Parameters = parseState.parameters;
|
program->Base.Parameters = parseState.parameters;
|
||||||
|
@@ -358,6 +358,8 @@ _mesa_clone_program(GLcontext *ctx, const struct gl_program *prog)
|
|||||||
prog->NumInstructions * sizeof(struct prog_instruction));
|
prog->NumInstructions * sizeof(struct prog_instruction));
|
||||||
clone->InputsRead = prog->InputsRead;
|
clone->InputsRead = prog->InputsRead;
|
||||||
clone->OutputsWritten = prog->OutputsWritten;
|
clone->OutputsWritten = prog->OutputsWritten;
|
||||||
|
memcpy(clone->TexturesUsed, prog->TexturesUsed, sizeof(prog->TexturesUsed));
|
||||||
|
|
||||||
if (prog->Parameters)
|
if (prog->Parameters)
|
||||||
clone->Parameters = _mesa_clone_parameter_list(prog->Parameters);
|
clone->Parameters = _mesa_clone_parameter_list(prog->Parameters);
|
||||||
memcpy(clone->LocalParams, prog->LocalParams, sizeof(clone->LocalParams));
|
memcpy(clone->LocalParams, prog->LocalParams, sizeof(clone->LocalParams));
|
||||||
@@ -389,7 +391,6 @@ _mesa_clone_program(GLcontext *ctx, const struct gl_program *prog)
|
|||||||
const struct gl_fragment_program *fp
|
const struct gl_fragment_program *fp
|
||||||
= (const struct gl_fragment_program *) prog;
|
= (const struct gl_fragment_program *) prog;
|
||||||
struct gl_fragment_program *fpc = (struct gl_fragment_program *) clone;
|
struct gl_fragment_program *fpc = (struct gl_fragment_program *) clone;
|
||||||
memcpy(fpc->TexturesUsed, fp->TexturesUsed, sizeof(fp->TexturesUsed));
|
|
||||||
fpc->NumAluInstructions = fp->NumAluInstructions;
|
fpc->NumAluInstructions = fp->NumAluInstructions;
|
||||||
fpc->NumTexInstructions = fp->NumTexInstructions;
|
fpc->NumTexInstructions = fp->NumTexInstructions;
|
||||||
fpc->NumTexIndirections = fp->NumTexIndirections;
|
fpc->NumTexIndirections = fp->NumTexIndirections;
|
||||||
|
@@ -1034,7 +1034,6 @@ emit_jump(const char *target, struct gl_program *prog)
|
|||||||
static struct prog_instruction *
|
static struct prog_instruction *
|
||||||
emit_tex(slang_gen_context *gc, slang_ir_node *n, struct gl_program *prog)
|
emit_tex(slang_gen_context *gc, slang_ir_node *n, struct gl_program *prog)
|
||||||
{
|
{
|
||||||
struct gl_fragment_program *fProg = (struct gl_fragment_program *) prog;
|
|
||||||
struct prog_instruction *inst;
|
struct prog_instruction *inst;
|
||||||
if (n->Opcode == IR_TEX) {
|
if (n->Opcode == IR_TEX) {
|
||||||
inst = new_instruction(prog, OPCODE_TEX);
|
inst = new_instruction(prog, OPCODE_TEX);
|
||||||
@@ -1052,7 +1051,7 @@ emit_tex(slang_gen_context *gc, slang_ir_node *n, struct gl_program *prog)
|
|||||||
inst->TexSrcTarget = n->TexTarget;
|
inst->TexSrcTarget = n->TexTarget;
|
||||||
inst->TexSrcUnit = 0; /* XXX temp */
|
inst->TexSrcUnit = 0; /* XXX temp */
|
||||||
|
|
||||||
fProg->TexturesUsed[inst->TexSrcUnit] |= (1 << inst->TexSrcTarget);
|
prog->TexturesUsed[inst->TexSrcUnit] |= (1 << inst->TexSrcTarget);
|
||||||
|
|
||||||
return inst;
|
return inst;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user