anv: Allocate BO in appropriate region
Signed-off-by: Sagar Ghuge <sagar.ghuge@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5599>
This commit is contained in:
parent
3f8eca7f82
commit
6352371ff6
|
@ -1649,7 +1649,29 @@ anv_device_alloc_bo(struct anv_device *device,
|
||||||
ccs_size = align_u64(DIV_ROUND_UP(size, INTEL_AUX_MAP_GFX12_CCS_SCALE), 4096);
|
ccs_size = align_u64(DIV_ROUND_UP(size, INTEL_AUX_MAP_GFX12_CCS_SCALE), 4096);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t gem_handle = anv_gem_create(device, size + ccs_size);
|
uint32_t gem_handle;
|
||||||
|
|
||||||
|
/* If we have vram size, we have multiple memory regions and should choose
|
||||||
|
* one of them.
|
||||||
|
*/
|
||||||
|
if (device->physical->vram.size > 0) {
|
||||||
|
struct drm_i915_gem_memory_class_instance regions[2];
|
||||||
|
uint32_t nregions = 0;
|
||||||
|
|
||||||
|
if (alloc_flags & ANV_BO_ALLOC_LOCAL_MEM) {
|
||||||
|
/* For vram allocation, still use system memory as a fallback. */
|
||||||
|
regions[nregions++] = device->physical->vram.region;
|
||||||
|
regions[nregions++] = device->physical->sys.region;
|
||||||
|
} else {
|
||||||
|
regions[nregions++] = device->physical->sys.region;
|
||||||
|
}
|
||||||
|
|
||||||
|
gem_handle = anv_gem_create_regions(device, size + ccs_size,
|
||||||
|
nregions, regions);
|
||||||
|
} else {
|
||||||
|
gem_handle = anv_gem_create(device, size + ccs_size);
|
||||||
|
}
|
||||||
|
|
||||||
if (gem_handle == 0)
|
if (gem_handle == 0)
|
||||||
return vk_error(VK_ERROR_OUT_OF_DEVICE_MEMORY);
|
return vk_error(VK_ERROR_OUT_OF_DEVICE_MEMORY);
|
||||||
|
|
||||||
|
|
|
@ -4021,6 +4021,12 @@ VkResult anv_AllocateMemory(
|
||||||
goto success;
|
goto success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set ALLOC_LOCAL_MEM flag if heap has device local bit set and requested
|
||||||
|
* memory property flag has DEVICE_LOCAL_BIT set.
|
||||||
|
*/
|
||||||
|
if (mem_type->propertyFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
|
||||||
|
alloc_flags |= ANV_BO_ALLOC_LOCAL_MEM;
|
||||||
|
|
||||||
/* Regular allocate (not importing memory). */
|
/* Regular allocate (not importing memory). */
|
||||||
|
|
||||||
result = anv_device_alloc_bo(device, "user", pAllocateInfo->allocationSize,
|
result = anv_device_alloc_bo(device, "user", pAllocateInfo->allocationSize,
|
||||||
|
|
|
@ -1404,6 +1404,9 @@ enum anv_bo_alloc_flags {
|
||||||
|
|
||||||
/** This buffer has implicit CCS data attached to it */
|
/** This buffer has implicit CCS data attached to it */
|
||||||
ANV_BO_ALLOC_IMPLICIT_CCS = (1 << 9),
|
ANV_BO_ALLOC_IMPLICIT_CCS = (1 << 9),
|
||||||
|
|
||||||
|
/** This buffer is allocated from local memory */
|
||||||
|
ANV_BO_ALLOC_LOCAL_MEM = (1 << 10),
|
||||||
};
|
};
|
||||||
|
|
||||||
VkResult anv_device_alloc_bo(struct anv_device *device,
|
VkResult anv_device_alloc_bo(struct anv_device *device,
|
||||||
|
|
Loading…
Reference in New Issue