diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index c6c07e35414..a50eb957f15 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -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 */); diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 3d8e458a1f6..7c3270a4df6 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -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; diff --git a/src/intel/vulkan/anv_slab_bo.c b/src/intel/vulkan/anv_slab_bo.c index 07b9cdf9f07..b39ca70a3c0 100644 --- a/src/intel/vulkan/anv_slab_bo.c +++ b/src/intel/vulkan/anv_slab_bo.c @@ -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;