Commit 9bc34d54 authored by Kenneth Graunke (semi-AFK still)'s avatar Kenneth Graunke (semi-AFK still) Committed by Juan Suárez Romero

iris: Fix iris_rebind_buffer() for VBOs with non-zero offsets.

We can't just check for the BO base address, we need to check for the
full address including any offset we may have applied.  When updating
the address, we need to include the offset again.

Fixes: 5ad0c88d ("iris: Replace buffer backing storage and rebind to update addresses.")
(cherry picked from commit 309924c3)
parent f7338bfe
......@@ -819,6 +819,8 @@ struct iris_vertex_buffer_state {
/** The resource to source vertex data from. */
struct pipe_resource *resource;
int offset;
};
struct iris_depth_buffer_state {
......@@ -2808,6 +2810,8 @@ iris_set_vertex_buffers(struct pipe_context *ctx,
pipe_resource_reference(&state->resource, buffer->buffer.resource);
struct iris_resource *res = (void *) state->resource;
state->offset = (int) buffer->buffer_offset;
if (res) {
ice->state.bound_vertex_buffers |= 1ull << (start_slot + i);
res->bind_history |= PIPE_BIND_VERTEX_BUFFER;
......@@ -5681,8 +5685,8 @@ iris_rebind_buffer(struct iris_context *ice,
STATIC_ASSERT(GENX(VERTEX_BUFFER_STATE_BufferStartingAddress_bits) == 64);
uint64_t *addr = (uint64_t *) &state->state[1];
if (*addr == old_address) {
*addr = res->bo->gtt_offset;
if (*addr == old_address + state->offset) {
*addr = res->bo->gtt_offset + state->offset;
ice->state.dirty |= IRIS_DIRTY_VERTEX_BUFFERS;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment