[Mesa-dev] Mesa (master): i965: Double the size of the state cache.

Stéphane Marchesin stephane.marchesin at gmail.com
Mon Aug 27 21:23:06 PDT 2012


On Mon, Aug 27, 2012 at 8:58 PM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> On 08/27/2012 03:00 PM, Stéphane Marchesin wrote:
>> On Mon, Aug 27, 2012 at 2:24 PM, Kenneth Graunke
>> <kwg at kemper.freedesktop.org> wrote:
>>> Module: Mesa
>>> Branch: master
>>> Commit: 87cdefed405da1a57a006737297d20ba0c25fa1b
>>> URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=87cdefed405da1a57a006737297d20ba0c25fa1b
>>>
>>> Author: Kenneth Graunke <kenneth at whitecape.org>
>>> Date:   Sun Aug 26 00:07:56 2012 -0700
>>>
>>> i965: Double the size of the state cache.
>>>
>>> We probably want to do something more sophisticated here, but this at
>>> least makes it through L4D2 without dumping the program cache.
>>>
>>> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
>>> Reviewed-by: Eric Anholt <eric at anholt.net>
>>>
>>> ---
>>>
>>>  src/mesa/drivers/dri/i965/brw_state_cache.c |    4 ++--
>>>  1 files changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/src/mesa/drivers/dri/i965/brw_state_cache.c b/src/mesa/drivers/dri/i965/brw_state_cache.c
>>> index 57a5ee9..8823b22 100644
>>> --- a/src/mesa/drivers/dri/i965/brw_state_cache.c
>>> +++ b/src/mesa/drivers/dri/i965/brw_state_cache.c
>>> @@ -372,10 +372,10 @@ brw_clear_cache(struct brw_context *brw, struct brw_cache *cache)
>>>  void
>>>  brw_state_cache_check_size(struct brw_context *brw)
>>>  {
>>> -   /* un-tuned guess.  Each object is generally a page, so 1000 of them is 4 MB of
>>> +   /* un-tuned guess.  Each object is generally a page, so 2000 of them is 8 MB of
>>
>> The problem is that this statement ("Each object is generally a page") is wrong.
>>
>> A wm prog cache entry always contains prog_data as aux data.
>> brw_wm_prog_data has those two fields:
>> const float *param[MAX_UNIFORMS * 4]; /* should be: BRW_MAX_CURBE */
>> const float *pull_param[MAX_UNIFORMS * 4];
>>
>> MAX_UNIFORMS is 4096. So in 64 bit, brw_wm_prog_data is more than 256k.
>>
>> Therefore by doubling the cache, you are going from 256 MB to 512 MB,
>> not 4 MB to 8 MB. As far as I know, that cache is the biggest consumer
>> of memory in i965.
>>
>> Stéphane
>
> Ouch!  Clearly, having 32768 pointers in the key is absurd...especially
> since programs usually only use a few uniforms.
>
> Thankfully, Eric has a three patch series which fixes the problem by
> dynamically allocating the arrays:
> http://lists.freedesktop.org/archives/mesa-dev/2012-August/026403.html
>

Thanks, I'll look at those.

> Hopefully that will land soon.  I can revert the patch in the meantime
> if you would prefer.

Nah, if a proper solution is coming then I don't care :)

Stéphane


More information about the mesa-dev mailing list