diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2017-10-31 00:56:24 -0700 |
---|---|---|
committer | Andres Gomez <agomez@igalia.com> | 2017-11-21 18:16:45 +0200 |
commit | dfa57d01e4ffc3707da192c17488330773f9a6c9 (patch) | |
tree | 84e0f5d26cd4f8e867487e329f45520bdb74969a | |
parent | 7d61bf508508f382b5811f91ab07673af8119e17 (diff) | |
download | mesa-dfa57d01e4ffc3707da192c17488330773f9a6c9.tar.gz |
i965: properly initialize brw->cs.base.stage to MESA_SHADER_COMPUTE
This has a bit of a surprising effect:
For the render pipeline, the upload_sampler_state_table atom emits
3DSTATE_BINDING_TABLE_POINTERS_XS. It tries to avoid this for compute:
if (GEN_GEN >= 7 && stage_state->stage != MESA_SHADER_COMPUTE) {
/* Emit a 3DSTATE_SAMPLER_STATE_POINTERS_XS packet. */
genX(emit_sampler_state_pointers_xs)(brw, stage_state);
} ...
However, we were failing to initialize brw->cs.base.stage, so it was
left as 0 (MESA_SHADER_VERTEX), causing this condition to break. We
then emitted 3DSTATE_SAMPLER_STATE_POINTERS_VS in GPGPU mode, when
trying to upload CS samplers. Nothing good can come of this.
Found by inspection while debugging a GPU hang. Jordan believes this
helps the Deus Ex: Mankind Divided benchmark mode's stability when
running with shader cache.
Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
(cherry picked from commit a16dc04ad51c32e5c7d136e4dd6273d983385d3f)
[Andres Gomez: resolve trivial conflicts]
Signed-off-by: Andres Gomez <agomez@igalia.com>
Conflicts:
src/mesa/drivers/dri/i965/brw_context.c
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 1ca74387426..36ff3dced36 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -865,6 +865,7 @@ brwCreateContext(gl_api api, brw->tes.base.stage = MESA_SHADER_TESS_EVAL; brw->gs.base.stage = MESA_SHADER_GEOMETRY; brw->wm.base.stage = MESA_SHADER_FRAGMENT; + brw->cs.base.stage = MESA_SHADER_COMPUTE; if (brw->gen >= 8) { gen8_init_vtable_surface_functions(brw); brw->vtbl.emit_depth_stencil_hiz = gen8_emit_depth_stencil_hiz; |