On Tue, May 8, 2018 at 3:06 AM, Nicolai Hähnle <nhaeh...@gmail.com> wrote:

> On 02.05.2018 06:00, Marek Olšák wrote:
>
>> From: Marek Olšák <marek.ol...@amd.com>
>>
>> ---
>>   src/amd/common/ac_surface.c | 9 +++++++--
>>   1 file changed, 7 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c
>> index b2af1f70b69..341a7854fe5 100644
>> --- a/src/amd/common/ac_surface.c
>> +++ b/src/amd/common/ac_surface.c
>> @@ -841,22 +841,27 @@ static int gfx6_compute_surface(ADDR_HANDLE
>> addrlib,
>>                  *
>>                  * "dcc_alignment * 4" was determined by trial and error.
>>                  */
>>                 surf->dcc_size = align64(surf->surf_size >> 8,
>>                                          surf->dcc_alignment * 4);
>>         }
>>         /* Make sure HTILE covers the whole miptree, because the shader
>> reads
>>          * TC-compatible HTILE even for levels where it's disabled by DB.
>>          */
>> -       if (surf->htile_size && config->info.levels > 1)
>> -               surf->htile_size *= 2;
>> +       if (surf->htile_size && config->info.levels > 1 &&
>> +           surf->flags & RADEON_SURF_TC_COMPATIBLE_HTILE) {
>> +               surf->htile_size =
>> +                       surf->surf_size * 4 / (8 * 8 * surf->bpe *
>> +                                              MAX2(1,
>> config->info.samples));
>>
>
> Can you explain this formula? In particular where the 4 comes from?
>

Sure.

Definitions (for the whole miptree):
1) surf_size = bpe * samples * num_pixels
2) htile_size = num_pixels * 4 / (8 * 8)

Therefore:
num_pixels = surf_size / (bpe * samples), so:
htile_size = (surf_size / (bpe * samples)) * 4 / (8 * 8)

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

Reply via email to