[Bug 28800] [r300c, r300g] Texture corruption with World of Warcraft

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Thu Dec 16 07:00:57 PST 2010


https://bugs.freedesktop.org/show_bug.cgi?id=28800

--- Comment #21 from Marek Olšák <maraeo at gmail.com> 2010-12-16 07:00:56 PST ---
(In reply to comment #20)
> Created an attachment (id=41170)
 View: https://bugs.freedesktop.org/attachment.cgi?id=41170
 Review: https://bugs.freedesktop.org/review?bug=28800&attachment=41170

> r300g_multitexturing.diff
> 
> I played around with the tmu texture cache region assignment code, read the
> corresponding part of the r3xx register manual, and deduced the following:
> - you must assign different region for different textures
> - assigned regions must not overlap
> The existing code guarantees none of these, especially if there are partial
> updates (which are quite common). The texture corruption is the result of the
> tmu loading different textures into the same cache area (possibly in different
> formats), and only one of them won't be garbage.

Thanks a lot for looking into this, but let's discuss it a bit.

Could you give me a prove that the current code is wrong? At least one case
where the assignment of texture cache regions is done wrong.

Currently it should assign the regions as follows:

1 texture:
R300_TX_CACHE_WHOLE

2 textures:
R300_TX_CACHE_HALF_0
R300_TX_CACHE_HALF_1

3 textures:
R300_TX_CACHE_HALF_1  
R300_TX_CACHE_FOURTH_0
R300_TX_CACHE_FOURTH_1

4 textures:
R300_TX_CACHE_FOURTH_0
R300_TX_CACHE_FOURTH_1
R300_TX_CACHE_FOURTH_2
R300_TX_CACHE_FOURTH_3

5 textures:
R300_TX_CACHE_FOURTH_1
R300_TX_CACHE_FOURTH_2
R300_TX_CACHE_FOURTH_3
R300_TX_CACHE_EIGHTH_0
R300_TX_CACHE_EIGHTH_1

6 textures:
R300_TX_CACHE_FOURTH_2
R300_TX_CACHE_FOURTH_3
R300_TX_CACHE_EIGHTH_0
R300_TX_CACHE_EIGHTH_1
R300_TX_CACHE_EIGHTH_2
R300_TX_CACHE_EIGHTH_3

7 textures:
R300_TX_CACHE_FOURTH_3
R300_TX_CACHE_EIGHTH_0
R300_TX_CACHE_EIGHTH_1
R300_TX_CACHE_EIGHTH_2
R300_TX_CACHE_EIGHTH_3
R300_TX_CACHE_EIGHTH_4
R300_TX_CACHE_EIGHTH_5

8 textures:
R300_TX_CACHE_EIGHTH_0
R300_TX_CACHE_EIGHTH_1
R300_TX_CACHE_EIGHTH_2
R300_TX_CACHE_EIGHTH_3
R300_TX_CACHE_EIGHTH_4
R300_TX_CACHE_EIGHTH_5
R300_TX_CACHE_EIGHTH_6
R300_TX_CACHE_EIGHTH_7

And so on. I can't see any overlapping regions. It always divides the whole
texture cache between all the textures. The code assumes each region can be
divided to two of half the size of the original one. E.g. the case with 2
textures is:

R300_TX_CACHE_HALF_0
R300_TX_CACHE_HALF_1

And when you add the 3rd texture, the first region will get divided evenly like
this:

R300_TX_CACHE_FOURTH_0
R300_TX_CACHE_FOURTH_1
R300_TX_CACHE_HALF_1

Does it look wrong to you? Do you think that the hardware doesn't like so
_tight_ configuration of the regions?

-- 
Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.


More information about the dri-devel mailing list