anv: move GetBufferMemoryRequirement with other buffer functions
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13199>
This commit is contained in:

committed by
Marge Bot

parent
7677f1d09e
commit
8072cc8f20
@@ -4076,60 +4076,6 @@ VkResult anv_InvalidateMappedMemoryRanges(
|
|||||||
return VK_SUCCESS;
|
return VK_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void anv_GetBufferMemoryRequirements2(
|
|
||||||
VkDevice _device,
|
|
||||||
const VkBufferMemoryRequirementsInfo2* pInfo,
|
|
||||||
VkMemoryRequirements2* pMemoryRequirements)
|
|
||||||
{
|
|
||||||
ANV_FROM_HANDLE(anv_device, device, _device);
|
|
||||||
ANV_FROM_HANDLE(anv_buffer, buffer, pInfo->buffer);
|
|
||||||
|
|
||||||
/* The Vulkan spec (git aaed022) says:
|
|
||||||
*
|
|
||||||
* memoryTypeBits is a bitfield and contains one bit set for every
|
|
||||||
* supported memory type for the resource. The bit `1<<i` is set if and
|
|
||||||
* only if the memory type `i` in the VkPhysicalDeviceMemoryProperties
|
|
||||||
* structure for the physical device is supported.
|
|
||||||
*/
|
|
||||||
uint32_t memory_types = (1ull << device->physical->memory.type_count) - 1;
|
|
||||||
|
|
||||||
/* Base alignment requirement of a cache line */
|
|
||||||
uint32_t alignment = 16;
|
|
||||||
|
|
||||||
if (buffer->usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
|
|
||||||
alignment = MAX2(alignment, ANV_UBO_ALIGNMENT);
|
|
||||||
|
|
||||||
pMemoryRequirements->memoryRequirements.size = buffer->size;
|
|
||||||
pMemoryRequirements->memoryRequirements.alignment = alignment;
|
|
||||||
|
|
||||||
/* Storage and Uniform buffers should have their size aligned to
|
|
||||||
* 32-bits to avoid boundary checks when last DWord is not complete.
|
|
||||||
* This would ensure that not internal padding would be needed for
|
|
||||||
* 16-bit types.
|
|
||||||
*/
|
|
||||||
if (device->robust_buffer_access &&
|
|
||||||
(buffer->usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT ||
|
|
||||||
buffer->usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT))
|
|
||||||
pMemoryRequirements->memoryRequirements.size = align_u64(buffer->size, 4);
|
|
||||||
|
|
||||||
pMemoryRequirements->memoryRequirements.memoryTypeBits = memory_types;
|
|
||||||
|
|
||||||
vk_foreach_struct(ext, pMemoryRequirements->pNext) {
|
|
||||||
switch (ext->sType) {
|
|
||||||
case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: {
|
|
||||||
VkMemoryDedicatedRequirements *requirements = (void *)ext;
|
|
||||||
requirements->prefersDedicatedAllocation = false;
|
|
||||||
requirements->requiresDedicatedAllocation = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
anv_debug_ignored_stype(ext->sType);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void anv_GetDeviceMemoryCommitment(
|
void anv_GetDeviceMemoryCommitment(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
VkDeviceMemory memory,
|
VkDeviceMemory memory,
|
||||||
@@ -4262,6 +4208,60 @@ VkResult anv_ResetEvent(
|
|||||||
|
|
||||||
// Buffer functions
|
// Buffer functions
|
||||||
|
|
||||||
|
void anv_GetBufferMemoryRequirements2(
|
||||||
|
VkDevice _device,
|
||||||
|
const VkBufferMemoryRequirementsInfo2* pInfo,
|
||||||
|
VkMemoryRequirements2* pMemoryRequirements)
|
||||||
|
{
|
||||||
|
ANV_FROM_HANDLE(anv_device, device, _device);
|
||||||
|
ANV_FROM_HANDLE(anv_buffer, buffer, pInfo->buffer);
|
||||||
|
|
||||||
|
/* The Vulkan spec (git aaed022) says:
|
||||||
|
*
|
||||||
|
* memoryTypeBits is a bitfield and contains one bit set for every
|
||||||
|
* supported memory type for the resource. The bit `1<<i` is set if and
|
||||||
|
* only if the memory type `i` in the VkPhysicalDeviceMemoryProperties
|
||||||
|
* structure for the physical device is supported.
|
||||||
|
*/
|
||||||
|
uint32_t memory_types = (1ull << device->physical->memory.type_count) - 1;
|
||||||
|
|
||||||
|
/* Base alignment requirement of a cache line */
|
||||||
|
uint32_t alignment = 16;
|
||||||
|
|
||||||
|
if (buffer->usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
|
||||||
|
alignment = MAX2(alignment, ANV_UBO_ALIGNMENT);
|
||||||
|
|
||||||
|
pMemoryRequirements->memoryRequirements.size = buffer->size;
|
||||||
|
pMemoryRequirements->memoryRequirements.alignment = alignment;
|
||||||
|
|
||||||
|
/* Storage and Uniform buffers should have their size aligned to
|
||||||
|
* 32-bits to avoid boundary checks when last DWord is not complete.
|
||||||
|
* This would ensure that not internal padding would be needed for
|
||||||
|
* 16-bit types.
|
||||||
|
*/
|
||||||
|
if (device->robust_buffer_access &&
|
||||||
|
(buffer->usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT ||
|
||||||
|
buffer->usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT))
|
||||||
|
pMemoryRequirements->memoryRequirements.size = align_u64(buffer->size, 4);
|
||||||
|
|
||||||
|
pMemoryRequirements->memoryRequirements.memoryTypeBits = memory_types;
|
||||||
|
|
||||||
|
vk_foreach_struct(ext, pMemoryRequirements->pNext) {
|
||||||
|
switch (ext->sType) {
|
||||||
|
case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: {
|
||||||
|
VkMemoryDedicatedRequirements *requirements = (void *)ext;
|
||||||
|
requirements->prefersDedicatedAllocation = false;
|
||||||
|
requirements->requiresDedicatedAllocation = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
anv_debug_ignored_stype(ext->sType);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
VkResult anv_CreateBuffer(
|
VkResult anv_CreateBuffer(
|
||||||
VkDevice _device,
|
VkDevice _device,
|
||||||
const VkBufferCreateInfo* pCreateInfo,
|
const VkBufferCreateInfo* pCreateInfo,
|
||||||
|
Reference in New Issue
Block a user