anv: Use the base vk_buffer struct
This mostly gets us the vk_buffer_range() helper but may be useful in the future. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16607>
This commit is contained in:
@@ -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;
|
||||
|
@@ -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:
|
||||
*
|
||||
|
@@ -1220,7 +1220,7 @@ 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],
|
||||
vk_buffer_range(&buffer->vk, pOffsets[i],
|
||||
pSizes ? pSizes[i] : VK_WHOLE_SIZE);
|
||||
}
|
||||
}
|
||||
|
@@ -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) :
|
||||
|
@@ -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(
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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;
|
||||
};
|
||||
|
||||
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)
|
||||
|
@@ -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 {
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user