anv,iris: Set 3DSTATE_SF::DerefBlockSize to per-poly on Gen12+

According to the BSpec, this should prevent hangs when using shaders
with large URB entries.  A more precise fix can be done but it requires
re-arranging URB setup.

Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
(cherry picked from commit e1bdb127b6)
This commit is contained in:
Jason Ekstrand 2020-01-16 17:59:43 -06:00 committed by Dylan Baker
parent 6c0b18c5d1
commit ea7ab69455
4 changed files with 14 additions and 2 deletions

View file

@ -238,7 +238,7 @@
"description": "anv,iris: Set 3DSTATE_SF::DerefBlockSize to per-poly on Gen12+",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"master_sha": null,
"because_sha": null
},

View file

@ -1706,6 +1706,10 @@ iris_create_rasterizer_state(struct pipe_context *ctx,
sf.PointWidthSource = state->point_size_per_vertex ? Vertex : State;
sf.PointWidth = state->point_size;
#if GEN_GEN >= 12
sf.DerefBlockSize = PerPolyDerefMode;
#endif
if (state->flatshade_first) {
sf.TriangleFanProvokingVertexSelect = 1;
} else {

View file

@ -671,7 +671,11 @@ blorp_emit_sf_config(struct blorp_batch *batch,
#if GEN_GEN >= 8
blorp_emit(batch, GENX(3DSTATE_SF), sf);
blorp_emit(batch, GENX(3DSTATE_SF), sf) {
#if GEN_GEN >= 12
sf.DerefBlockSize = PerPolyDerefMode;
#endif
}
blorp_emit(batch, GENX(3DSTATE_RASTER), raster) {
raster.CullMode = CULLMODE_NONE;

View file

@ -591,6 +591,10 @@ emit_rs_state(struct anv_pipeline *pipeline,
sf.LineStippleEnable = line_info && line_info->stippledLineEnable;
#endif
#if GEN_GEN >= 12
sf.DerefBlockSize = PerPolyDerefMode;
#endif
const struct brw_vue_prog_data *last_vue_prog_data =
anv_pipeline_get_last_vue_prog_data(pipeline);