Module: Mesa Branch: master Commit: 309924c3c927b6f167d9306ecd7270076c7dc3ea URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=309924c3c927b6f167d9306ecd7270076c7dc3ea
Author: Kenneth Graunke <[email protected]> Date: Mon Sep 23 20:37:39 2019 -0700 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: 5ad0c88dbe3 ("iris: Replace buffer backing storage and rebind to update addresses.") --- src/gallium/drivers/iris/iris_state.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index 113e2b4e9a5..3278a2857b7 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -900,6 +900,8 @@ struct iris_vertex_buffer_state { /** The resource to source vertex data from. */ struct pipe_resource *resource; + + int offset; }; struct iris_depth_buffer_state { @@ -2928,6 +2930,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; @@ -6001,8 +6005,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; } } _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
