anv: Emit a dummy MEDIA_VFE_STATE before switching from GPGPU to 3D
There is an object-level preemption workaround which requires this. However, even without object-level preemption, we seem to have issues with geometry flickering when 3D and compute are combined in the same batch and this appears to fix it. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109630 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111267 Cc: mesa-stable@lists.freedesktop.org Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -3827,6 +3827,25 @@ genX(flush_pipeline_select)(struct anv_cmd_buffer *cmd_buffer,
|
||||
anv_batch_emit(&cmd_buffer->batch, GENX(3DSTATE_CC_STATE_POINTERS), t);
|
||||
#endif
|
||||
|
||||
#if GEN_GEN == 9
|
||||
if (pipeline == _3D) {
|
||||
/* There is a mid-object preemption workaround which requires you to
|
||||
* re-emit MEDIA_VFE_STATE after switching from GPGPU to 3D. However,
|
||||
* even without preemption, we have issues with geometry flickering when
|
||||
* GPGPU and 3D are back-to-back and this seems to fix it. We don't
|
||||
* really know why.
|
||||
*/
|
||||
const uint32_t subslices =
|
||||
MAX2(cmd_buffer->device->instance->physicalDevice.subslice_total, 1);
|
||||
anv_batch_emit(&cmd_buffer->batch, GENX(MEDIA_VFE_STATE), vfe) {
|
||||
vfe.MaximumNumberofThreads =
|
||||
devinfo->max_cs_threads * subslices - 1;
|
||||
vfe.NumberofURBEntries = 2;
|
||||
vfe.URBEntryAllocationSize = 2;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* From "BXML » GT » MI » vol1a GPU Overview » [Instruction]
|
||||
* PIPELINE_SELECT [DevBWR+]":
|
||||
*
|
||||
|
Reference in New Issue
Block a user