anv: Use separate MOCS settings for external BOs
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 9 Jul 2018 21:21:33 +0000 (14:21 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 3 Oct 2018 14:03:03 +0000 (09:03 -0500)
commit7a89a0d9edae638e68e4b4ee8e0cbb34baa9c080
tree2772d7f0a493ea3b543dddfa642a4b4dece2d8cb
parent08bff097e136042aa5e5a0c99b1b67871525e5fe
anv: Use separate MOCS settings for external BOs

On Broadwell and above, we have to use different MOCS settings to allow
the kernel to take over and disable caching when needed for external
buffers.  On Broadwell, this is especially important because the kernel
can't disable eLLC so we have to do it in userspace.  We very badly
don't want to do that on everything so we need separate MOCS for
external and internal BOs.

In order to do this, we add an anv-specific BO flag for "external" and
use that to distinguish between buffers which may be shared with other
processes and/or display and those which are entirely internal.  That,
together with an anv_mocs_for_bo helper lets us choose the right MOCS
settings for each BO use.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99507
Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
12 files changed:
src/intel/vulkan/anv_allocator.c
src/intel/vulkan/anv_batch_chain.c
src/intel/vulkan/anv_blorp.c
src/intel/vulkan/anv_device.c
src/intel/vulkan/anv_image.c
src/intel/vulkan/anv_intel.c
src/intel/vulkan/anv_private.h
src/intel/vulkan/gen7_cmd_buffer.c
src/intel/vulkan/gen8_cmd_buffer.c
src/intel/vulkan/genX_cmd_buffer.c
src/intel/vulkan/genX_gpu_memcpy.c
src/intel/vulkan/genX_state.c