mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 19:40:10 +01:00
anv: move vertex buffer storage to 64bit address + mocs
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Ivan Briano <ivan.briano@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33909>
This commit is contained in:
parent
d254dc4eaf
commit
3c0dcfeb0f
3 changed files with 14 additions and 17 deletions
|
|
@ -1088,15 +1088,15 @@ void anv_CmdBindVertexBuffers2(
|
|||
ANV_FROM_HANDLE(anv_buffer, buffer, pBuffers[i]);
|
||||
|
||||
if (buffer == NULL) {
|
||||
vb[firstBinding + i] = (struct anv_vertex_binding) {
|
||||
.buffer = NULL,
|
||||
};
|
||||
vb[firstBinding + i] = (struct anv_vertex_binding) { 0 };
|
||||
} else {
|
||||
vb[firstBinding + i] = (struct anv_vertex_binding) {
|
||||
.buffer = buffer,
|
||||
.offset = pOffsets[i],
|
||||
.addr = anv_address_physical(
|
||||
anv_address_add(buffer->address, pOffsets[i])),
|
||||
.size = vk_buffer_range(&buffer->vk, pOffsets[i],
|
||||
pSizes ? pSizes[i] : VK_WHOLE_SIZE),
|
||||
.mocs = anv_mocs(cmd_buffer->device, buffer->address.bo,
|
||||
ISL_SURF_USAGE_VERTEX_BUFFER_BIT),
|
||||
};
|
||||
}
|
||||
cmd_buffer->state.gfx.vb_dirty |= 1 << (firstBinding + i);
|
||||
|
|
|
|||
|
|
@ -3679,9 +3679,9 @@ anv_pipe_flush_bit_to_ds_stall_flag(enum anv_pipe_bits bits);
|
|||
VK_IMAGE_ASPECT_PLANES_BITS_ANV)
|
||||
|
||||
struct anv_vertex_binding {
|
||||
struct anv_buffer * buffer;
|
||||
VkDeviceSize offset;
|
||||
VkDeviceSize size;
|
||||
uint64_t addr;
|
||||
uint32_t mocs;
|
||||
VkDeviceSize size;
|
||||
};
|
||||
|
||||
struct anv_xfb_binding {
|
||||
|
|
|
|||
|
|
@ -681,28 +681,25 @@ cmd_buffer_flush_vertex_buffers(struct anv_cmd_buffer *cmd_buffer,
|
|||
GENX(3DSTATE_VERTEX_BUFFERS));
|
||||
uint32_t i = 0;
|
||||
u_foreach_bit(vb, vb_emit) {
|
||||
struct anv_buffer *buffer = cmd_buffer->state.vertex_bindings[vb].buffer;
|
||||
uint32_t offset = cmd_buffer->state.vertex_bindings[vb].offset;
|
||||
const struct anv_vertex_binding *binding =
|
||||
&cmd_buffer->state.vertex_bindings[vb];
|
||||
|
||||
struct GENX(VERTEX_BUFFER_STATE) state;
|
||||
if (buffer) {
|
||||
if (binding->size > 0) {
|
||||
uint32_t stride = dyn->vi_binding_strides[vb];
|
||||
UNUSED uint32_t size = cmd_buffer->state.vertex_bindings[vb].size;
|
||||
|
||||
state = (struct GENX(VERTEX_BUFFER_STATE)) {
|
||||
.VertexBufferIndex = vb,
|
||||
|
||||
.MOCS = anv_mocs(cmd_buffer->device, buffer->address.bo,
|
||||
ISL_SURF_USAGE_VERTEX_BUFFER_BIT),
|
||||
.MOCS = binding->mocs,
|
||||
.AddressModifyEnable = true,
|
||||
.BufferPitch = stride,
|
||||
.BufferStartingAddress = anv_address_add(buffer->address, offset),
|
||||
.NullVertexBuffer = offset >= buffer->vk.size,
|
||||
.BufferStartingAddress = anv_address_from_u64(binding->addr),
|
||||
#if GFX_VER >= 12
|
||||
.L3BypassDisable = true,
|
||||
#endif
|
||||
|
||||
.BufferSize = size,
|
||||
.BufferSize = binding->size,
|
||||
};
|
||||
} else {
|
||||
state = (struct GENX(VERTEX_BUFFER_STATE)) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue