xf86-video-intel: src/sna/sna_dri2.c
Chris Wilson
ickle at kemper.freedesktop.org
Wed May 21 03:55:16 PDT 2014
src/sna/sna_dri2.c | 93 +++++++++++++++++++++++------------------------------
1 file changed, 41 insertions(+), 52 deletions(-)
New commits:
commit bf4475d29de589a0d0e71dfb895d19a635f8cc3e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed May 21 11:31:29 2014 +0100
sna/dri2: Tidy conditional use of XORG_CAN_TRIPLE_BUFFER
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c
index 7f7411e..e7cb26e 100644
--- a/src/sna/sna_dri2.c
+++ b/src/sna/sna_dri2.c
@@ -57,6 +57,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#if DRI2INFOREC_VERSION < 6
#define XORG_CAN_TRIPLE_BUFFER 0
+#define swap_limit(d, l) false
#else
#define XORG_CAN_TRIPLE_BUFFER 1
static Bool
@@ -64,6 +65,13 @@ sna_dri2_swap_limit_validate(DrawablePtr draw, int swap_limit)
{
return swap_limit >= 1;
}
+
+static bool swap_limit(DrawablePtr draw, int limit)
+{
+ DBG(("%s: setting swap limit to %d\n", __FUNCTION__, limit));
+ DRI2SwapLimit(draw, limit);
+ return true;
+}
#endif
#if DRI2INFOREC_VERSION < 10
@@ -226,8 +234,8 @@ sna_dri2_pixmap_update_bo(struct sna *sna, PixmapPtr pixmap)
static DRI2Buffer2Ptr
sna_dri2_create_buffer(DrawablePtr draw,
- unsigned int attachment,
- unsigned int format)
+ unsigned int attachment,
+ unsigned int format)
{
struct sna *sna = to_sna_from_drawable(draw);
DRI2Buffer2Ptr buffer;
@@ -604,9 +612,9 @@ static void sna_dri2_select_mode(struct sna *sna, struct kgem_bo *dst, struct kg
static void
sna_dri2_copy_fallback(struct sna *sna, int bpp,
- struct kgem_bo *src_bo, int sx, int sy,
- struct kgem_bo *dst_bo, int dx, int dy,
- const BoxRec *box, int n)
+ struct kgem_bo *src_bo, int sx, int sy,
+ struct kgem_bo *dst_bo, int dx, int dy,
+ const BoxRec *box, int n)
{
void *dst = kgem_bo_map__gtt(&sna->kgem, dst_bo);
void *src = kgem_bo_map__gtt(&sna->kgem, src_bo);
@@ -818,9 +826,9 @@ __sna_dri2_copy_region(struct sna *sna, DrawablePtr draw, RegionPtr region,
static void
sna_dri2_copy_region(DrawablePtr draw,
- RegionPtr region,
- DRI2BufferPtr dst,
- DRI2BufferPtr src)
+ RegionPtr region,
+ DRI2BufferPtr dst,
+ DRI2BufferPtr src)
{
PixmapPtr pixmap = get_drawable_pixmap(draw);
struct sna *sna = to_sna_from_pixmap(pixmap);
@@ -1014,8 +1022,8 @@ sna_dri2_add_frame_event(DrawablePtr draw, struct sna_dri2_frame_event *info)
static void
sna_dri2_frame_event_info_free(struct sna *sna,
- DrawablePtr draw,
- struct sna_dri2_frame_event *info)
+ DrawablePtr draw,
+ struct sna_dri2_frame_event *info)
{
if (draw && draw->type == DRAWABLE_WINDOW)
sna_dri2_remove_frame_event((WindowPtr)draw, info);
@@ -1112,12 +1120,7 @@ sna_dri2_page_flip(struct sna *sna, struct sna_dri2_frame_event *info)
sna->dri2.flip_pending = info;
-#if XORG_CAN_TRIPLE_BUFFER
- DBG(("%s: setting swap limit to %d\n", __FUNCTION__,
- 1 + (info->type == FLIP_THROTTLE)));
- DRI2SwapLimit(info->draw, 1 + (info->type == FLIP_THROTTLE));
-#endif
-
+ swap_limit(info->draw, 1 + (info->type == FLIP_THROTTLE));
return true;
}
@@ -1255,8 +1258,8 @@ can_flip(struct sna * sna,
static void
sna_dri2_exchange_buffers(DrawablePtr draw,
- DRI2BufferPtr front,
- DRI2BufferPtr back)
+ DRI2BufferPtr front,
+ DRI2BufferPtr back)
{
struct kgem_bo *back_bo, *front_bo;
PixmapPtr pixmap;
@@ -1362,16 +1365,13 @@ static void chain_swap(struct sna *sna,
chain->event_complete, chain->event_data);
sna_dri2_frame_event_info_free(sna, draw, chain);
} else {
-#if !XORG_CAN_TRIPLE_BUFFER
- DBG(("%s: fake triple buffering, unblocking client\n", __FUNCTION__));
- DRI2SwapComplete(chain->client, draw,
- frame, tv_sec, tv_usec,
- DRI2_BLIT_COMPLETE,
- chain->event_complete, chain->event_data);
-#else
- DBG(("%s: setting swap limit to 2\n", __FUNCTION__));
- DRI2SwapLimit(draw, 2);
-#endif
+ if (!swap_limit(draw, 2)) {
+ DBG(("%s: fake triple buffering, unblocking client\n", __FUNCTION__));
+ DRI2SwapComplete(chain->client, draw,
+ frame, tv_sec, tv_usec,
+ DRI2_BLIT_COMPLETE,
+ chain->event_complete, chain->event_data);
+ }
}
}
@@ -1520,8 +1520,8 @@ done:
static bool
sna_dri2_immediate_blit(struct sna *sna,
- struct sna_dri2_frame_event *info,
- bool sync, bool event)
+ struct sna_dri2_frame_event *info,
+ bool sync, bool event)
{
DrawablePtr draw = info->draw;
bool ret = false;
@@ -1553,14 +1553,10 @@ sna_dri2_immediate_blit(struct sna *sna,
vbl.request.sequence = 1;
vbl.request.signal = (unsigned long)info;
ret = !sna_wait_vblank(sna, &vbl, info->pipe);
-#if XORG_CAN_TRIPLE_BUFFER
- if (ret) {
- DBG(("%s: setting swap limit to 2\n", __FUNCTION__));
- DRI2SwapLimit(draw, 2);
- }
-#endif
+ if (ret)
+ event = !swap_limit(draw, 2);
}
- if (!XORG_CAN_TRIPLE_BUFFER || !ret) {
+ if (event) {
DBG(("%s: fake triple bufferring, unblocking client\n", __FUNCTION__));
fake_swap_complete(sna, info->client, draw,
DRI2_BLIT_COMPLETE,
@@ -1969,9 +1965,9 @@ static bool immediate_swap(struct sna *sna,
static bool
sna_dri2_schedule_flip(ClientPtr client, DrawablePtr draw, xf86CrtcPtr crtc,
- DRI2BufferPtr front, DRI2BufferPtr back,
- CARD64 *target_msc, CARD64 divisor, CARD64 remainder,
- DRI2SwapEventPtr func, void *data)
+ DRI2BufferPtr front, DRI2BufferPtr back,
+ CARD64 *target_msc, CARD64 divisor, CARD64 remainder,
+ DRI2SwapEventPtr func, void *data)
{
struct sna *sna = to_sna_from_drawable(draw);
struct sna_dri2_frame_event *info;
@@ -2041,10 +2037,7 @@ sna_dri2_schedule_flip(ClientPtr client, DrawablePtr draw, xf86CrtcPtr crtc,
__FUNCTION__));
info->type = type = FLIP;
sna->dri2.flip_pending = info;
-#if XORG_CAN_TRIPLE_BUFFER
- DBG(("%s: setting swap limit to 1\n", __FUNCTION__));
- DRI2SwapLimit(draw, 1);
-#endif
+ swap_limit(draw, 1);
} else {
info->type = type = use_triple_buffer(sna, client, *target_msc == 0);
if (!sna_dri2_page_flip(sna, info)) {
@@ -2154,11 +2147,7 @@ out:
return false;
}
-#if XORG_CAN_TRIPLE_BUFFER
- DBG(("%s: setting swap limit to 1\n", __FUNCTION__));
- DRI2SwapLimit(draw, 1);
-#endif
-
+ swap_limit(draw, 1);
return true;
}
@@ -2184,8 +2173,8 @@ out:
*/
static int
sna_dri2_schedule_swap(ClientPtr client, DrawablePtr draw, DRI2BufferPtr front,
- DRI2BufferPtr back, CARD64 *target_msc, CARD64 divisor,
- CARD64 remainder, DRI2SwapEventPtr func, void *data)
+ DRI2BufferPtr back, CARD64 *target_msc, CARD64 divisor,
+ CARD64 remainder, DRI2SwapEventPtr func, void *data)
{
struct sna *sna = to_sna_from_drawable(draw);
union drm_wait_vblank vbl;
@@ -2408,7 +2397,7 @@ fail:
*/
static int
sna_dri2_schedule_wait_msc(ClientPtr client, DrawablePtr draw, CARD64 target_msc,
- CARD64 divisor, CARD64 remainder)
+ CARD64 divisor, CARD64 remainder)
{
struct sna *sna = to_sna_from_drawable(draw);
struct sna_dri2_frame_event *info = NULL;
More information about the xorg-commit
mailing list