On 04/11/2015 09:48 AM, Marcin Ślusarz wrote: > ARB_uniform_buffer_object spec says: > "The total amount of buffer object storage available for any given uniform > block is subject to an implementation-dependent limit; the maximum amount > of available space, in basic machine units, can be queried by calling > GetIntegerv with the constant MAX_UNIFORM_BLOCK_SIZE. If the amount > of storage required for a uniform block exceeds this limit, a program may > fail to link." > > Fixes these piglit tests: > spec@arb_uniform_buffer_object@maxuniformblocksize@fsexceed > spec@arb_uniform_buffer_object@maxuniformblocksize@vsexceed > on nouveau/gk107.
Can you elaborate on how this fixes the test? The fsexceed and vsexceed tests are supposed to pass if linking fails. > --- > src/glsl/linker.cpp | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp > index 85830e6..88a4548 100644 > --- a/src/glsl/linker.cpp > +++ b/src/glsl/linker.cpp > @@ -2308,6 +2308,25 @@ check_resources(struct gl_context *ctx, struct > gl_shader_program *prog) > _mesa_shader_stage_to_string(i)); > } > } > + > + for (unsigned j = 0; j < sh->NumUniformBlocks; ++j) { > + if (sh->UniformBlocks[j].UniformBufferSize > > + ctx->Const.MaxUniformBlockSize) { > + if (ctx->Const.GLSLSkipStrictMaxUniformLimitCheck) { > + linker_warning(prog, > + "%s shader uses uniform block whose size > exceeds " > + "MAX_UNIFORM_BLOCK_SIZE, but the driver will > try " > + "to optimize them out; this is non-portable " > + "out-of-spec behaviour\n", > + _mesa_shader_stage_to_string(i)); > + } else { > + linker_error(prog, > + "%s shader uses uniform block whose size exceeds > " > + "MAX_UNIFORM_BLOCK_SIZE\n", > + _mesa_shader_stage_to_string(i)); > + } > + } > + } > } > > unsigned blocks[MESA_SHADER_STAGES] = {0}; > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev