137
139
list_del(intel->flush_pixmaps.next);
142
static void intel_emit_post_sync_nonzero_flush(ScrnInfoPtr scrn)
144
intel_screen_private *intel = intel_get_screen_private(scrn);
146
/* keep this entire sequence of 3 PIPE_CONTROL cmds in one batch to
147
* avoid upsetting the gpu. */
149
OUT_BATCH(BRW_PIPE_CONTROL | (4 - 2));
150
OUT_BATCH(BRW_PIPE_CONTROL_CS_STALL |
151
BRW_PIPE_CONTROL_STALL_AT_SCOREBOARD);
152
OUT_BATCH(0); /* address */
153
OUT_BATCH(0); /* write data */
155
OUT_BATCH(BRW_PIPE_CONTROL | (4 - 2));
156
OUT_BATCH(BRW_PIPE_CONTROL_WRITE_QWORD);
157
OUT_RELOC(intel->wa_scratch_bo,
158
I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, 0);
159
OUT_BATCH(0); /* write data */
161
/* now finally the _real flush */
162
OUT_BATCH(BRW_PIPE_CONTROL | (4 - 2));
163
OUT_BATCH(BRW_PIPE_CONTROL_WC_FLUSH |
164
BRW_PIPE_CONTROL_TC_FLUSH |
165
BRW_PIPE_CONTROL_NOWRITE);
166
OUT_BATCH(0); /* write address */
167
OUT_BATCH(0); /* write data */
140
171
void intel_batch_emit_flush(ScrnInfoPtr scrn)
142
173
intel_screen_private *intel = intel_get_screen_private(scrn);
158
OUT_BATCH(BRW_PIPE_CONTROL | (4 - 2));
159
OUT_BATCH(BRW_PIPE_CONTROL_WC_FLUSH |
160
BRW_PIPE_CONTROL_TC_FLUSH |
161
BRW_PIPE_CONTROL_NOWRITE);
162
OUT_BATCH(0); /* write address */
163
OUT_BATCH(0); /* write data */
188
if ((INTEL_INFO(intel)->gen == 60)) {
189
/* HW-Workaround for Sandybdrige */
190
intel_emit_post_sync_nonzero_flush(scrn);
193
OUT_BATCH(BRW_PIPE_CONTROL | (4 - 2));
194
OUT_BATCH(BRW_PIPE_CONTROL_WC_FLUSH |
195
BRW_PIPE_CONTROL_TC_FLUSH |
196
BRW_PIPE_CONTROL_NOWRITE);
197
OUT_BATCH(0); /* write address */
198
OUT_BATCH(0); /* write data */
167
203
flags = MI_WRITE_DIRTY_STATE | MI_INVALIDATE_MAP_CACHE;