On Thu, Sep 07, 2023 at 10:02:12PM +0200, Matthieu Herrb wrote:
> On Thu, Sep 07, 2023 at 05:24:56PM +0200, Matthieu Herrb wrote:
> > On Thu, Sep 07, 2023 at 07:11:40AM +0200, Anton Lindqvist wrote:
> > > On Wed, Sep 06, 2023 at 05:42:37AM -0600, Robert Nagy wrote:
> > > > CVSROOT:        /cvs
> > > > Module name:    xenocara
> > > > Changes by:     rob...@cvs.openbsd.org  2023/09/06 05:42:37
> > > > 
> > > > Modified files:
> > > >         driver/xf86-video-amdgpu/src: amdgpu_present.c 
> > > > drmmode_display.h 
> > > >         xserver/glamor : glamor.h glamor_egl.c 
> > > > 
> > > > Log message:
> > > > unbreak build with clang-16 by fixing up function definitions to match
> > > > 
> > > > our uint64_t is an unsinged long long, but CARD64 is defined as 
> > > > unsigned long
> > > > so the function pointer types in both glamor and xf86-video-amdgpu were
> > > > mismatched and clang-16 treats that as an error
> > > > 
> > > > ok matthieu@
> > > 
> > > This broke the tree. Here's a potential fix.
> > 
> > Hmm no, this one reverts parts of the llvm 16 diffs.
> > 
> > What about this that gets rid of CARD64 completely in this context ?
> > 
> > hint for the X developpers: CARD64 and friends are normally reserved
> > for the X protocol specification and implementation
> > 
> > All other uses as cheap substites for uint64_t or similar are just
> > historical artefacts from an era where there was no standard integer
> > types with known fixed lengths.
> 
> This is still not enough.
> 
> I've deciced to cure the problem at its root.
> 
> Whith this patch, the tree builds with both base llvm and llvm 16 on
> amd64. I've started a build i386 to double check 32 bit arches.
> 
> And it will allow to revert some other patches to reduce the number of
> local changes. I also think that it has some chances to be accepted
> upstreams.
> 
> basically just define the CARDnn types in terms on uint_nn everywhere.
> Like for signal.h all systems still supported by X have stdint and the
> uintnn_t types.
> 

If this builds please land it.

> 
> Index: proto/xorgproto/include/X11/Xmd.h
> ===================================================================
> RCS file: /local/cvs/xenocara/proto/xorgproto/include/X11/Xmd.h,v
> retrieving revision 1.2
> diff -u -p -u -r1.2 Xmd.h
> --- proto/xorgproto/include/X11/Xmd.h 11 Nov 2021 08:55:42 -0000      1.2
> +++ proto/xorgproto/include/X11/Xmd.h 7 Sep 2023 16:20:01 -0000
> @@ -57,6 +57,8 @@ SOFTWARE.
>  #  include <sys/isa_defs.h> /* Solaris: defines _LP64 if necessary */
>  # endif
>  
> +#include <stdint.h>
> +
>  #if defined(__SIZEOF_LONG__)
>  # if __SIZEOF_LONG__ == 8
>  #  define LONG64                             /* 32/64-bit architecture */
> @@ -107,15 +109,10 @@ typedef short INT16;
>  
>  typedef signed char    INT8;
>  
> -# ifdef LONG64
> -typedef unsigned long CARD64;
> -typedef unsigned int CARD32;
> -# else
> -typedef unsigned long long CARD64;
> -typedef unsigned long CARD32;
> -# endif
> -typedef unsigned short CARD16;
> -typedef unsigned char  CARD8;
> +typedef uint64_t CARD64;
> +typedef uint32_t CARD32;
> +typedef uint16_t CARD16;
> +typedef uint8_t  CARD8;
>  
>  typedef CARD32               BITS32;
>  typedef CARD16               BITS16;
> 
> > 
> > Index: src/drmmode_display.c
> > ===================================================================
> > RCS file: 
> > /local/cvs/xenocara/driver/xf86-video-amdgpu/src/drmmode_display.c,v
> > retrieving revision 1.4
> > diff -u -p -u -r1.4 drmmode_display.c
> > --- src/drmmode_display.c   5 Dec 2022 16:41:17 -0000       1.4
> > +++ src/drmmode_display.c   7 Sep 2023 15:20:36 -0000
> > @@ -197,7 +197,7 @@ drmmode_wait_vblank(xf86CrtcPtr crtc, dr
> >   * version and DRM kernel module configuration, the vblank
> >   * timestamp can either be in real time or monotonic time
> >   */
> > -int drmmode_get_current_ust(int drm_fd, CARD64 * ust)
> > +int drmmode_get_current_ust(int drm_fd, uint64_t * ust)
> >  {
> >     uint64_t cap_value;
> >     int ret;
> > @@ -211,14 +211,14 @@ int drmmode_get_current_ust(int drm_fd, 
> >             ret = clock_gettime(CLOCK_MONOTONIC, &now);
> >     if (ret)
> >             return ret;
> > -   *ust = ((CARD64) now.tv_sec * 1000000) + ((CARD64) now.tv_nsec / 1000);
> > +   *ust = ((uint64_t) now.tv_sec * 1000000) + ((uint64_t) now.tv_nsec / 
> > 1000);
> >     return 0;
> >  }
> >  
> >  /*
> >   * Get current frame count and frame count timestamp of the crtc.
> >   */
> > -int drmmode_crtc_get_ust_msc(xf86CrtcPtr crtc, CARD64 *ust, CARD64 *msc)
> > +int drmmode_crtc_get_ust_msc(xf86CrtcPtr crtc, uint64_t *ust, uint64_t 
> > *msc)
> >  {
> >     ScrnInfoPtr scrn = crtc->scrn;
> >     uint32_t seq;
> > @@ -303,7 +303,7 @@ drmmode_do_crtc_dpms(xf86CrtcPtr crtc, i
> >     drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
> >     ScrnInfoPtr scrn = crtc->scrn;
> >     AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(scrn);
> > -   CARD64 ust;
> > +   uint64_t ust;
> >     int ret;
> >  
> >     if (drmmode_crtc->dpms_mode == DPMSModeOn && mode != DPMSModeOn) {
> > @@ -321,7 +321,7 @@ drmmode_do_crtc_dpms(xf86CrtcPtr crtc, i
> >                                "%s cannot get last vblank counter\n",
> >                                __func__);
> >             else {
> > -                   CARD64 nominal_frame_rate, pix_in_frame;
> > +                   uint64_t nominal_frame_rate, pix_in_frame;
> >  
> >                     drmmode_crtc->dpms_last_ust = ust;
> >                     drmmode_crtc->dpms_last_seq = seq;
> > @@ -347,7 +347,7 @@ drmmode_do_crtc_dpms(xf86CrtcPtr crtc, i
> >                     xf86DrvMsg(scrn->scrnIndex, X_ERROR,
> >                                "%s cannot get current time\n", __func__);
> >             else if (drmmode_crtc->dpms_last_ust) {
> > -                   CARD64 time_elapsed, delta_seq;
> > +                   uint64_t time_elapsed, delta_seq;
> >                     time_elapsed = ust - drmmode_crtc->dpms_last_ust;
> >                     delta_seq = time_elapsed * drmmode_crtc->dpms_last_fps;
> >                     delta_seq /= 1000000;
> > Index: src/drmmode_display.h
> > ===================================================================
> > RCS file: 
> > /local/cvs/xenocara/driver/xf86-video-amdgpu/src/drmmode_display.h,v
> > retrieving revision 1.5
> > diff -u -p -u -r1.5 drmmode_display.h
> > --- src/drmmode_display.h   6 Sep 2023 11:42:37 -0000       1.5
> > +++ src/drmmode_display.h   7 Sep 2023 15:20:36 -0000
> > @@ -127,7 +127,7 @@ typedef struct {
> >     PixmapPtr prime_scanout_pixmap;
> >  
> >     int dpms_mode;
> > -   CARD64 dpms_last_ust;
> > +   uint64_t dpms_last_ust;
> >     uint32_t dpms_last_seq;
> >     int dpms_last_fps;
> >     uint32_t interpolated_vblanks;
> > @@ -285,7 +285,7 @@ Bool amdgpu_do_pageflip(ScrnInfoPtr scrn
> >                     enum drmmode_flip_sync flip_sync,
> >                     uint32_t target_msc);
> >  int drmmode_crtc_get_ust_msc(xf86CrtcPtr crtc, uint64_t *ust, uint64_t 
> > *msc);
> > -int drmmode_get_current_ust(int drm_fd, CARD64 * ust);
> > +int drmmode_get_current_ust(int drm_fd, uint64_t * ust);
> >  void drmmode_crtc_set_vrr(xf86CrtcPtr crtc, Bool enabled);
> >  
> >  Bool drmmode_wait_vblank(xf86CrtcPtr crtc, drmVBlankSeqType type,
> > 
> > -- 
> > Matthieu Herrb
> 
> -- 
> Matthieu Herrb
> 

Reply via email to