diff options
-rw-r--r-- | src/sna/gen6_render.c | 8 | ||||
-rw-r--r-- | src/sna/gen7_render.c | 8 | ||||
-rw-r--r-- | src/sna/kgem.c | 4 | ||||
-rw-r--r-- | src/sna/kgem.h | 2 | ||||
-rw-r--r-- | src/sna/sna.h | 5 | ||||
-rw-r--r-- | src/sna/sna_render.c | 7 |
6 files changed, 27 insertions, 7 deletions
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c index 8d3c0319..86ebf9d9 100644 --- a/src/sna/gen6_render.c +++ b/src/sna/gen6_render.c @@ -3886,6 +3886,13 @@ gen6_render_context_switch(struct kgem *kgem, kgem->ring = new_mode; } +static void +gen6_render_retire(struct kgem *kgem) +{ + if (kgem->ring && (kgem->has_semaphores || !kgem->need_retire)) + kgem->ring = kgem->mode; +} + static void gen6_render_reset(struct sna *sna) { sna->render_state.gen6.needs_invariant = TRUE; @@ -3958,6 +3965,7 @@ Bool gen6_render_init(struct sna *sna) return FALSE; sna->kgem.context_switch = gen6_render_context_switch; + sna->kgem.retire = gen6_render_retire; sna->render.composite = gen6_render_composite; #if !NO_COMPOSITE_SPANS diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c index 75caa6fc..e73629d5 100644 --- a/src/sna/gen7_render.c +++ b/src/sna/gen7_render.c @@ -3848,6 +3848,13 @@ gen7_render_context_switch(struct kgem *kgem, kgem->ring = new_mode; } +static void +gen7_render_retire(struct kgem *kgem) +{ + if (kgem->ring && (kgem->has_semaphores || !kgem->need_retire)) + kgem->ring = kgem->mode; +} + static void gen7_render_reset(struct sna *sna) { sna->render_state.gen7.needs_invariant = TRUE; @@ -3920,6 +3927,7 @@ Bool gen7_render_init(struct sna *sna) return FALSE; sna->kgem.context_switch = gen7_render_context_switch; + sna->kgem.retire = gen7_render_retire; sna->render.composite = gen7_render_composite; #if !NO_COMPOSITE_SPANS diff --git a/src/sna/kgem.c b/src/sna/kgem.c index 01521a9a..1866fcd6 100644 --- a/src/sna/kgem.c +++ b/src/sna/kgem.c @@ -1125,10 +1125,10 @@ bool kgem_retire(struct kgem *kgem) } kgem->need_retire = !list_is_empty(&kgem->requests); - if (kgem->ring && (kgem->has_semaphores || !kgem->need_retire)) - kgem->ring = kgem->mode; DBG(("%s -- need_retire=%d\n", __FUNCTION__, kgem->need_retire)); + kgem->retire(kgem); + return retired; } diff --git a/src/sna/kgem.h b/src/sna/kgem.h index 621e3cd5..92b7cd6b 100644 --- a/src/sna/kgem.h +++ b/src/sna/kgem.h @@ -158,6 +158,8 @@ struct kgem { uint32_t partial_buffer_size; void (*context_switch)(struct kgem *kgem, int new_mode); + void (*retire)(struct kgem *kgem); + uint32_t batch[4*1024]; struct drm_i915_gem_exec_object2 exec[256]; struct drm_i915_gem_relocation_entry reloc[384]; diff --git a/src/sna/sna.h b/src/sna/sna.h index 2f79ac63..247cb46c 100644 --- a/src/sna/sna.h +++ b/src/sna/sna.h @@ -374,11 +374,6 @@ void sna_dri_close(struct sna *sna, ScreenPtr pScreen); extern Bool sna_crtc_on(xf86CrtcPtr crtc); int sna_crtc_to_pipe(xf86CrtcPtr crtc); -/* sna_render.c */ -void sna_kgem_reset(struct kgem *kgem); -void sna_kgem_flush(struct kgem *kgem); -void sna_kgem_context_switch(struct kgem *kgem, int new_mode); - CARD32 sna_format_for_depth(int depth); CARD32 sna_render_format_for_depth(int depth); diff --git a/src/sna/sna_render.c b/src/sna/sna_render.c index a9a170a1..7b6661ef 100644 --- a/src/sna/sna_render.c +++ b/src/sna/sna_render.c @@ -244,6 +244,12 @@ no_render_context_switch(struct kgem *kgem, } static void +no_render_retire(struct kgem *kgem) +{ + (void)kgem; +} + +static void no_render_fini(struct sna *sna) { (void)sna; @@ -273,6 +279,7 @@ void no_render_init(struct sna *sna) render->fini = no_render_fini; sna->kgem.context_switch = no_render_context_switch; + sna->kgem.retire = no_render_retire; if (sna->kgem.gen >= 60) sna->kgem.ring = KGEM_BLT; } |