mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
i965: re-emit index buffer state on a reset option change.
Seems like we forget to update the index buffer (ib) status and IndexedDrawCutIndexEnable or CutIndexEnable flag is left unchanged it leads to ignoring of glEnable/glDisable functions for GL_PRIMITIVE_RESTART in some cases. The index buffer (ib) status should be re-emmited after the reset option change to avoid some unexpected behavior. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109451 Cc: <mesa-stable@lists.freedesktop.org> Signed-off-by: Andrii Simiklit <andrii.simiklit@globallogic.com> Signed-off-by: Andrii Simiklit <asimiklit.work@gmail.com>
This commit is contained in:
parent
d6337b59f6
commit
f4f4ec941e
3 changed files with 13 additions and 1 deletions
|
|
@ -1006,6 +1006,9 @@ struct brw_context
|
|||
|
||||
/* High bits of the last seen index buffer address (for workarounds). */
|
||||
uint16_t last_bo_high_bits;
|
||||
|
||||
/* Used to understand is GPU state of primitive restart is up to date */
|
||||
bool enable_cut_index;
|
||||
} ib;
|
||||
|
||||
/* Active vertex program:
|
||||
|
|
|
|||
|
|
@ -776,6 +776,14 @@ brw_upload_indices(struct brw_context *brw)
|
|||
brw->ib.index_size = index_buffer->index_size;
|
||||
brw->ctx.NewDriverState |= BRW_NEW_INDEX_BUFFER;
|
||||
}
|
||||
|
||||
/* We need to re-emit an index buffer state each time
|
||||
* when cut index flag is changed
|
||||
*/
|
||||
if (brw->prim_restart.enable_cut_index != brw->ib.enable_cut_index) {
|
||||
brw->ib.enable_cut_index = brw->prim_restart.enable_cut_index;
|
||||
brw->ctx.NewDriverState |= BRW_NEW_INDEX_BUFFER;
|
||||
}
|
||||
}
|
||||
|
||||
const struct brw_tracked_state brw_indices = {
|
||||
|
|
|
|||
|
|
@ -998,7 +998,8 @@ genX(emit_index_buffer)(struct brw_context *brw)
|
|||
|
||||
brw_batch_emit(brw, GENX(3DSTATE_INDEX_BUFFER), ib) {
|
||||
#if GEN_GEN < 8 && !GEN_IS_HASWELL
|
||||
ib.CutIndexEnable = brw->prim_restart.enable_cut_index;
|
||||
assert(brw->ib.enable_cut_index == brw->prim_restart.enable_cut_index);
|
||||
ib.CutIndexEnable = brw->ib.enable_cut_index;
|
||||
#endif
|
||||
ib.IndexFormat = brw_get_index_type(index_buffer->index_size);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue