summaryrefslogtreecommitdiff
path: root/src/gallium
diff options
context:
space:
mode:
authorChia-I Wu <olvaffe@gmail.com>2014-01-10 13:46:08 +0800
committerChia-I Wu <olvaffe@gmail.com>2014-01-14 15:43:19 +0800
commit194a61cd39ce21ca8e6a57ca496bc094de629c47 (patch)
tree00ef0bd83bdc03c2348032dd223d31bb707c49f4 /src/gallium
parentc6605c51de99955c5ade7e241c38886372c1c850 (diff)
ilo: emit gen7_wa_pipe_control_wm_max_threads_stall on Haswell
Rename the workaround, as it is for 3DSTATE_PS instead of 3DSTATE_WM, and emit it on Haswell too. This does not fix any app, but an assertion failure.
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/ilo/ilo_3d_pipeline_gen7.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/gallium/drivers/ilo/ilo_3d_pipeline_gen7.c b/src/gallium/drivers/ilo/ilo_3d_pipeline_gen7.c
index 40687aeeed2..b34589277fb 100644
--- a/src/gallium/drivers/ilo/ilo_3d_pipeline_gen7.c
+++ b/src/gallium/drivers/ilo/ilo_3d_pipeline_gen7.c
@@ -161,14 +161,14 @@ gen7_wa_pipe_control_wm_depth_stall(struct ilo_3d_pipeline *p,
}
static void
-gen7_wa_pipe_control_wm_max_threads_stall(struct ilo_3d_pipeline *p)
+gen7_wa_pipe_control_ps_max_threads_stall(struct ilo_3d_pipeline *p)
{
- assert(p->dev->gen == ILO_GEN(7));
+ assert(p->dev->gen == ILO_GEN(7) || p->dev->gen == ILO_GEN(7.5));
/*
* From the Ivy Bridge PRM, volume 2 part 1, page 286:
*
- * "If this field (Maximum Number of Threads in 3DSTATE_WM) is changed
+ * "If this field (Maximum Number of Threads in 3DSTATE_PS) is changed
* between 3DPRIMITIVE commands, a PIPE_CONTROL command with Stall at
* Pixel Scoreboard set is required to be issued."
*/
@@ -480,9 +480,6 @@ gen7_pipeline_wm(struct ilo_3d_pipeline *p,
const bool cc_may_kill = (ilo->dsa->dw_alpha ||
ilo->blend->alpha_to_coverage);
- if (p->dev->gen == ILO_GEN(7) && session->hw_ctx_changed)
- gen7_wa_pipe_control_wm_max_threads_stall(p);
-
gen7_emit_3DSTATE_WM(p->dev, ilo->fs,
ilo->rasterizer, cc_may_kill, 0, p->cp);
}
@@ -513,6 +510,10 @@ gen7_pipeline_wm(struct ilo_3d_pipeline *p,
const int num_samplers = ilo->sampler[PIPE_SHADER_FRAGMENT].count;
const bool dual_blend = ilo->blend->dual_blend;
+ if ((p->dev->gen == ILO_GEN(7) || p->dev->gen == ILO_GEN(7.5)) &&
+ session->hw_ctx_changed)
+ gen7_wa_pipe_control_ps_max_threads_stall(p);
+
gen7_emit_3DSTATE_PS(p->dev, ilo->fs, num_samplers, dual_blend, p->cp);
}
@@ -740,10 +741,11 @@ gen7_rectlist_wm(struct ilo_3d_pipeline *p,
break;
}
- gen7_wa_pipe_control_wm_max_threads_stall(p);
gen7_emit_3DSTATE_WM(p->dev, NULL, NULL, false, hiz_op, p->cp);
gen7_emit_3DSTATE_CONSTANT_PS(p->dev, NULL, NULL, 0, p->cp);
+
+ gen7_wa_pipe_control_ps_max_threads_stall(p);
gen7_emit_3DSTATE_PS(p->dev, NULL, 0, false, p->cp);
}