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:

committed by
Marge Bot

parent
77f4885ccb
commit
aa31d38bcf
@@ -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);
|
||||
|
@@ -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,
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user