sna/gen3+: And restore non-CA compositing state after the CA pass
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
650c9d5ce8
commit
2f9ac4e8a1
|
|
@ -1569,11 +1569,11 @@ static void gen3_emit_composite_state(struct sna *sna,
|
|||
gen3_composite_emit_shader(sna, op, op->op);
|
||||
}
|
||||
|
||||
static void gen3_magic_ca_pass(struct sna *sna,
|
||||
static bool gen3_magic_ca_pass(struct sna *sna,
|
||||
const struct sna_composite_op *op)
|
||||
{
|
||||
if (!op->need_magic_ca_pass)
|
||||
return;
|
||||
return false;
|
||||
|
||||
DBG(("%s(%d)\n", __FUNCTION__,
|
||||
sna->render.vertex_index - sna->render.vertex_start));
|
||||
|
|
@ -1587,6 +1587,7 @@ static void gen3_magic_ca_pass(struct sna *sna,
|
|||
OUT_BATCH(sna->render.vertex_start);
|
||||
|
||||
sna->render_state.gen3.last_blend = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
static void gen3_vertex_flush(struct sna *sna)
|
||||
|
|
@ -1785,7 +1786,13 @@ static int gen3_get_rectangles__flush(struct sna *sna,
|
|||
|
||||
if (sna->render.vertex_offset) {
|
||||
gen3_vertex_flush(sna);
|
||||
gen3_magic_ca_pass(sna, op);
|
||||
if (gen3_magic_ca_pass(sna, op)) {
|
||||
OUT_BATCH(_3DSTATE_LOAD_STATE_IMMEDIATE_1 | I1_LOAD_S(6) | 0);
|
||||
OUT_BATCH(gen3_get_blend_cntl(op->op,
|
||||
op->has_component_alpha,
|
||||
op->dst.format));
|
||||
gen3_composite_emit_shader(sna, op, op->op);
|
||||
}
|
||||
}
|
||||
|
||||
return gen3_vertex_finish(sna);
|
||||
|
|
|
|||
|
|
@ -207,13 +207,13 @@ gen4_choose_composite_kernel(int op, bool has_mask, bool is_ca, bool is_affine)
|
|||
return base + !is_affine;
|
||||
}
|
||||
|
||||
static void gen4_magic_ca_pass(struct sna *sna,
|
||||
static bool gen4_magic_ca_pass(struct sna *sna,
|
||||
const struct sna_composite_op *op)
|
||||
{
|
||||
struct gen4_render_state *state = &sna->render_state.gen4;
|
||||
|
||||
if (!op->need_magic_ca_pass)
|
||||
return;
|
||||
return false;
|
||||
|
||||
assert(sna->render.vertex_index > sna->render.vertex_start);
|
||||
|
||||
|
|
@ -237,6 +237,7 @@ static void gen4_magic_ca_pass(struct sna *sna,
|
|||
OUT_BATCH(0); /* index buffer offset, ignored */
|
||||
|
||||
state->last_primitive = sna->kgem.nbatch;
|
||||
return true;
|
||||
}
|
||||
|
||||
static uint32_t gen4_get_blend(int op,
|
||||
|
|
@ -615,7 +616,9 @@ static int gen4_get_rectangles__flush(struct sna *sna,
|
|||
|
||||
if (sna->render.vertex_offset) {
|
||||
gen4_vertex_flush(sna);
|
||||
gen4_magic_ca_pass(sna, op);
|
||||
if (gen4_magic_ca_pass(sna, op))
|
||||
gen4_emit_pipelined_pointers(sna, op, op->op,
|
||||
op->u.gen4.wm_kernel);
|
||||
}
|
||||
|
||||
return gen4_vertex_finish(sna);
|
||||
|
|
|
|||
|
|
@ -199,13 +199,13 @@ gen5_choose_composite_kernel(int op, bool has_mask, bool is_ca, bool is_affine)
|
|||
return base + !is_affine;
|
||||
}
|
||||
|
||||
static void gen5_magic_ca_pass(struct sna *sna,
|
||||
static bool gen5_magic_ca_pass(struct sna *sna,
|
||||
const struct sna_composite_op *op)
|
||||
{
|
||||
struct gen5_render_state *state = &sna->render_state.gen5;
|
||||
|
||||
if (!op->need_magic_ca_pass)
|
||||
return;
|
||||
return false;
|
||||
|
||||
assert(sna->render.vertex_index > sna->render.vertex_start);
|
||||
|
||||
|
|
@ -230,6 +230,7 @@ static void gen5_magic_ca_pass(struct sna *sna,
|
|||
OUT_BATCH(0); /* index buffer offset, ignored */
|
||||
|
||||
state->last_primitive = sna->kgem.nbatch;
|
||||
return true;
|
||||
}
|
||||
|
||||
static uint32_t gen5_get_blend(int op,
|
||||
|
|
@ -601,7 +602,9 @@ static int gen5_get_rectangles__flush(struct sna *sna,
|
|||
|
||||
if (sna->render.vertex_offset) {
|
||||
gen4_vertex_flush(sna);
|
||||
gen5_magic_ca_pass(sna, op);
|
||||
if (gen5_magic_ca_pass(sna, op))
|
||||
gen5_emit_pipelined_pointers(sna, op, op->op,
|
||||
op->u.gen5.wm_kernel);
|
||||
}
|
||||
|
||||
return gen4_vertex_finish(sna);
|
||||
|
|
|
|||
|
|
@ -886,13 +886,13 @@ gen6_emit_state(struct sna *sna,
|
|||
sna->render_state.gen6.first_state_packet = false;
|
||||
}
|
||||
|
||||
static void gen6_magic_ca_pass(struct sna *sna,
|
||||
static bool gen6_magic_ca_pass(struct sna *sna,
|
||||
const struct sna_composite_op *op)
|
||||
{
|
||||
struct gen6_render_state *state = &sna->render_state.gen6;
|
||||
|
||||
if (!op->need_magic_ca_pass)
|
||||
return;
|
||||
return false;
|
||||
|
||||
DBG(("%s: CA fixup (%d -> %d)\n", __FUNCTION__,
|
||||
sna->render.vertex_start, sna->render.vertex_index));
|
||||
|
|
@ -918,6 +918,7 @@ static void gen6_magic_ca_pass(struct sna *sna,
|
|||
OUT_BATCH(0); /* index buffer offset, ignored */
|
||||
|
||||
state->last_primitive = sna->kgem.nbatch;
|
||||
return true;
|
||||
}
|
||||
|
||||
typedef struct gen6_surface_state_padded {
|
||||
|
|
@ -1147,7 +1148,13 @@ static int gen6_get_rectangles__flush(struct sna *sna,
|
|||
|
||||
if (sna->render.vertex_offset) {
|
||||
gen4_vertex_flush(sna);
|
||||
gen6_magic_ca_pass(sna, op);
|
||||
if (gen6_magic_ca_pass(sna, op)) {
|
||||
gen6_emit_flush(sna);
|
||||
gen6_emit_cc(sna, GEN6_BLEND(op->u.gen6.flags));
|
||||
gen6_emit_wm(sna,
|
||||
GEN6_KERNEL(op->u.gen6.flags),
|
||||
GEN6_VERTEX(op->u.gen6.flags) >> 2);
|
||||
}
|
||||
}
|
||||
|
||||
return gen4_vertex_finish(sna);
|
||||
|
|
|
|||
|
|
@ -1034,13 +1034,13 @@ gen7_emit_state(struct sna *sna,
|
|||
sna->render_state.gen7.emit_flush = GEN7_READS_DST(op->u.gen7.flags);
|
||||
}
|
||||
|
||||
static void gen7_magic_ca_pass(struct sna *sna,
|
||||
static bool gen7_magic_ca_pass(struct sna *sna,
|
||||
const struct sna_composite_op *op)
|
||||
{
|
||||
struct gen7_render_state *state = &sna->render_state.gen7;
|
||||
|
||||
if (!op->need_magic_ca_pass)
|
||||
return;
|
||||
return true;
|
||||
|
||||
DBG(("%s: CA fixup (%d -> %d)\n", __FUNCTION__,
|
||||
sna->render.vertex_start, sna->render.vertex_index));
|
||||
|
|
@ -1064,6 +1064,7 @@ static void gen7_magic_ca_pass(struct sna *sna,
|
|||
OUT_BATCH(0); /* index buffer offset, ignored */
|
||||
|
||||
state->last_primitive = sna->kgem.nbatch;
|
||||
return false;
|
||||
}
|
||||
|
||||
static void null_create(struct sna_static_stream *stream)
|
||||
|
|
@ -1274,7 +1275,11 @@ static int gen7_get_rectangles__flush(struct sna *sna,
|
|||
|
||||
if (sna->render.vertex_offset) {
|
||||
gen4_vertex_flush(sna);
|
||||
gen7_magic_ca_pass(sna, op);
|
||||
if (gen7_magic_ca_pass(sna, op)) {
|
||||
gen7_emit_pipe_invalidate(sna);
|
||||
gen7_emit_cc(sna, GEN7_BLEND(op->u.gen7.flags));
|
||||
gen7_emit_wm(sna, GEN7_KERNEL(op->u.gen7.flags));
|
||||
}
|
||||
}
|
||||
|
||||
return gen4_vertex_finish(sna);
|
||||
|
|
|
|||
Loading…
Reference in New Issue