diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index 3a6715f4048..80967191866 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -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; } }