mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 15:00:10 +01:00
radv: add support for VkBufferUsageFlags2CreateInfoKHR
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24392>
This commit is contained in:
parent
9089b091b2
commit
2ed52ca578
5 changed files with 41 additions and 15 deletions
|
|
@ -1099,7 +1099,7 @@ create_bview(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buffer, uns
|
|||
|
||||
static void
|
||||
create_buffer_from_image(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *surf,
|
||||
VkBufferUsageFlagBits usage, VkBuffer *buffer)
|
||||
VkBufferUsageFlagBits2KHR usage, VkBuffer *buffer)
|
||||
{
|
||||
struct radv_device *device = cmd_buffer->device;
|
||||
struct radv_device_memory mem;
|
||||
|
|
@ -1109,9 +1109,13 @@ create_buffer_from_image(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_bl
|
|||
radv_create_buffer(device,
|
||||
&(VkBufferCreateInfo){
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
|
||||
.pNext =
|
||||
&(VkBufferUsageFlags2CreateInfoKHR){
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR,
|
||||
.usage = usage,
|
||||
},
|
||||
.flags = 0,
|
||||
.size = surf->image->size,
|
||||
.usage = usage,
|
||||
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
|
||||
},
|
||||
NULL, buffer, true);
|
||||
|
|
@ -1357,7 +1361,7 @@ radv_meta_buffer_to_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, struc
|
|||
* image as a buffer with the same underlying memory. The compute
|
||||
* shader will copy all components separately using a R32 format.
|
||||
*/
|
||||
create_buffer_from_image(cmd_buffer, dst, VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, &buffer);
|
||||
create_buffer_from_image(cmd_buffer, dst, VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR, &buffer);
|
||||
|
||||
create_bview(cmd_buffer, src->buffer, src->offset, src->format, &src_view);
|
||||
create_bview_for_r32g32b32(cmd_buffer, radv_buffer_from_handle(buffer), dst_offset, dst->format, &dst_view);
|
||||
|
|
@ -1504,8 +1508,8 @@ radv_meta_image_to_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, struct
|
|||
* image as a buffer with the same underlying memory. The compute
|
||||
* shader will copy all components separately using a R32 format.
|
||||
*/
|
||||
create_buffer_from_image(cmd_buffer, src, VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, &src_buffer);
|
||||
create_buffer_from_image(cmd_buffer, dst, VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, &dst_buffer);
|
||||
create_buffer_from_image(cmd_buffer, src, VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR, &src_buffer);
|
||||
create_buffer_from_image(cmd_buffer, dst, VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR, &dst_buffer);
|
||||
|
||||
create_bview_for_r32g32b32(cmd_buffer, radv_buffer_from_handle(src_buffer), src_offset, src->format, &src_view);
|
||||
create_bview_for_r32g32b32(cmd_buffer, radv_buffer_from_handle(dst_buffer), dst_offset, dst->format, &dst_view);
|
||||
|
|
@ -1647,7 +1651,7 @@ radv_meta_clear_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, struct ra
|
|||
* image as a buffer with the same underlying memory. The compute
|
||||
* shader will clear all components separately using a R32 format.
|
||||
*/
|
||||
create_buffer_from_image(cmd_buffer, dst, VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, &buffer);
|
||||
create_buffer_from_image(cmd_buffer, dst, VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR, &buffer);
|
||||
|
||||
create_bview_for_r32g32b32(cmd_buffer, radv_buffer_from_handle(buffer), 0, dst->format, &dst_view);
|
||||
cleari_r32g32b32_bind_descriptors(cmd_buffer, &dst_view);
|
||||
|
|
|
|||
|
|
@ -412,8 +412,12 @@ radv_device_init_null_accel_struct(struct radv_device *device)
|
|||
|
||||
VkBufferCreateInfo buffer_create_info = {
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
|
||||
.pNext =
|
||||
&(VkBufferUsageFlags2CreateInfoKHR){
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR,
|
||||
.usage = VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR,
|
||||
},
|
||||
.size = size,
|
||||
.usage = VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR,
|
||||
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -167,7 +167,7 @@ radv_BindBufferMemory2(VkDevice _device, uint32_t bindInfoCount, const VkBindBuf
|
|||
|
||||
static void
|
||||
radv_get_buffer_memory_requirements(struct radv_device *device, VkDeviceSize size, VkBufferCreateFlags flags,
|
||||
VkBufferUsageFlags usage, VkMemoryRequirements2 *pMemoryRequirements)
|
||||
VkBufferUsageFlags2KHR usage, VkMemoryRequirements2 *pMemoryRequirements)
|
||||
{
|
||||
pMemoryRequirements->memoryRequirements.memoryTypeBits =
|
||||
((1u << device->physical_device->memory_properties.memoryTypeCount) - 1u) &
|
||||
|
|
@ -182,13 +182,14 @@ radv_get_buffer_memory_requirements(struct radv_device *device, VkDeviceSize siz
|
|||
* vkGetGeneratedCommandsMemoryRequirementsNV. (we have to make sure their
|
||||
* intersection is non-zero at least)
|
||||
*/
|
||||
if ((usage & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT) && device->uses_device_generated_commands)
|
||||
if ((usage & VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR) && device->uses_device_generated_commands)
|
||||
pMemoryRequirements->memoryRequirements.memoryTypeBits |= device->physical_device->memory_types_32bit;
|
||||
|
||||
/* Force 32-bit address-space for descriptor buffers usage because they are passed to shaders
|
||||
* through 32-bit pointers.
|
||||
*/
|
||||
if (usage & (VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT | VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT))
|
||||
if (usage &
|
||||
(VK_BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT | VK_BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT))
|
||||
pMemoryRequirements->memoryRequirements.memoryTypeBits = device->physical_device->memory_types_32bit;
|
||||
|
||||
if (flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
|
||||
|
|
@ -200,7 +201,7 @@ radv_get_buffer_memory_requirements(struct radv_device *device, VkDeviceSize siz
|
|||
* the root ids of instances. The hardware also needs bvh nodes to
|
||||
* be 64 byte aligned.
|
||||
*/
|
||||
if (usage & VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR)
|
||||
if (usage & VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR)
|
||||
pMemoryRequirements->memoryRequirements.alignment = MAX2(pMemoryRequirements->memoryRequirements.alignment, 64);
|
||||
|
||||
pMemoryRequirements->memoryRequirements.size = align64(size, pMemoryRequirements->memoryRequirements.alignment);
|
||||
|
|
@ -219,14 +220,23 @@ radv_get_buffer_memory_requirements(struct radv_device *device, VkDeviceSize siz
|
|||
}
|
||||
}
|
||||
|
||||
static const VkBufferUsageFlagBits2KHR
|
||||
radv_get_buffer_usage_flags(const VkBufferCreateInfo *pCreateInfo)
|
||||
{
|
||||
const VkBufferUsageFlags2CreateInfoKHR *flags2 =
|
||||
vk_find_struct_const(pCreateInfo->pNext, BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR);
|
||||
return flags2 ? flags2->usage : pCreateInfo->usage;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
radv_GetDeviceBufferMemoryRequirements(VkDevice _device, const VkDeviceBufferMemoryRequirements *pInfo,
|
||||
VkMemoryRequirements2 *pMemoryRequirements)
|
||||
{
|
||||
RADV_FROM_HANDLE(radv_device, device, _device);
|
||||
const VkBufferUsageFlagBits2KHR usage_flags = radv_get_buffer_usage_flags(pInfo->pCreateInfo);
|
||||
|
||||
radv_get_buffer_memory_requirements(device, pInfo->pCreateInfo->size, pInfo->pCreateInfo->flags,
|
||||
pInfo->pCreateInfo->usage, pMemoryRequirements);
|
||||
radv_get_buffer_memory_requirements(device, pInfo->pCreateInfo->size, pInfo->pCreateInfo->flags, usage_flags,
|
||||
pMemoryRequirements);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkDeviceAddress VKAPI_CALL
|
||||
|
|
|
|||
|
|
@ -325,8 +325,12 @@ radv_device_init_vrs_state(struct radv_device *device)
|
|||
|
||||
VkBufferCreateInfo buffer_create_info = {
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
|
||||
.pNext =
|
||||
&(VkBufferUsageFlags2CreateInfoKHR){
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR,
|
||||
.usage = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR,
|
||||
},
|
||||
.size = radv_image_from_handle(image)->planes[0].surface.meta_size,
|
||||
.usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
|
||||
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -968,8 +968,12 @@ rra_copy_context_init(struct rra_copy_context *ctx)
|
|||
|
||||
VkBufferCreateInfo buffer_create_info = {
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
|
||||
.pNext =
|
||||
&(VkBufferUsageFlags2CreateInfoKHR){
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR,
|
||||
.usage = VK_BUFFER_USAGE_2_TRANSFER_DST_BIT_KHR,
|
||||
},
|
||||
.size = max_size,
|
||||
.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT,
|
||||
};
|
||||
|
||||
result = radv_CreateBuffer(ctx->device, &buffer_create_info, NULL, &ctx->buffer);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue