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;
>>>
>>


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to