[Mesa-dev] [PATCH] anv: Don't place scratch buffers above the 32-bit boundary
Grazvydas Ignotas
notasas at gmail.com
Sun Apr 23 01:09:47 UTC 2017
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/20170423/f69d775a/attachment.html>
More information about the mesa-dev
mailing list