mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-14 18:20:17 +01:00
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:5ad0c88dbe("iris: Replace buffer backing storage and rebind to update addresses.") (cherry picked from commit309924c3c9)
This commit is contained in:
parent
f7338bfe1f
commit
9bc34d54db
1 changed files with 6 additions and 2 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue