mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 06:20:09 +01:00
anv: Add support for batch buffers in anv_slab_bo in Xe KMD
Because of the ANV_BO_ALLOC_CAPTURE flag, batch buffers were not allowed to use memory pool. So to workaround that here adding a new anv_bo_slab_heap heap for cached+coherent+capture buffers with the main goal to get batch buffer to memory pool but other buffers will as well. For now that will only work in Xe KMD as i915 requires more changes to support it. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Signed-off-by: José Roberto de Souza <jose.souza@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33558>
This commit is contained in:
parent
a0a600ca5f
commit
39bb51ab27
3 changed files with 21 additions and 7 deletions
|
|
@ -75,10 +75,7 @@ static VkResult
|
|||
anv_device_init_trivial_batch(struct anv_device *device)
|
||||
{
|
||||
VkResult result = anv_device_alloc_bo(device, "trivial-batch", 4096,
|
||||
ANV_BO_ALLOC_MAPPED |
|
||||
ANV_BO_ALLOC_HOST_COHERENT |
|
||||
ANV_BO_ALLOC_INTERNAL |
|
||||
ANV_BO_ALLOC_CAPTURE,
|
||||
ANV_BO_ALLOC_BATCH_BUFFER_INTERNAL_FLAGS,
|
||||
0 /* explicit_address */,
|
||||
&device->trivial_batch_bo);
|
||||
ANV_DMR_BO_ALLOC(&device->vk.base, device->trivial_batch_bo, result);
|
||||
|
|
@ -519,9 +516,7 @@ VkResult anv_CreateDevice(
|
|||
goto fail_queue_cond;
|
||||
|
||||
anv_bo_pool_init(&device->batch_bo_pool, device, "batch",
|
||||
ANV_BO_ALLOC_MAPPED |
|
||||
ANV_BO_ALLOC_HOST_CACHED_COHERENT |
|
||||
ANV_BO_ALLOC_CAPTURE);
|
||||
ANV_BO_ALLOC_BATCH_BUFFER_FLAGS);
|
||||
if (device->vk.enabled_extensions.KHR_acceleration_structure) {
|
||||
anv_bo_pool_init(&device->bvh_bo_pool, device, "bvh build",
|
||||
0 /* alloc_flags */);
|
||||
|
|
|
|||
|
|
@ -475,6 +475,15 @@ enum anv_bo_alloc_flags {
|
|||
ANV_BO_ALLOC_HOST_CACHED_COHERENT | \
|
||||
ANV_BO_ALLOC_DESCRIPTOR_POOL)
|
||||
|
||||
#define ANV_BO_ALLOC_BATCH_BUFFER_FLAGS (ANV_BO_ALLOC_MAPPED | \
|
||||
ANV_BO_ALLOC_HOST_CACHED_COHERENT | \
|
||||
ANV_BO_ALLOC_CAPTURE)
|
||||
|
||||
#define ANV_BO_ALLOC_BATCH_BUFFER_INTERNAL_FLAGS (ANV_BO_ALLOC_MAPPED | \
|
||||
ANV_BO_ALLOC_HOST_COHERENT | \
|
||||
ANV_BO_ALLOC_INTERNAL | \
|
||||
ANV_BO_ALLOC_CAPTURE)
|
||||
|
||||
struct anv_bo {
|
||||
const char *name;
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include "anv_slab_bo.h"
|
||||
|
||||
enum anv_bo_slab_heap {
|
||||
ANV_BO_SLAB_HEAP_CACHED_COHERENT_CAPTURE, /* main usage is batch buffers but other buffers also matches */
|
||||
ANV_BO_SLAB_HEAP_DYNAMIC_VISIBLE_POOL,
|
||||
ANV_BO_SLAB_HEAP_DESCRIPTOR_POOL,
|
||||
ANV_BO_SLAB_HEAP_SMEM_CACHED_COHERENT,
|
||||
|
|
@ -48,6 +49,12 @@ anv_bo_alloc_flags_to_slab_heap(struct anv_device *device,
|
|||
ANV_BO_ALLOC_IMPLICIT_WRITE);
|
||||
}
|
||||
|
||||
/* TODO: add i915 support */
|
||||
if ((alloc_flags == ANV_BO_ALLOC_BATCH_BUFFER_FLAGS ||
|
||||
alloc_flags == ANV_BO_ALLOC_BATCH_BUFFER_INTERNAL_FLAGS) &&
|
||||
(device->info->kmd_type == INTEL_KMD_TYPE_XE))
|
||||
return ANV_BO_SLAB_HEAP_CACHED_COHERENT_CAPTURE;
|
||||
|
||||
if (alloc_flags == ANV_BO_ALLOC_DYNAMIC_VISIBLE_POOL_FLAGS)
|
||||
return ANV_BO_SLAB_HEAP_DYNAMIC_VISIBLE_POOL;
|
||||
|
||||
|
|
@ -233,6 +240,9 @@ anv_slab_alloc(void *priv,
|
|||
break;
|
||||
case ANV_BO_SLAB_HEAP_LMEM_ONLY:
|
||||
break;
|
||||
case ANV_BO_SLAB_HEAP_CACHED_COHERENT_CAPTURE:
|
||||
alloc_flags |= ANV_BO_ALLOC_BATCH_BUFFER_FLAGS;
|
||||
break;
|
||||
case ANV_BO_SLAB_HEAP_DYNAMIC_VISIBLE_POOL:
|
||||
alloc_flags |= ANV_BO_ALLOC_DYNAMIC_VISIBLE_POOL_FLAGS;
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue