On 09/08/2015 10:43 PM, Kenneth Graunke wrote: > 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?
təˈmeɪtoʊ / təˈmɑːtoʊ. I mostly wanted to be sure I wasn't missing something. > 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: OpenPGP digital signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev