diff options
author | Paul Berry <[email protected]> | 2013-12-17 09:54:38 -0800 |
---|---|---|
committer | Paul Berry <[email protected]> | 2013-12-30 11:21:27 -0800 |
commit | 99e822fa18a322f7bf0d32ce99eab534d5614469 (patch) | |
tree | d2dd92b2c2f2312a9d5582534dc4b2f5073b274d /src | |
parent | b30e25f29752fe3782d9ad43cb2cee46885c487d (diff) |
mesa: Improve static error checking of arrays sized by MESA_SHADER_TYPES.
This patch replaces the following pattern:
foo bar[MESA_SHADER_TYPES] = {
...
};
With:
foo bar[] = {
...
};
STATIC_ASSERT(Elements(bar) == MESA_SHADER_TYPES);
This way, when a new shader type is added in a future version of Mesa,
we will get a compile error to remind us that the array needs to be
updated.
Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/glsl/link_atomics.cpp | 7 | ||||
-rw-r--r-- | src/glsl/linker.cpp | 14 | ||||
-rw-r--r-- | src/mesa/program/program.h | 3 |
3 files changed, 16 insertions, 8 deletions
diff --git a/src/glsl/link_atomics.cpp b/src/glsl/link_atomics.cpp index 6b7682cf845..603329c503b 100644 --- a/src/glsl/link_atomics.cpp +++ b/src/glsl/link_atomics.cpp @@ -214,17 +214,18 @@ void link_check_atomic_counter_resources(struct gl_context *ctx, struct gl_shader_program *prog) { - STATIC_ASSERT(MESA_SHADER_TYPES == 3); - const unsigned max_atomic_counters[MESA_SHADER_TYPES] = { + const unsigned max_atomic_counters[] = { ctx->Const.VertexProgram.MaxAtomicCounters, ctx->Const.GeometryProgram.MaxAtomicCounters, ctx->Const.FragmentProgram.MaxAtomicCounters }; - const unsigned max_atomic_buffers[MESA_SHADER_TYPES] = { + STATIC_ASSERT(Elements(max_atomic_counters) == MESA_SHADER_TYPES); + const unsigned max_atomic_buffers[] = { ctx->Const.VertexProgram.MaxAtomicBuffers, ctx->Const.GeometryProgram.MaxAtomicBuffers, ctx->Const.FragmentProgram.MaxAtomicBuffers }; + STATIC_ASSERT(Elements(max_atomic_buffers) == MESA_SHADER_TYPES); unsigned num_buffers; active_atomic_buffer *const abs = find_active_atomic_counters(ctx, prog, &num_buffers); diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index 9cfbb9b5163..a81e107372b 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -1894,29 +1894,35 @@ store_fragdepth_layout(struct gl_shader_program *prog) static void check_resources(struct gl_context *ctx, struct gl_shader_program *prog) { - const unsigned max_samplers[MESA_SHADER_TYPES] = { + const unsigned max_samplers[] = { ctx->Const.VertexProgram.MaxTextureImageUnits, ctx->Const.GeometryProgram.MaxTextureImageUnits, ctx->Const.FragmentProgram.MaxTextureImageUnits }; + STATIC_ASSERT(Elements(max_samplers) == MESA_SHADER_TYPES); - const unsigned max_default_uniform_components[MESA_SHADER_TYPES] = { + const unsigned max_default_uniform_components[] = { ctx->Const.VertexProgram.MaxUniformComponents, ctx->Const.GeometryProgram.MaxUniformComponents, ctx->Const.FragmentProgram.MaxUniformComponents }; + STATIC_ASSERT(Elements(max_default_uniform_components) == + MESA_SHADER_TYPES); - const unsigned max_combined_uniform_components[MESA_SHADER_TYPES] = { + const unsigned max_combined_uniform_components[] = { ctx->Const.VertexProgram.MaxCombinedUniformComponents, ctx->Const.GeometryProgram.MaxCombinedUniformComponents, ctx->Const.FragmentProgram.MaxCombinedUniformComponents }; + STATIC_ASSERT(Elements(max_combined_uniform_components) == + MESA_SHADER_TYPES); - const unsigned max_uniform_blocks[MESA_SHADER_TYPES] = { + const unsigned max_uniform_blocks[] = { ctx->Const.VertexProgram.MaxUniformBlocks, ctx->Const.GeometryProgram.MaxUniformBlocks, ctx->Const.FragmentProgram.MaxUniformBlocks }; + STATIC_ASSERT(Elements(max_uniform_blocks) == MESA_SHADER_TYPES); for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) { struct gl_shader *sh = prog->_LinkedShaders[i]; diff --git a/src/mesa/program/program.h b/src/mesa/program/program.h index 353ccab4789..135271caf9a 100644 --- a/src/mesa/program/program.h +++ b/src/mesa/program/program.h @@ -210,11 +210,12 @@ _mesa_program_target_to_index(GLenum v) static inline GLenum _mesa_program_index_to_target(GLuint i) { - static const GLenum enums[MESA_SHADER_TYPES] = { + static const GLenum enums[] = { GL_VERTEX_PROGRAM_ARB, GL_GEOMETRY_PROGRAM_NV, GL_FRAGMENT_PROGRAM_ARB }; + STATIC_ASSERT(Elements(enums) == MESA_SHADER_TYPES); if(i >= MESA_SHADER_TYPES) return 0; else |