From 203cd1bf28b88e041a693c867b4dd705236b0d5f Mon Sep 17 00:00:00 2001 From: Samuel Iglesias Gonsalvez Date: Tue, 23 Jun 2015 08:53:36 +0200 Subject: [PATCH] glsl: shader storage blocks use different max block size values than uniforms MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Samuel Iglesias Gonsalvez Reviewed-by: Kristian Høgsberg --- src/glsl/linker.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index 9be957a3f80..aebf2560dab 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -2803,13 +2803,23 @@ check_resources(struct gl_context *ctx, struct gl_shader_program *prog) unsigned total_shader_storage_blocks = 0; for (unsigned i = 0; i < prog->NumUniformBlocks; i++) { - if (prog->UniformBlocks[i].UniformBufferSize > ctx->Const.MaxUniformBlockSize) { + /* Don't check SSBOs for Uniform Block Size */ + if (!prog->UniformBlocks[i].IsShaderStorage && + prog->UniformBlocks[i].UniformBufferSize > ctx->Const.MaxUniformBlockSize) { linker_error(prog, "Uniform block %s too big (%d/%d)\n", prog->UniformBlocks[i].Name, prog->UniformBlocks[i].UniformBufferSize, ctx->Const.MaxUniformBlockSize); } + if (prog->UniformBlocks[i].IsShaderStorage && + prog->UniformBlocks[i].UniformBufferSize > ctx->Const.MaxShaderStorageBlockSize) { + linker_error(prog, "Shader storage block %s too big (%d/%d)\n", + prog->UniformBlocks[i].Name, + prog->UniformBlocks[i].UniformBufferSize, + ctx->Const.MaxShaderStorageBlockSize); + } + for (unsigned j = 0; j < MESA_SHADER_STAGES; j++) { if (prog->UniformBlockStageIndex[j][i] != -1) { struct gl_shader *sh = prog->_LinkedShaders[j]; -- 2.30.2