On Tuesday, September 08, 2015 08:50:41 PM Ian Romanick wrote: > On 09/08/2015 06:04 PM, Kenneth Graunke wrote: > > Our old value of 16384 is the minimum value. DirectX apparently > > requires 65536 at a minimum; that's also what nVidia and the Intel > > Windows driver advertise. AMD advertises MAX_INT. > > > > Ilia Mirkin noticed that "Shadow Warrior" uses UBOs larger than 16k > > on Nouveau, which advertises 65536 bytes for this limit. Traces > > captured on Nouveau don't work on i965 because our lower limit causes > > the GLSL linker to reject the captured shaders. While this isn't > > important in and of itself, it does suggest that raising the limit > > would be beneficial. > > > > We can read linear buffers up to 2^27 bytes in size, so raising this > > should be safe; we could probably even go larger. For now, matching > > nVidia and Intel/Windows seems like a good plan. > > > > We have to reinitialize MaxCombinedUniformComponents as core Mesa will > > have set it based on a stale value for MaxUniformBlockSize. > > > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > > --- > > src/mesa/drivers/dri/i965/brw_context.c | 9 +++++++++ > > 1 file changed, 9 insertions(+) > > > > diff --git a/src/mesa/drivers/dri/i965/brw_context.c > > b/src/mesa/drivers/dri/i965/brw_context.c > > index 907b2a0..7c1c133 100644 > > --- a/src/mesa/drivers/dri/i965/brw_context.c > > +++ b/src/mesa/drivers/dri/i965/brw_context.c > > @@ -323,6 +323,15 @@ brw_initialize_context_constants(struct brw_context > > *brw) > > > > ctx->Const.StripTextureBorder = true; > > > > + ctx->Const.MaxUniformBlockSize = 65536; > > + for (int i = 0; i < MESA_SHADER_STAGES; i++) { > > + struct gl_program_constants *prog = &ctx->Const.Program[i]; > > + prog->MaxUniformBlocks = 12; > > Is this actually necessary? It looks like this is that value already > set in init_program_limits. Either way, this patch is > > Reviewed-by: Ian Romanick <ian.d.roman...@intel.com>
You're right, setting prog->MaxUniformBlocks = 12 is unnecessary. We do need to reset prog->MaxCombinedUniformComponents since init_program_limits computed a value using a stale MaxUniformBlockSize. I figured since the three values are related, we may as well just explicitly initialize them all. But if you'd prefer I take it out, I'm fine with that too. What do you prefer? Thanks for the quick review! --Ken > > + prog->MaxCombinedUniformComponents = > > + prog->MaxUniformComponents + > > + ctx->Const.MaxUniformBlockSize / 4 * prog->MaxUniformBlocks; > > + } > > + > > ctx->Const.MaxDualSourceDrawBuffers = 1; > > ctx->Const.MaxDrawBuffers = BRW_MAX_DRAW_BUFFERS; > > ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits = > > max_samplers; > > >
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev