From e0e94026a0648d6b33d6b7cf2b9b01429cf945e4 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Fri, 11 Mar 2011 09:25:22 -0700 Subject: [PATCH] mesa: move location of some geometry program limits The gl_program_constants struct is for limits that are applicable to any/all shader stages. Move the geometry shader-only fields into the gl_constants struct. Remove redundant MaxGeometryUniformComponents field too. --- src/mesa/main/context.c | 18 ++++++++++-------- src/mesa/main/get.c | 12 ++++++------ src/mesa/main/mtypes.h | 21 +++++++++++---------- src/mesa/main/shaderapi.c | 2 +- src/mesa/program/ir_to_mesa.cpp | 2 +- 5 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index 5d581c84002..ca74284ca89 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -486,7 +486,6 @@ init_program_limits(GLenum type, struct gl_program_constants *prog) prog->MaxTemps = MAX_PROGRAM_TEMPS; prog->MaxEnvParams = MAX_PROGRAM_ENV_PARAMS; prog->MaxLocalParams = MAX_PROGRAM_LOCAL_PARAMS; - prog->MaxUniformComponents = 4 * MAX_UNIFORMS; prog->MaxAddressOffset = MAX_PROGRAM_LOCAL_PARAMS; switch (type) { @@ -494,23 +493,19 @@ init_program_limits(GLenum type, struct gl_program_constants *prog) prog->MaxParameters = MAX_VERTEX_PROGRAM_PARAMS; prog->MaxAttribs = MAX_NV_VERTEX_PROGRAM_INPUTS; prog->MaxAddressRegs = MAX_VERTEX_PROGRAM_ADDRESS_REGS; + prog->MaxUniformComponents = 4 * MAX_UNIFORMS; break; case GL_FRAGMENT_PROGRAM_ARB: prog->MaxParameters = MAX_NV_FRAGMENT_PROGRAM_PARAMS; prog->MaxAttribs = MAX_NV_FRAGMENT_PROGRAM_INPUTS; prog->MaxAddressRegs = MAX_FRAGMENT_PROGRAM_ADDRESS_REGS; + prog->MaxUniformComponents = 4 * MAX_UNIFORMS; break; case MESA_GEOMETRY_PROGRAM: prog->MaxParameters = MAX_NV_VERTEX_PROGRAM_PARAMS; prog->MaxAttribs = MAX_NV_VERTEX_PROGRAM_INPUTS; prog->MaxAddressRegs = MAX_VERTEX_PROGRAM_ADDRESS_REGS; - - prog->MaxGeometryTextureImageUnits = MAX_GEOMETRY_TEXTURE_IMAGE_UNITS; - prog->MaxGeometryVaryingComponents = MAX_GEOMETRY_VARYING_COMPONENTS; - prog->MaxVertexVaryingComponents = MAX_VERTEX_VARYING_COMPONENTS; - prog->MaxGeometryUniformComponents = MAX_GEOMETRY_UNIFORM_COMPONENTS; - prog->MaxGeometryOutputVertices = MAX_GEOMETRY_OUTPUT_VERTICES; - prog->MaxGeometryTotalOutputComponents = MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS; + prog->MaxUniformComponents = MAX_GEOMETRY_UNIFORM_COMPONENTS; break; default: assert(0 && "Bad program type in init_program_limits()"); @@ -619,6 +614,13 @@ _mesa_init_constants(struct gl_context *ctx) ctx->Const.MaxCombinedTextureImageUnits = MAX_COMBINED_TEXTURE_IMAGE_UNITS; ctx->Const.MaxVarying = MAX_VARYING; #endif +#if FEATURE_ARB_geometry_shader4 + ctx->Const.MaxGeometryTextureImageUnits = MAX_GEOMETRY_TEXTURE_IMAGE_UNITS; + ctx->Const.MaxVertexVaryingComponents = MAX_VERTEX_VARYING_COMPONENTS; + ctx->Const.MaxGeometryVaryingComponents = MAX_GEOMETRY_VARYING_COMPONENTS; + ctx->Const.MaxGeometryOutputVertices = MAX_GEOMETRY_OUTPUT_VERTICES; + ctx->Const.MaxGeometryTotalOutputComponents = MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS; +#endif /* Shading language version */ if (ctx->API == API_OPENGL) { diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 336304c591d..7d1a5cf6002 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -1201,22 +1201,22 @@ static const struct value_desc values[] = { /* GL_ARB_geometry_shader4 */ { GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB, - CONTEXT_INT(Const.GeometryProgram.MaxGeometryTextureImageUnits), + CONTEXT_INT(Const.MaxGeometryTextureImageUnits), extra_ARB_geometry_shader4 }, { GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB, - CONTEXT_INT(Const.GeometryProgram.MaxGeometryOutputVertices), + CONTEXT_INT(Const.MaxGeometryOutputVertices), extra_ARB_geometry_shader4 }, { GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB, - CONTEXT_INT(Const.GeometryProgram.MaxGeometryTotalOutputComponents), + CONTEXT_INT(Const.MaxGeometryTotalOutputComponents), extra_ARB_geometry_shader4 }, { GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB, - CONTEXT_INT(Const.GeometryProgram.MaxGeometryUniformComponents), + CONTEXT_INT(Const.GeometryProgram.MaxUniformComponents), extra_ARB_geometry_shader4 }, { GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB, - CONTEXT_INT(Const.GeometryProgram.MaxGeometryVaryingComponents), + CONTEXT_INT(Const.MaxGeometryVaryingComponents), extra_ARB_geometry_shader4 }, { GL_MAX_VERTEX_VARYING_COMPONENTS_ARB, - CONTEXT_INT(Const.GeometryProgram.MaxVertexVaryingComponents), + CONTEXT_INT(Const.MaxVertexVaryingComponents), extra_ARB_geometry_shader4 }, /* GL_EXT_gpu_shader4 / GL 3.0 */ diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 695d936527d..4f83e2e55c2 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2563,7 +2563,7 @@ struct gl_precision /** - * Limits for vertex and fragment programs/shaders. + * Limits for vertex, geometry and fragment programs/shaders. */ struct gl_program_constants { @@ -2589,14 +2589,7 @@ struct gl_program_constants GLuint MaxNativeAddressRegs; GLuint MaxNativeParameters; /* For shaders */ - GLuint MaxUniformComponents; - /* GL_ARB_geometry_shader4 */ - GLuint MaxGeometryTextureImageUnits; - GLuint MaxGeometryVaryingComponents; - GLuint MaxVertexVaryingComponents; - GLuint MaxGeometryUniformComponents; - GLuint MaxGeometryOutputVertices; - GLuint MaxGeometryTotalOutputComponents; + GLuint MaxUniformComponents; /**< Usually == MaxParameters * 4 */ /* ES 2.0 and GL_ARB_ES2_compatibility */ struct gl_precision LowFloat, MediumFloat, HighFloat; struct gl_precision LowInt, MediumInt, HighInt; @@ -2619,6 +2612,7 @@ struct gl_constants GLuint MaxTextureImageUnits; GLuint MaxVertexTextureImageUnits; GLuint MaxCombinedTextureImageUnits; + GLuint MaxGeometryTextureImageUnits; GLuint MaxTextureUnits; /**< = MIN(CoordUnits, ImageUnits) */ GLfloat MaxTextureMaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ GLfloat MaxTextureLodBias; /**< GL_EXT_texture_lod_bias */ @@ -2658,7 +2652,14 @@ struct gl_constants GLuint MaxRenderbufferSize; /**< GL_EXT_framebuffer_object */ GLuint MaxSamples; /**< GL_ARB_framebuffer_object */ - GLuint MaxVarying; /**< Number of float[4] varying parameters */ + /** Number of varying vectors between vertex and fragment shaders */ + GLuint MaxVarying; + GLuint MaxVertexVaryingComponents; /**< Between vert and geom shader */ + GLuint MaxGeometryVaryingComponents; /**< Between geom and frag shader */ + + /** GL_ARB_geometry_shader4 */ + GLuint MaxGeometryOutputVertices; + GLuint MaxGeometryTotalOutputComponents; GLuint GLSLVersion; /**< GLSL version supported (ex: 120 = 1.20) */ diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 6650613d28d..2c5f2a147ce 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -1732,7 +1732,7 @@ _mesa_ProgramParameteriARB(GLuint program, GLenum pname, switch (pname) { case GL_GEOMETRY_VERTICES_OUT_ARB: if (value < 1 || - (unsigned) value > ctx->Const.GeometryProgram.MaxGeometryOutputVertices) { + (unsigned) value > ctx->Const.MaxGeometryOutputVertices) { _mesa_error(ctx, GL_INVALID_VALUE, "glProgramParameteri(GL_GEOMETRY_VERTICES_OUT_ARB=%d", value); diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index 9c77f387593..c4704fe6b46 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -2460,7 +2460,7 @@ check_resources(const struct gl_context *ctx, break; case MESA_GEOMETRY_PROGRAM: if (_mesa_bitcount(prog->SamplersUsed) > - ctx->Const.GeometryProgram.MaxGeometryTextureImageUnits) { + ctx->Const.MaxGeometryTextureImageUnits) { fail_link(shader_program, "Too many geometry shader texture samplers"); } if (prog->Parameters->NumParameters > -- 2.30.2