On Tuesday, August 21, 2018 6:57:50 PM PDT Jason Ekstrand wrote: > I have no idea if I'm correct about what's going wrong or if this is the > correct fix. However, in my multiple weeks of banging my head on this > hang, a VUE reference counting bug seems to match all the symptoms and > it definitely fixes the hang. > > Cc: mesa-sta...@lists.freedesktop.org > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107280 > --- > src/intel/vulkan/genX_pipeline.c | 23 ++++++++++++++++++++++- > 1 file changed, 22 insertions(+), 1 deletion(-) > > diff --git a/src/intel/vulkan/genX_pipeline.c > b/src/intel/vulkan/genX_pipeline.c > index 03a68ab0bf3..197c1ef4d8a 100644 > --- a/src/intel/vulkan/genX_pipeline.c > +++ b/src/intel/vulkan/genX_pipeline.c > @@ -1141,7 +1141,28 @@ emit_3dstate_vs(struct anv_pipeline *pipeline) > vs.IllegalOpcodeExceptionEnable = false; > vs.SoftwareExceptionEnable = false; > vs.MaximumNumberofThreads = devinfo->max_vs_threads - 1; > - vs.VertexCacheDisable = false; > + > + if (GEN_GEN == 9 && devinfo->gt == 4 && > + anv_pipeline_has_stage(pipeline, MESA_SHADER_TESS_EVAL)) { > + /* On Sky Lake GT4, we have experienced some hangs related to the VS > + * cache and tessellation. It is unknown exactly what is happening > + * but the Haswell docs for the "VS Reference Count Full Force Miss > + * Enable" field of the "Thread Mode" register refer to a HSW bug in > + * which the VUE handle reference count would overflow resulting in > + * internal reference counting bugs. My (Jason's) best guess is > that > + * this bug cropped back up on SKL GT4 when we suddenly had more > + * threads in play than any previous gen9 hardware. > + * > + * What we do know for sure is that setting this bit when > + * tessellation shaders are in use fixes a GPU hang in Batman: > Arkham > + * City when playing with DXVK > (https://bugs.freedesktop.org/107280). > + * Disabling the vertex cache with tessellation shaders should only > + * have a minor performance impact as the tessellation shaders are > + * likely generating and processing far more geometry than the > vertex > + * stage. > + */ > + vs.VertexCacheDisable = true; > + } > > vs.VertexURBEntryReadLength = vs_prog_data->base.urb_read_length; > vs.VertexURBEntryReadOffset = 0; >
I can't really ask for any more due diligence to be done here. Nobody understands it, and that's probably the best we can do. Acked-by: Kenneth Graunke <kenn...@whitecape.org>
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev