mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 02:10:11 +01:00
ilo: 3DSTATE_INDEX_BUFFER may be wrongly skipped
In finalize_index_buffer(), when the current index buffer was destroyed due to u_upload_data(), it may happen that the new index buffer is at the same address as the old one. Comparing the pointers to the two buffers could fail to work, and 3DSTATE_INDEX_BUFFER would be incorrectly skipped. Holding a reference to the current index buffer before calling u_upload_data() should fix the problem.
This commit is contained in:
parent
637e6a0aa8
commit
b2f79a3823
1 changed files with 5 additions and 1 deletions
|
|
@ -128,13 +128,15 @@ finalize_constant_buffers(struct ilo_context *ilo)
|
|||
static void
|
||||
finalize_index_buffer(struct ilo_context *ilo)
|
||||
{
|
||||
const struct pipe_resource *current_hw_res = ilo->ib.hw_resource;
|
||||
const bool need_upload = (ilo->draw->indexed &&
|
||||
(ilo->ib.user_buffer || ilo->ib.offset % ilo->ib.index_size));
|
||||
struct pipe_resource *current_hw_res = NULL;
|
||||
|
||||
if (!(ilo->dirty & ILO_DIRTY_IB) && !need_upload)
|
||||
return;
|
||||
|
||||
pipe_resource_reference(¤t_hw_res, ilo->ib.hw_resource);
|
||||
|
||||
if (need_upload) {
|
||||
const unsigned offset = ilo->ib.index_size * ilo->draw->start;
|
||||
const unsigned size = ilo->ib.index_size * ilo->draw->count;
|
||||
|
|
@ -175,6 +177,8 @@ finalize_index_buffer(struct ilo_context *ilo)
|
|||
ilo->dirty &= ~ILO_DIRTY_IB;
|
||||
else
|
||||
ilo->ib.hw_index_size = ilo->ib.index_size;
|
||||
|
||||
pipe_resource_reference(¤t_hw_res, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue