i965: include draw_params/derived_draw_params for VF cache workaround

These buffers are using VB slots and should be included in the
workaround decision.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Fixes: a363bb2cd0 ("i965: Allocate VMA in userspace for full-PPGTT systems.")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109072
This commit is contained in:
Lionel Landwerlin 2019-01-03 16:17:04 +00:00
parent da634a4acb
commit 92b7407090

View file

@ -538,9 +538,8 @@ vf_invalidate_for_vb_48bit_transitions(struct brw_context *brw)
{
#if GEN_GEN >= 8 && GEN_GEN < 11
bool need_invalidate = false;
unsigned i;
for (i = 0; i < brw->vb.nr_buffers; i++) {
for (unsigned i = 0; i < brw->vb.nr_buffers; i++) {
uint16_t high_bits = pinned_bo_high_bits(brw->vb.buffers[i].bo);
if (high_bits != brw->vb.last_bo_high_bits[i]) {
@ -549,9 +548,23 @@ vf_invalidate_for_vb_48bit_transitions(struct brw_context *brw)
}
}
/* Don't bother with draw parameter buffers - those are generated by
* the driver so we can select a consistent memory zone.
*/
if (brw->draw.draw_params_bo) {
uint16_t high_bits = pinned_bo_high_bits(brw->draw.draw_params_bo);
if (brw->vb.last_bo_high_bits[brw->vb.nr_buffers] != high_bits) {
need_invalidate = true;
brw->vb.last_bo_high_bits[brw->vb.nr_buffers] = high_bits;
}
}
if (brw->draw.derived_draw_params_bo) {
uint16_t high_bits = pinned_bo_high_bits(brw->draw.derived_draw_params_bo);
if (brw->vb.last_bo_high_bits[brw->vb.nr_buffers + 1] != high_bits) {
need_invalidate = true;
brw->vb.last_bo_high_bits[brw->vb.nr_buffers + 1] = high_bits;
}
}
if (need_invalidate) {
brw_emit_pipe_control_flush(brw, PIPE_CONTROL_VF_CACHE_INVALIDATE);