v3dv: pass alignment to v3dv_buffer_init

Although for any buffer created by the user, or any API that can be
called by the user (like GetDeviceBufferMemoryRequirements) the
alignment is V3D_NON_COHERENT_ATOM_SIZE, there are internal uses of a
buffer that could require a fine-grained alignment (like when used as
a alias for a image, that has different alignment requirements).

Note that an alternative would have created a
v3dv_buffer_init_with_alignment (or similar name), but this option
seemed easier.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19950>
This commit is contained in:
Alejandro Piñeiro
2023-01-11 14:04:26 +01:00
committed by Marge Bot
parent 77f4885ccb
commit aa31d38bcf
3 changed files with 10 additions and 7 deletions

View File

@@ -2699,12 +2699,13 @@ v3dv_BindImageMemory2(VkDevice _device,
void
v3dv_buffer_init(struct v3dv_device *device,
const VkBufferCreateInfo *pCreateInfo,
struct v3dv_buffer *buffer)
const VkBufferCreateInfo *pCreateInfo,
struct v3dv_buffer *buffer,
uint32_t alignment)
{
buffer->size = pCreateInfo->size;
buffer->usage = pCreateInfo->usage;
buffer->alignment = V3D_NON_COHERENT_ATOM_SIZE;
buffer->alignment = alignment;
}
static void
@@ -2751,7 +2752,7 @@ v3dv_GetDeviceBufferMemoryRequirementsKHR(
V3DV_FROM_HANDLE(v3dv_device, device, _device);
struct v3dv_buffer buffer = { 0 };
v3dv_buffer_init(device, pInfo->pCreateInfo, &buffer);
v3dv_buffer_init(device, pInfo->pCreateInfo, &buffer, V3D_NON_COHERENT_ATOM_SIZE);
get_buffer_memory_requirements(&buffer, pMemoryRequirements);
}
@@ -2806,7 +2807,7 @@ v3dv_CreateBuffer(VkDevice _device,
if (buffer == NULL)
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
v3dv_buffer_init(device, pCreateInfo, buffer);
v3dv_buffer_init(device, pCreateInfo, buffer, V3D_NON_COHERENT_ATOM_SIZE);
/* Limit allocations to 32-bit */
const VkDeviceSize aligned_size = align64(buffer->size, buffer->alignment);

View File

@@ -1246,7 +1246,8 @@ copy_image_linear_texel_buffer(struct v3dv_cmd_buffer *cmd_buffer,
.usage = VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT,
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
};
v3dv_buffer_init(cmd_buffer->device, &buf_create_info, &src_buffer);
v3dv_buffer_init(cmd_buffer->device, &buf_create_info, &src_buffer,
src->alignment);
const VkBindBufferMemoryInfo buf_bind_info = {
.sType = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO,

View File

@@ -736,7 +736,8 @@ struct v3dv_buffer {
void
v3dv_buffer_init(struct v3dv_device *device,
const VkBufferCreateInfo *pCreateInfo,
struct v3dv_buffer *buffer);
struct v3dv_buffer *buffer,
uint32_t alignment);
void
v3dv_buffer_bind_memory(const VkBindBufferMemoryInfo *info);