[Mesa-dev] [PATCH] anv: Don't place scratch buffers above the 32-bit boundary

Jason Ekstrand jason at jlekstrand.net
Wed Apr 26 07:12:44 UTC 2017


Ken?

On Sat, Apr 22, 2017 at 6:09 PM, Grazvydas Ignotas <notasas at gmail.com>
wrote:

> Fixes: 651ec926fc1 "anv: Add support for 48-bit addresses"
> Tested-by: Grazvydas Ignotas <notasas at gmail.com>
>
> On Sun, Apr 23, 2017 at 1:55 AM, Jason Ekstrand <jason at jlekstrand.net>
> wrote:
>
>> This fixes rendering corruptions in DOOM.  Hopefully, it will also make
>> Jenkins a bit more stable as we've been seeing some random failures and
>> GPU hangs ever since turning on 48bit.
>>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100620
>> Cc: "17.1" <mesa-stable at lists.freedesktop.org>
>> ---
>>  src/intel/vulkan/anv_allocator.c | 16 ++++++++++++++++
>>  1 file changed, 16 insertions(+)
>>
>> diff --git a/src/intel/vulkan/anv_allocator.c
>> b/src/intel/vulkan/anv_allocator.c
>> index 78327df..28bfac4 100644
>> --- a/src/intel/vulkan/anv_allocator.c
>> +++ b/src/intel/vulkan/anv_allocator.c
>> @@ -994,6 +994,22 @@ anv_scratch_pool_alloc(struct anv_device *device,
>> struct anv_scratch_pool *pool,
>>
>>     anv_bo_init_new(&bo->bo, device, size);
>>
>> +   /* Even though the Scratch base pointers in 3DSTATE_*S are 64 bits,
>> they
>> +    * are still relative to the general state base address.  When we emit
>> +    * STATE_BASE_ADDRESS, we set general state base address to 0 and the
>> size
>> +    * to the maximum (1 page under 4GB).  This allows us to just place
>> the
>> +    * scratch buffers anywhere we wish in the bottom 32 bits of address
>> space
>> +    * and just set the scratch base pointer in 3DSTATE_*S using a
>> relocation.
>> +    * However, in order to do so, we need to ensure that the kernel does
>> not
>> +    * place the scratch BO above the 32-bit boundary.
>> +    *
>> +    * NOTE: Technically, it can't go "anywhere" because the top page is
>> off
>> +    * limits.  However, it will never end up getting placed that high
>> because
>> +    * the surface state and general state buffers will get placed first
>> and
>> +    * the kernel likes to work top-down.
>> +    */
>> +   bo->bo.flags &= ~EXEC_OBJECT_SUPPORTS_48B_ADDRESS;
>> +
>>     /* Set the exists last because it may be read by other threads */
>>     __sync_synchronize();
>>     bo->exists = true;
>> --
>> 2.5.0.400.gff86faf
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170426/4bd8542e/attachment.html>


More information about the mesa-dev mailing list