VK_FROM_HANDLE(panvk_buffer, buffer, pInfo->buffer);
const uint64_t align = 64;
- const uint64_t size = align64(buffer->size, align);
+ const uint64_t size = align64(buffer->vk.size, align);
pMemoryRequirements->memoryRequirements.memoryTypeBits = 1;
pMemoryRequirements->memoryRequirements.alignment = align;
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->size = pCreateInfo->size;
- buffer->usage = pCreateInfo->usage;
- buffer->flags = pCreateInfo->flags;
-
*pBuffer = panvk_buffer_to_handle(buffer);
return VK_SUCCESS;
if (!buffer)
return;
- vk_object_free(&device->vk, pAllocator, buffer);
+ vk_buffer_destroy(&device->vk, pAllocator, &buffer->vk);
}
VkResult
#include "util/list.h"
#include "util/macros.h"
#include "vk_alloc.h"
+#include "vk_buffer.h"
#include "vk_command_buffer.h"
#include "vk_command_pool.h"
#include "vk_device.h"
};
struct panvk_buffer {
- struct vk_object_base base;
- VkDeviceSize size;
-
- VkBufferUsageFlags usage;
- VkBufferCreateFlags flags;
+ struct vk_buffer vk;
struct panfrost_bo *bo;
VkDeviceSize bo_offset;
if (buffer->bo == NULL)
return 0;
- 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;
- }
+ return vk_buffer_range(&buffer->vk, offset, range);
}
enum panvk_dynamic_state_bits {
VK_DEFINE_HANDLE_CASTS(panvk_queue, vk.base, VkQueue, VK_OBJECT_TYPE_QUEUE)
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_cmd_pool, vk.base, VkCommandPool, VK_OBJECT_TYPE_COMMAND_POOL)
-VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_buffer, base, VkBuffer, VK_OBJECT_TYPE_BUFFER)
+VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_buffer, vk.base, VkBuffer, VK_OBJECT_TYPE_BUFFER)
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_buffer_view, base, VkBufferView, VK_OBJECT_TYPE_BUFFER_VIEW)
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_pool, base, VkDescriptorPool, VK_OBJECT_TYPE_DESCRIPTOR_POOL)
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_set, base, VkDescriptorSet, VK_OBJECT_TYPE_DESCRIPTOR_SET)
assert(!(address & 63));
- if (buffer->usage & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT) {
+ if (buffer->vk.usage & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT) {
unsigned bo_size =
PAN_ARCH <= 5 ? (pan_size(SURFACE) + pan_size(TEXTURE)) :
pan_size(SURFACE_WITH_STRIDE);
}
}
- if (buffer->usage & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) {
+ if (buffer->vk.usage & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) {
uint8_t *attrib_buf = (uint8_t *)view->descs.img_attrib_buf;
pan_pack(attrib_buf, ATTRIBUTE_BUFFER, cfg) {