diff --git a/src/intel/vulkan/anv_android.c b/src/intel/vulkan/anv_android.c index c287c248ef9..f101d99680d 100644 --- a/src/intel/vulkan/anv_android.c +++ b/src/intel/vulkan/anv_android.c @@ -439,7 +439,7 @@ anv_create_ahw_memory(VkDevice device_h, usage = anv_ahw_usage_from_vk_usage(image->vk.create_flags, image->vk.usage); } else if (dedicated_info && dedicated_info->buffer) { ANV_FROM_HANDLE(anv_buffer, buffer, dedicated_info->buffer); - w = buffer->size; + w = buffer->vk.size; format = AHARDWAREBUFFER_FORMAT_BLOB; usage = AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN | AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN; diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c index b9743d9b47f..9e9e7d617f1 100644 --- a/src/intel/vulkan/anv_blorp.c +++ b/src/intel/vulkan/anv_blorp.c @@ -947,7 +947,7 @@ void anv_CmdFillBuffer( struct blorp_batch batch; anv_blorp_batch_init(cmd_buffer, &batch, 0); - fillSize = anv_buffer_get_range(dst_buffer, dstOffset, fillSize); + fillSize = vk_buffer_range(&dst_buffer->vk, dstOffset, fillSize); /* From the Vulkan spec: * diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c index 80efd6af21b..c181c036be4 100644 --- a/src/intel/vulkan/anv_cmd_buffer.c +++ b/src/intel/vulkan/anv_cmd_buffer.c @@ -1220,8 +1220,8 @@ void anv_CmdBindTransformFeedbackBuffersEXT( xfb[firstBinding + i].buffer = buffer; xfb[firstBinding + i].offset = pOffsets[i]; xfb[firstBinding + i].size = - anv_buffer_get_range(buffer, pOffsets[i], - pSizes ? pSizes[i] : VK_WHOLE_SIZE); + vk_buffer_range(&buffer->vk, pOffsets[i], + pSizes ? pSizes[i] : VK_WHOLE_SIZE); } } } diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c index b72351c4cba..64a0f899c3f 100644 --- a/src/intel/vulkan/anv_descriptor_set.c +++ b/src/intel/vulkan/anv_descriptor_set.c @@ -1602,7 +1602,7 @@ anv_descriptor_set_write_buffer(struct anv_device *device, } struct anv_address bind_addr = anv_address_add(buffer->address, offset); - uint64_t bind_range = anv_buffer_get_range(buffer, offset, range); + uint64_t bind_range = vk_buffer_range(&buffer->vk, offset, range); enum anv_descriptor_data data = bind_layout->type == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE ? anv_descriptor_data_for_type(device->physical, type) : diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index fe7e120b6c1..d2934e364de 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -4265,7 +4265,7 @@ anv_bind_buffer_memory(const VkBindBufferMemoryInfo *pBindInfo) if (mem) { assert(pBindInfo->memoryOffset < mem->bo->size); - assert(mem->bo->size - pBindInfo->memoryOffset >= buffer->size); + assert(mem->bo->size - pBindInfo->memoryOffset >= buffer->vk.size); buffer->address = (struct anv_address) { .bo = mem->bo, .offset = pBindInfo->memoryOffset, @@ -4440,8 +4440,8 @@ void anv_GetBufferMemoryRequirements2( ANV_FROM_HANDLE(anv_buffer, buffer, pInfo->buffer); anv_get_buffer_memory_requirements(device, - buffer->size, - buffer->usage, + buffer->vk.size, + buffer->vk.usage, pMemoryRequirements); } @@ -4475,16 +4475,11 @@ VkResult anv_CreateBuffer( if (pCreateInfo->size > device->physical->gtt_size) return vk_error(device, VK_ERROR_OUT_OF_DEVICE_MEMORY); - assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO); - - buffer = vk_object_alloc(&device->vk, pAllocator, sizeof(*buffer), - VK_OBJECT_TYPE_BUFFER); + buffer = vk_buffer_create(&device->vk, pCreateInfo, + pAllocator, sizeof(*buffer)); if (buffer == NULL) return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); - buffer->create_flags = pCreateInfo->flags; - buffer->size = pCreateInfo->size; - buffer->usage = pCreateInfo->usage; buffer->address = ANV_NULL_ADDRESS; *pBuffer = anv_buffer_to_handle(buffer); @@ -4503,7 +4498,7 @@ void anv_DestroyBuffer( if (!buffer) return; - vk_object_free(&device->vk, pAllocator, buffer); + vk_buffer_destroy(&device->vk, pAllocator, &buffer->vk); } VkDeviceAddress anv_GetBufferDeviceAddress( diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index f16cd45c80c..d905784a73f 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -2743,13 +2743,13 @@ anv_CreateBufferView(VkDevice _device, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_TILING_LINEAR); const uint32_t format_bs = isl_format_get_layout(view->format)->bpb / 8; - view->range = anv_buffer_get_range(buffer, pCreateInfo->offset, + view->range = vk_buffer_range(&buffer->vk, pCreateInfo->offset, pCreateInfo->range); view->range = align_down_npot_u32(view->range, format_bs); view->address = anv_address_add(buffer->address, pCreateInfo->offset); - if (buffer->usage & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT) { + if (buffer->vk.usage & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT) { view->surface_state = alloc_surface_state(device); anv_fill_buffer_surface_state(device, view->surface_state, @@ -2759,7 +2759,7 @@ anv_CreateBufferView(VkDevice _device, view->surface_state = (struct anv_state){ 0 }; } - if (buffer->usage & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) { + if (buffer->vk.usage & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) { view->storage_surface_state = alloc_surface_state(device); view->lowered_storage_surface_state = alloc_surface_state(device); diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index d486fa6cfc8..4ee0e1ca331 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -68,6 +68,7 @@ #include "util/vma.h" #include "util/xmlconfig.h" #include "vk_alloc.h" +#include "vk_buffer.h" #include "vk_command_buffer.h" #include "vk_command_pool.h" #include "vk_debug_report.h" @@ -2190,31 +2191,12 @@ struct anv_pipeline_layout { }; struct anv_buffer { - struct vk_object_base base; - - struct anv_device * device; - VkDeviceSize size; - - VkBufferCreateFlags create_flags; - VkBufferUsageFlags usage; + struct vk_buffer vk; /* Set when bound */ - struct anv_address address; + struct anv_address address; }; -static inline uint64_t -anv_buffer_get_range(struct anv_buffer *buffer, uint64_t offset, uint64_t range) -{ - assert(offset <= buffer->size); - if (range == VK_WHOLE_SIZE) { - return buffer->size - offset; - } else { - assert(range + offset >= range); - assert(range + offset <= buffer->size); - return range; - } -} - enum anv_cmd_dirty_bits { ANV_CMD_DIRTY_DYNAMIC_VIEWPORT = 1 << 0, /* VK_DYNAMIC_STATE_VIEWPORT */ ANV_CMD_DIRTY_DYNAMIC_SCISSOR = 1 << 1, /* VK_DYNAMIC_STATE_SCISSOR */ @@ -4520,7 +4502,7 @@ VK_DEFINE_HANDLE_CASTS(anv_queue, vk.base, VkQueue, VK_OBJECT_TYPE_QUEUE) VK_DEFINE_NONDISP_HANDLE_CASTS(anv_acceleration_structure, base, VkAccelerationStructureKHR, VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR) -VK_DEFINE_NONDISP_HANDLE_CASTS(anv_buffer, base, VkBuffer, +VK_DEFINE_NONDISP_HANDLE_CASTS(anv_buffer, vk.base, VkBuffer, VK_OBJECT_TYPE_BUFFER) VK_DEFINE_NONDISP_HANDLE_CASTS(anv_buffer_view, base, VkBufferView, VK_OBJECT_TYPE_BUFFER_VIEW) diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 3d249d09aef..a783500d990 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -2784,9 +2784,9 @@ emit_binding_table(struct anv_cmd_buffer *cmd_buffer, push->dynamic_offsets[binding->dynamic_offset_index]; uint64_t offset = desc->offset + dynamic_offset; /* Clamp to the buffer size */ - offset = MIN2(offset, desc->buffer->size); + offset = MIN2(offset, desc->buffer->vk.size); /* Clamp the range to the buffer size */ - uint32_t range = MIN2(desc->range, desc->buffer->size - offset); + uint32_t range = MIN2(desc->range, desc->buffer->vk.size - offset); /* Align the range for consistency */ if (desc->type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC) @@ -3133,9 +3133,9 @@ get_push_range_bound_size(struct anv_cmd_buffer *cmd_buffer, push->dynamic_offsets[range->dynamic_offset_index]; uint64_t offset = desc->offset + dynamic_offset; /* Clamp to the buffer size */ - offset = MIN2(offset, desc->buffer->size); + offset = MIN2(offset, desc->buffer->vk.size); /* Clamp the range to the buffer size */ - uint32_t bound_range = MIN2(desc->range, desc->buffer->size - offset); + uint32_t bound_range = MIN2(desc->range, desc->buffer->vk.size - offset); /* Align the range for consistency */ bound_range = align_u32(bound_range, ANV_UBO_ALIGNMENT); @@ -3843,7 +3843,7 @@ genX(cmd_buffer_flush_state)(struct anv_cmd_buffer *cmd_buffer) * elements of pname:pBuffers[i] plus pname:pOffsets[i]." */ UNUSED uint32_t size = dynamic_size ? - cmd_buffer->state.vertex_bindings[vb].size : buffer->size - offset; + cmd_buffer->state.vertex_bindings[vb].size : buffer->vk.size - offset; state = (struct GENX(VERTEX_BUFFER_STATE)) { .VertexBufferIndex = vb, @@ -3857,7 +3857,7 @@ genX(cmd_buffer_flush_state)(struct anv_cmd_buffer *cmd_buffer) .AddressModifyEnable = true, .BufferPitch = stride, .BufferStartingAddress = anv_address_add(buffer->address, offset), - .NullVertexBuffer = offset >= buffer->size, + .NullVertexBuffer = offset >= buffer->vk.size, #if GFX_VER >= 12 .L3BypassDisable = true, #endif @@ -3870,7 +3870,7 @@ genX(cmd_buffer_flush_state)(struct anv_cmd_buffer *cmd_buffer) * * https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7439 */ - .EndAddress = anv_address_add(buffer->address, buffer->size - 1), + .EndAddress = anv_address_add(buffer->address, buffer->vk.size - 1), #endif }; } else { diff --git a/src/intel/vulkan/gfx7_cmd_buffer.c b/src/intel/vulkan/gfx7_cmd_buffer.c index b09ffff239a..dc9a3cd94de 100644 --- a/src/intel/vulkan/gfx7_cmd_buffer.c +++ b/src/intel/vulkan/gfx7_cmd_buffer.c @@ -269,7 +269,7 @@ genX(cmd_buffer_flush_dynamic_state)(struct anv_cmd_buffer *cmd_buffer) ib.BufferStartingAddress = anv_address_add(buffer->address, offset); ib.BufferEndingAddress = anv_address_add(buffer->address, - buffer->size); + buffer->vk.size); } } diff --git a/src/intel/vulkan/gfx8_cmd_buffer.c b/src/intel/vulkan/gfx8_cmd_buffer.c index c16893381df..953b93dc0c3 100644 --- a/src/intel/vulkan/gfx8_cmd_buffer.c +++ b/src/intel/vulkan/gfx8_cmd_buffer.c @@ -761,7 +761,8 @@ void genX(CmdBindIndexBuffer)( ib.L3BypassDisable = true; #endif ib.BufferStartingAddress = anv_address_add(buffer->address, offset); - ib.BufferSize = buffer->size - offset; + ib.BufferSize = vk_buffer_range(&buffer->vk, offset, + VK_WHOLE_SIZE); } cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_INDEX_BUFFER;