mesa: fix/simplify initialization of vertex/fragment program limits
Defaults for program length, num ALU instructions, num indirections, etc. basically indicate no limit for software rendering. Driver should override as needed.
This commit is contained in:
parent
b5e1a93036
commit
f51cca72d3
|
@ -176,13 +176,11 @@
|
|||
/** For GL_ARB_fragment_program */
|
||||
/*@{*/
|
||||
#define MAX_FRAGMENT_PROGRAM_ADDRESS_REGS 0
|
||||
#define MAX_FRAGMENT_PROGRAM_ALU_INSTRUCTIONS 48
|
||||
#define MAX_FRAGMENT_PROGRAM_TEX_INSTRUCTIONS 24
|
||||
#define MAX_FRAGMENT_PROGRAM_TEX_INDIRECTIONS 4
|
||||
/*@}*/
|
||||
|
||||
/** For any program target/extension */
|
||||
/*@{*/
|
||||
#define MAX_PROGRAM_INSTRUCTIONS (16 * 1024)
|
||||
#define MAX_PROGRAM_LOCAL_PARAMS 128 /* KW: power of two */
|
||||
#define MAX_PROGRAM_ENV_PARAMS 128
|
||||
#define MAX_PROGRAM_MATRICES 8
|
||||
|
|
|
@ -819,11 +819,33 @@ _mesa_init_current(GLcontext *ctx)
|
|||
|
||||
|
||||
/**
|
||||
* Init vertex/fragment program native limits from logical limits.
|
||||
* Init vertex/fragment program limits.
|
||||
* Important: drivers should override these with actual limits.
|
||||
*/
|
||||
static void
|
||||
init_natives(struct gl_program_constants *prog)
|
||||
init_program_limits(GLenum type, struct gl_program_constants *prog)
|
||||
{
|
||||
prog->MaxInstructions = MAX_PROGRAM_INSTRUCTIONS;
|
||||
prog->MaxAluInstructions = MAX_PROGRAM_INSTRUCTIONS;
|
||||
prog->MaxTexInstructions = MAX_PROGRAM_INSTRUCTIONS;
|
||||
prog->MaxTexIndirections = MAX_PROGRAM_INSTRUCTIONS;
|
||||
prog->MaxTemps = MAX_PROGRAM_TEMPS;
|
||||
prog->MaxEnvParams = MAX_PROGRAM_ENV_PARAMS;
|
||||
prog->MaxLocalParams = MAX_PROGRAM_LOCAL_PARAMS;
|
||||
prog->MaxUniformComponents = 4 * MAX_UNIFORMS;
|
||||
|
||||
if (type == GL_VERTEX_PROGRAM_ARB) {
|
||||
prog->MaxParameters = MAX_NV_VERTEX_PROGRAM_PARAMS;
|
||||
prog->MaxAttribs = MAX_NV_VERTEX_PROGRAM_INPUTS;
|
||||
prog->MaxAddressRegs = MAX_VERTEX_PROGRAM_ADDRESS_REGS;
|
||||
}
|
||||
else {
|
||||
prog->MaxParameters = MAX_NV_FRAGMENT_PROGRAM_PARAMS;
|
||||
prog->MaxAttribs = MAX_NV_FRAGMENT_PROGRAM_INPUTS;
|
||||
prog->MaxAddressRegs = MAX_FRAGMENT_PROGRAM_ADDRESS_REGS;
|
||||
}
|
||||
|
||||
/* copy the above limits to init native limits */
|
||||
prog->MaxNativeInstructions = prog->MaxInstructions;
|
||||
prog->MaxNativeAluInstructions = prog->MaxAluInstructions;
|
||||
prog->MaxNativeTexInstructions = prog->MaxTexInstructions;
|
||||
|
@ -885,33 +907,10 @@ _mesa_init_constants(GLcontext *ctx)
|
|||
ctx->Const.MaxViewportWidth = MAX_WIDTH;
|
||||
ctx->Const.MaxViewportHeight = MAX_HEIGHT;
|
||||
#if FEATURE_ARB_vertex_program
|
||||
ctx->Const.VertexProgram.MaxInstructions = MAX_NV_VERTEX_PROGRAM_INSTRUCTIONS;
|
||||
ctx->Const.VertexProgram.MaxAluInstructions = 0;
|
||||
ctx->Const.VertexProgram.MaxTexInstructions = 0;
|
||||
ctx->Const.VertexProgram.MaxTexIndirections = 0;
|
||||
ctx->Const.VertexProgram.MaxAttribs = MAX_NV_VERTEX_PROGRAM_INPUTS;
|
||||
ctx->Const.VertexProgram.MaxTemps = MAX_PROGRAM_TEMPS;
|
||||
ctx->Const.VertexProgram.MaxParameters = MAX_NV_VERTEX_PROGRAM_PARAMS;
|
||||
ctx->Const.VertexProgram.MaxLocalParams = MAX_PROGRAM_LOCAL_PARAMS;
|
||||
ctx->Const.VertexProgram.MaxEnvParams = MAX_PROGRAM_ENV_PARAMS;
|
||||
ctx->Const.VertexProgram.MaxAddressRegs = MAX_VERTEX_PROGRAM_ADDRESS_REGS;
|
||||
ctx->Const.VertexProgram.MaxUniformComponents = 4 * MAX_UNIFORMS;
|
||||
init_natives(&ctx->Const.VertexProgram);
|
||||
init_program_limits(GL_VERTEX_PROGRAM_ARB, &ctx->Const.VertexProgram);
|
||||
#endif
|
||||
|
||||
#if FEATURE_ARB_fragment_program
|
||||
ctx->Const.FragmentProgram.MaxInstructions = MAX_NV_FRAGMENT_PROGRAM_INSTRUCTIONS;
|
||||
ctx->Const.FragmentProgram.MaxAluInstructions = MAX_FRAGMENT_PROGRAM_ALU_INSTRUCTIONS;
|
||||
ctx->Const.FragmentProgram.MaxTexInstructions = MAX_FRAGMENT_PROGRAM_TEX_INSTRUCTIONS;
|
||||
ctx->Const.FragmentProgram.MaxTexIndirections = MAX_FRAGMENT_PROGRAM_TEX_INDIRECTIONS;
|
||||
ctx->Const.FragmentProgram.MaxAttribs = MAX_NV_FRAGMENT_PROGRAM_INPUTS;
|
||||
ctx->Const.FragmentProgram.MaxTemps = MAX_PROGRAM_TEMPS;
|
||||
ctx->Const.FragmentProgram.MaxParameters = MAX_NV_FRAGMENT_PROGRAM_PARAMS;
|
||||
ctx->Const.FragmentProgram.MaxLocalParams = MAX_PROGRAM_LOCAL_PARAMS;
|
||||
ctx->Const.FragmentProgram.MaxEnvParams = MAX_PROGRAM_ENV_PARAMS;
|
||||
ctx->Const.FragmentProgram.MaxAddressRegs = MAX_FRAGMENT_PROGRAM_ADDRESS_REGS;
|
||||
ctx->Const.FragmentProgram.MaxUniformComponents = 4 * MAX_UNIFORMS;
|
||||
init_natives(&ctx->Const.FragmentProgram);
|
||||
init_program_limits(GL_FRAGMENT_PROGRAM_ARB, &ctx->Const.FragmentProgram);
|
||||
#endif
|
||||
ctx->Const.MaxProgramMatrices = MAX_PROGRAM_MATRICES;
|
||||
ctx->Const.MaxProgramMatrixStackDepth = MAX_PROGRAM_MATRIX_STACK_DEPTH;
|
||||
|
|
Loading…
Reference in New Issue