Lines Matching defs:sna

31 #include "sna.h"
33 #define NO_RING_SWITCH(sna) (!(sna)->kgem.has_semaphores)
36 static inline bool is_uncached(struct sna *sna,
39 return bo->io || (bo->scanout && !sna->kgem.has_wt);
42 inline static bool can_switch_to_blt(struct sna *sna,
46 if (sna->kgem.ring != KGEM_RENDER)
55 if (bo && !kgem_bo_can_blt(&sna->kgem, bo))
58 if (sna->render_state.gt < 2)
64 if (NO_RING_SWITCH(sna))
70 return kgem_ring_is_idle(&sna->kgem, KGEM_BLT);
81 static int prefer_blt_bo(struct sna *sna,
93 if (sna->flags & SNA_POWERSAVE)
97 if (sna->render_state.gt > 1)
106 if (sna->render_state.gt > 2)
110 if (sna->render_state.gt < 2)
113 return dst->tiling == I915_TILING_NONE || is_uncached(sna, dst);
116 inline static bool force_blt_ring(struct sna *sna, struct kgem_bo *bo)
118 if (sna->kgem.mode == KGEM_RENDER)
121 if (NO_RING_SWITCH(sna))
122 return sna->kgem.ring == KGEM_BLT;
127 if (sna->flags & SNA_POWERSAVE)
130 if (sna->render_state.gt < 2)
137 prefer_blt_ring(struct sna *sna, struct kgem_bo *bo, unsigned flags)
142 assert(!force_blt_ring(sna, bo));
143 assert(!kgem_bo_is_render(bo) || NO_RING_SWITCH(sna));
148 return can_switch_to_blt(sna, bo, flags);
152 prefer_render_ring(struct sna *sna, struct kgem_bo *bo)
154 if (sna->kgem.ring == KGEM_RENDER)
157 if (sna->kgem.ring != KGEM_NONE && NO_RING_SWITCH(sna))
163 if (sna->flags & SNA_POWERSAVE)
166 if (!prefer_blt_bo(sna, NULL, bo))
169 return !kgem_ring_is_idle(&sna->kgem, KGEM_RENDER);
173 prefer_blt_composite(struct sna *sna, struct sna_composite_op *tmp)
182 if (force_blt_ring(sna, tmp->dst.bo))
185 if (prefer_render_ring(sna, tmp->dst.bo))
188 if (!prefer_blt_ring(sna, tmp->dst.bo, 0))
191 return prefer_blt_bo(sna, tmp->src.bo, tmp->dst.bo);
195 prefer_blt_fill(struct sna *sna, struct kgem_bo *bo, unsigned flags)
203 if (force_blt_ring(sna, bo))
207 if (prefer_render_ring(sna, bo))
210 if (!prefer_blt_ring(sna, bo, 0))
213 if (can_switch_to_blt(sna, bo, COPY_LAST))
217 return prefer_blt_bo(sna, NULL, bo);