mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
radv: add a write-combining host-local memory type
Add the new memory type between the two device-local types. This makes the list of supported memory types look like this: 1) DEVICE_LOCAL | | | 2) | HOST_VISIBLE | HOST_COHERENT | 3) DEVICE_LOCAL | HOST_VISIBLE | HOST_COHERENT | 4) | HOST_VISIBLE | HOST_COHERENT | HOST_CACHED With this order a client that searches for a HOST_VISIBLE and HOST_COHERENT memory type using the algorithm described in section 10.2 of the Vulkan specification (revision 32) will find the host- local memory type first. A client that requires the memory type to be HOST_VISIBLE and HOST_COHERENT, but not DEVICE_LOCAL is most likely searching for a memory type suitable for staging buffers / images. Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
44760c100c
commit
c9675b4e17
1 changed files with 13 additions and 4 deletions
|
|
@ -522,19 +522,24 @@ void radv_GetPhysicalDeviceMemoryProperties(
|
|||
{
|
||||
RADV_FROM_HANDLE(radv_physical_device, physical_device, physicalDevice);
|
||||
|
||||
pMemoryProperties->memoryTypeCount = 3;
|
||||
pMemoryProperties->memoryTypeCount = 4;
|
||||
pMemoryProperties->memoryTypes[0] = (VkMemoryType) {
|
||||
.propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
||||
.heapIndex = 0,
|
||||
};
|
||||
pMemoryProperties->memoryTypes[1] = (VkMemoryType) {
|
||||
.propertyFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
|
||||
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
|
||||
.heapIndex = 1,
|
||||
};
|
||||
pMemoryProperties->memoryTypes[2] = (VkMemoryType) {
|
||||
.propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
|
||||
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
|
||||
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
|
||||
.heapIndex = 0,
|
||||
};
|
||||
pMemoryProperties->memoryTypes[2] = (VkMemoryType) {
|
||||
.propertyFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT|
|
||||
pMemoryProperties->memoryTypes[3] = (VkMemoryType) {
|
||||
.propertyFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
|
||||
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
|
||||
VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
|
||||
.heapIndex = 1,
|
||||
|
|
@ -854,7 +859,7 @@ VkResult radv_AllocateMemory(
|
|||
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
uint64_t alloc_size = align_u64(pAllocateInfo->allocationSize, 4096);
|
||||
if (pAllocateInfo->memoryTypeIndex == 2)
|
||||
if (pAllocateInfo->memoryTypeIndex == 1 || pAllocateInfo->memoryTypeIndex == 3)
|
||||
domain = RADEON_DOMAIN_GTT;
|
||||
else
|
||||
domain = RADEON_DOMAIN_VRAM;
|
||||
|
|
@ -863,6 +868,10 @@ VkResult radv_AllocateMemory(
|
|||
flags |= RADEON_FLAG_NO_CPU_ACCESS;
|
||||
else
|
||||
flags |= RADEON_FLAG_CPU_ACCESS;
|
||||
|
||||
if (pAllocateInfo->memoryTypeIndex == 1)
|
||||
flags |= RADEON_FLAG_GTT_WC;
|
||||
|
||||
mem->bo = device->ws->buffer_create(device->ws, alloc_size, 32768,
|
||||
domain, flags);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue