Re: [PATCH xf86-video-amdgpu 06/13] DRI2: Move amdgpu_dri2_flip_event_handler

2015-06-03 Thread Reverend Homer



On 02.06.2015 12:21, Michel Dänzer wrote:

From: Michel Dänzer michel.daen...@amd.com

In preparation for the next change, which will modify it to a static
function which needs to be in the new place. No functional change.

(Cherry picked from radeon commit c3fa22a479e61d1899fa9d327d9c4e2a7f64b0c1)

Signed-off-by: Michel Dänzer michel.daen...@amd.com
---
  src/amdgpu_dri2.c | 120 +++---
  1 file changed, 60 insertions(+), 60 deletions(-)

diff --git a/src/amdgpu_dri2.c b/src/amdgpu_dri2.c
index fd98fa7..c139dec 100644
--- a/src/amdgpu_dri2.c
+++ b/src/amdgpu_dri2.c
@@ -497,6 +497,66 @@ xf86CrtcPtr amdgpu_dri2_drawable_crtc(DrawablePtr pDraw, 
Bool consider_disabled)
return NULL;
  }
  
+void amdgpu_dri2_flip_event_handler(unsigned int frame, unsigned int tv_sec,

+   unsigned int tv_usec, void *event_data)
+{
+   DRI2FrameEventPtr flip = event_data;
+   DrawablePtr drawable;
+   ScreenPtr screen;
+   ScrnInfoPtr scrn;
+   int status;
+   PixmapPtr pixmap;
+
+   status = dixLookupDrawable(drawable, flip-drawable_id, serverClient,
+  M_ANY, DixWriteAccess);
+   if (status != Success) {
+   free(flip);
+   return;
+   }

Here

+   if (!flip-crtc) {
+   free(flip);
+   return;
+   }

and here you are doing one thing. Wouldn't be better to use
if (status != Success || !flip-crtc) {
free(flip);
return;
}
?

+   frame += amdgpu_get_interpolated_vblanks(flip-crtc);
+
+   screen = drawable-pScreen;
+   scrn = xf86ScreenToScrn(screen);
+
+   pixmap = screen-GetScreenPixmap(screen);
+   xf86DrvMsgVerb(scrn-scrnIndex, X_INFO, AMDGPU_LOGLEVEL_DEBUG,
+  %s:%d fevent[%p] width %d pitch %d (/4 %d)\n,
+  __func__, __LINE__, flip, pixmap-drawable.width,
+  pixmap-devKind, pixmap-devKind / 4);
+
+   /* We assume our flips arrive in order, so we don't check the frame */
+   switch (flip-type) {
+   case DRI2_SWAP:
+   /* Check for too small vblank count of pageflip completion, 
taking wraparound
+* into account. This usually means some defective kms pageflip 
completion,
+* causing wrong (msc, ust) return values and possible visual 
corruption.
+*/
+   if ((frame  flip-frame)  (flip-frame - frame  5)) {
+   xf86DrvMsg(scrn-scrnIndex, X_WARNING,
+  %s: Pageflip completion event has impossible msc %d 
 target_msc %d\n,
+  __func__, frame, flip-frame);
+   /* All-Zero values signal failure of (msc, ust) 
timestamping to client. */
+   frame = tv_sec = tv_usec = 0;
+   }
+
+   DRI2SwapComplete(flip-client, drawable, frame, tv_sec, tv_usec,
+DRI2_FLIP_COMPLETE, flip-event_complete,
+flip-event_data);
+   break;
+   default:
+   xf86DrvMsg(scrn-scrnIndex, X_WARNING,
+  %s: unknown vblank event received\n, __func__);
+   /* Unknown type */
+   break;
+   }
+
+   free(flip);
+}
+
  static Bool
  amdgpu_dri2_schedule_flip(ScrnInfoPtr scrn, ClientPtr client,
  DrawablePtr draw, DRI2BufferPtr front,
@@ -1130,66 +1190,6 @@ out_complete:
return TRUE;
  }
  
-void amdgpu_dri2_flip_event_handler(unsigned int frame, unsigned int tv_sec,

-   unsigned int tv_usec, void *event_data)
-{
-   DRI2FrameEventPtr flip = event_data;
-   DrawablePtr drawable;
-   ScreenPtr screen;
-   ScrnInfoPtr scrn;
-   int status;
-   PixmapPtr pixmap;
-
-   status = dixLookupDrawable(drawable, flip-drawable_id, serverClient,
-  M_ANY, DixWriteAccess);
-   if (status != Success) {
-   free(flip);
-   return;
-   }
-   if (!flip-crtc) {
-   free(flip);
-   return;
-   }
-   frame += amdgpu_get_interpolated_vblanks(flip-crtc);
-
-   screen = drawable-pScreen;
-   scrn = xf86ScreenToScrn(screen);
-
-   pixmap = screen-GetScreenPixmap(screen);
-   xf86DrvMsgVerb(scrn-scrnIndex, X_INFO, AMDGPU_LOGLEVEL_DEBUG,
-  %s:%d fevent[%p] width %d pitch %d (/4 %d)\n,
-  __func__, __LINE__, flip, pixmap-drawable.width,
-  pixmap-devKind, pixmap-devKind / 4);
-
-   /* We assume our flips arrive in order, so we don't check the frame */
-   switch (flip-type) {
-   case DRI2_SWAP:
-   /* Check for too small vblank count of pageflip completion, 
taking wraparound
-* into account. This usually 

[PATCH xf86-video-amdgpu 06/13] DRI2: Move amdgpu_dri2_flip_event_handler

2015-06-02 Thread Michel Dänzer
From: Michel Dänzer michel.daen...@amd.com

In preparation for the next change, which will modify it to a static
function which needs to be in the new place. No functional change.

(Cherry picked from radeon commit c3fa22a479e61d1899fa9d327d9c4e2a7f64b0c1)

Signed-off-by: Michel Dänzer michel.daen...@amd.com
---
 src/amdgpu_dri2.c | 120 +++---
 1 file changed, 60 insertions(+), 60 deletions(-)

diff --git a/src/amdgpu_dri2.c b/src/amdgpu_dri2.c
index fd98fa7..c139dec 100644
--- a/src/amdgpu_dri2.c
+++ b/src/amdgpu_dri2.c
@@ -497,6 +497,66 @@ xf86CrtcPtr amdgpu_dri2_drawable_crtc(DrawablePtr pDraw, 
Bool consider_disabled)
return NULL;
 }
 
+void amdgpu_dri2_flip_event_handler(unsigned int frame, unsigned int tv_sec,
+   unsigned int tv_usec, void *event_data)
+{
+   DRI2FrameEventPtr flip = event_data;
+   DrawablePtr drawable;
+   ScreenPtr screen;
+   ScrnInfoPtr scrn;
+   int status;
+   PixmapPtr pixmap;
+
+   status = dixLookupDrawable(drawable, flip-drawable_id, serverClient,
+  M_ANY, DixWriteAccess);
+   if (status != Success) {
+   free(flip);
+   return;
+   }
+   if (!flip-crtc) {
+   free(flip);
+   return;
+   }
+   frame += amdgpu_get_interpolated_vblanks(flip-crtc);
+
+   screen = drawable-pScreen;
+   scrn = xf86ScreenToScrn(screen);
+
+   pixmap = screen-GetScreenPixmap(screen);
+   xf86DrvMsgVerb(scrn-scrnIndex, X_INFO, AMDGPU_LOGLEVEL_DEBUG,
+  %s:%d fevent[%p] width %d pitch %d (/4 %d)\n,
+  __func__, __LINE__, flip, pixmap-drawable.width,
+  pixmap-devKind, pixmap-devKind / 4);
+
+   /* We assume our flips arrive in order, so we don't check the frame */
+   switch (flip-type) {
+   case DRI2_SWAP:
+   /* Check for too small vblank count of pageflip completion, 
taking wraparound
+* into account. This usually means some defective kms pageflip 
completion,
+* causing wrong (msc, ust) return values and possible visual 
corruption.
+*/
+   if ((frame  flip-frame)  (flip-frame - frame  5)) {
+   xf86DrvMsg(scrn-scrnIndex, X_WARNING,
+  %s: Pageflip completion event has 
impossible msc %d  target_msc %d\n,
+  __func__, frame, flip-frame);
+   /* All-Zero values signal failure of (msc, ust) 
timestamping to client. */
+   frame = tv_sec = tv_usec = 0;
+   }
+
+   DRI2SwapComplete(flip-client, drawable, frame, tv_sec, tv_usec,
+DRI2_FLIP_COMPLETE, flip-event_complete,
+flip-event_data);
+   break;
+   default:
+   xf86DrvMsg(scrn-scrnIndex, X_WARNING,
+  %s: unknown vblank event received\n, __func__);
+   /* Unknown type */
+   break;
+   }
+
+   free(flip);
+}
+
 static Bool
 amdgpu_dri2_schedule_flip(ScrnInfoPtr scrn, ClientPtr client,
  DrawablePtr draw, DRI2BufferPtr front,
@@ -1130,66 +1190,6 @@ out_complete:
return TRUE;
 }
 
-void amdgpu_dri2_flip_event_handler(unsigned int frame, unsigned int tv_sec,
-   unsigned int tv_usec, void *event_data)
-{
-   DRI2FrameEventPtr flip = event_data;
-   DrawablePtr drawable;
-   ScreenPtr screen;
-   ScrnInfoPtr scrn;
-   int status;
-   PixmapPtr pixmap;
-
-   status = dixLookupDrawable(drawable, flip-drawable_id, serverClient,
-  M_ANY, DixWriteAccess);
-   if (status != Success) {
-   free(flip);
-   return;
-   }
-   if (!flip-crtc) {
-   free(flip);
-   return;
-   }
-   frame += amdgpu_get_interpolated_vblanks(flip-crtc);
-
-   screen = drawable-pScreen;
-   scrn = xf86ScreenToScrn(screen);
-
-   pixmap = screen-GetScreenPixmap(screen);
-   xf86DrvMsgVerb(scrn-scrnIndex, X_INFO, AMDGPU_LOGLEVEL_DEBUG,
-  %s:%d fevent[%p] width %d pitch %d (/4 %d)\n,
-  __func__, __LINE__, flip, pixmap-drawable.width,
-  pixmap-devKind, pixmap-devKind / 4);
-
-   /* We assume our flips arrive in order, so we don't check the frame */
-   switch (flip-type) {
-   case DRI2_SWAP:
-   /* Check for too small vblank count of pageflip completion, 
taking wraparound
-* into account. This usually means some defective kms pageflip 
completion,
-* causing wrong (msc, ust) return values and possible visual 
corruption.
-*/
-   if ((frame  flip-frame)