This diff updates libdrm to the latest upstream release.  Might do
with some testing, especially on radeondrm.  You'll need the kernel
header changes that I just committed to be able to build this.


Index: Makefile.inc
===================================================================
RCS file: /home/cvs/xenocara/lib/libdrm/Makefile.inc,v
retrieving revision 1.7
diff -u -p -r1.7 Makefile.inc
--- Makefile.inc        8 Jul 2013 09:10:05 -0000       1.7
+++ Makefile.inc        15 Nov 2013 14:00:11 -0000
@@ -1,6 +1,6 @@
 # $OpenBSD: Makefile.inc,v 1.7 2013/07/08 09:10:05 jsg Exp $
 
-PACKAGE_VERSION=       2.4.46
+PACKAGE_VERSION=       2.4.47
 
 NOPROFILE=
 
Index: xf86drm.c
===================================================================
RCS file: /home/cvs/xenocara/lib/libdrm/xf86drm.c,v
retrieving revision 1.9
diff -u -p -r1.9 xf86drm.c
--- xf86drm.c   20 Jun 2013 09:55:30 -0000      1.9
+++ xf86drm.c   15 Nov 2013 13:59:50 -0000
@@ -830,6 +830,13 @@ int drmGetCap(int fd, uint64_t capabilit
        return 0;
 }
 
+int drmSetClientCap(int fd, uint64_t capability, uint64_t value)
+{
+       struct drm_set_client_cap cap  = { capability, value };
+
+       return drmIoctl(fd, DRM_IOCTL_SET_CLIENT_CAP, &cap);
+}
+
 /**
  * Free the bus ID information.
  *
Index: xf86drm.h
===================================================================
RCS file: /home/cvs/xenocara/lib/libdrm/xf86drm.h,v
retrieving revision 1.7
diff -u -p -r1.7 xf86drm.h
--- xf86drm.h   25 Mar 2013 02:32:20 -0000      1.7
+++ xf86drm.h   15 Nov 2013 13:59:50 -0000
@@ -609,6 +609,8 @@ extern int           drmUpdateDrawableIn
                                           unsigned int num, void *data);
 extern int           drmCtlInstHandler(int fd, int irq);
 extern int           drmCtlUninstHandler(int fd);
+extern int           drmSetClientCap(int fd, uint64_t capability,
+                                    uint64_t value);
 
 /* General user-level programmer's API: authenticated client and/or X */
 extern int           drmMap(int fd,
Index: xf86drmMode.h
===================================================================
RCS file: /home/cvs/xenocara/lib/libdrm/xf86drmMode.h,v
retrieving revision 1.5
diff -u -p -r1.5 xf86drmMode.h
--- xf86drmMode.h       8 Jul 2013 09:10:05 -0000       1.5
+++ xf86drmMode.h       15 Nov 2013 13:59:50 -0000
@@ -81,20 +81,30 @@ extern "C" {
 
 /* Video mode flags */
 /* bit compatible with the xorg definitions. */
-#define DRM_MODE_FLAG_PHSYNC    (1<<0)
-#define DRM_MODE_FLAG_NHSYNC    (1<<1)
-#define DRM_MODE_FLAG_PVSYNC    (1<<2)
-#define DRM_MODE_FLAG_NVSYNC    (1<<3)
-#define DRM_MODE_FLAG_INTERLACE (1<<4)
-#define DRM_MODE_FLAG_DBLSCAN   (1<<5)
-#define DRM_MODE_FLAG_CSYNC     (1<<6)
-#define DRM_MODE_FLAG_PCSYNC    (1<<7)
-#define DRM_MODE_FLAG_NCSYNC    (1<<8)
-#define DRM_MODE_FLAG_HSKEW     (1<<9) /* hskew provided */
-#define DRM_MODE_FLAG_BCAST     (1<<10)
-#define DRM_MODE_FLAG_PIXMUX    (1<<11)
-#define DRM_MODE_FLAG_DBLCLK    (1<<12)
-#define DRM_MODE_FLAG_CLKDIV2   (1<<13)
+#define DRM_MODE_FLAG_PHSYNC                   (1<<0)
+#define DRM_MODE_FLAG_NHSYNC                   (1<<1)
+#define DRM_MODE_FLAG_PVSYNC                   (1<<2)
+#define DRM_MODE_FLAG_NVSYNC                   (1<<3)
+#define DRM_MODE_FLAG_INTERLACE                        (1<<4)
+#define DRM_MODE_FLAG_DBLSCAN                  (1<<5)
+#define DRM_MODE_FLAG_CSYNC                    (1<<6)
+#define DRM_MODE_FLAG_PCSYNC                   (1<<7)
+#define DRM_MODE_FLAG_NCSYNC                   (1<<8)
+#define DRM_MODE_FLAG_HSKEW                    (1<<9) /* hskew provided */
+#define DRM_MODE_FLAG_BCAST                    (1<<10)
+#define DRM_MODE_FLAG_PIXMUX                   (1<<11)
+#define DRM_MODE_FLAG_DBLCLK                   (1<<12)
+#define DRM_MODE_FLAG_CLKDIV2                  (1<<13)
+#define DRM_MODE_FLAG_3D_MASK                  (0x1f<<14)
+#define  DRM_MODE_FLAG_3D_NONE                 (0<<14)
+#define  DRM_MODE_FLAG_3D_FRAME_PACKING                (1<<14)
+#define  DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE    (2<<14)
+#define  DRM_MODE_FLAG_3D_LINE_ALTERNATIVE     (3<<14)
+#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL    (4<<14)
+#define  DRM_MODE_FLAG_3D_L_DEPTH              (5<<14)
+#define  DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH        (6<<14)
+#define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM       (7<<14)
+#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF    (8<<14)
 
 /* DPMS flags */
 /* bit compatible with the xorg definitions. */
@@ -218,11 +228,11 @@ typedef struct _drmModeProperty {
        uint32_t flags;
        char name[DRM_PROP_NAME_LEN];
        int count_values;
-       uint64_t *values; // store the blob lengths
+       uint64_t *values; /* store the blob lengths */
        int count_enums;
        struct drm_mode_property_enum *enums;
        int count_blobs;
-       uint32_t *blob_ids; // store the blob IDs
+       uint32_t *blob_ids; /* store the blob IDs */
 } drmModePropertyRes, *drmModePropertyPtr;
 
 typedef struct _drmModeCrtc {
Index: intel/intel_bufmgr_gem.c
===================================================================
RCS file: /home/cvs/xenocara/lib/libdrm/intel/intel_bufmgr_gem.c,v
retrieving revision 1.16
diff -u -p -r1.16 intel_bufmgr_gem.c
--- intel/intel_bufmgr_gem.c    8 Jul 2013 09:10:05 -0000       1.16
+++ intel/intel_bufmgr_gem.c    15 Nov 2013 13:59:49 -0000
@@ -1326,6 +1326,7 @@ int drm_intel_gem_bo_map_gtt(drm_intel_b
 int drm_intel_gem_bo_map_unsynchronized(drm_intel_bo *bo)
 {
        drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr;
+       drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo;
        int ret;
 
        /* If the CPU cache isn't coherent with the GTT, then use a
@@ -1339,7 +1340,13 @@ int drm_intel_gem_bo_map_unsynchronized(
                return drm_intel_gem_bo_map_gtt(bo);
 
        pthread_mutex_lock(&bufmgr_gem->lock);
+
        ret = map_gtt(bo);
+       if (ret == 0) {
+               drm_intel_gem_bo_mark_mmaps_incoherent(bo);
+               VG(VALGRIND_MAKE_MEM_DEFINED(bo_gem->gtt_virtual, bo->size));
+       }
+
        pthread_mutex_unlock(&bufmgr_gem->lock);
 
        return ret;
@@ -2459,7 +2466,17 @@ drm_intel_bo_gem_create_from_prime(drm_i
        if (!bo_gem)
                return NULL;
 
-       bo_gem->bo.size = size;
+       /* Determine size of bo.  The fd-to-handle ioctl really should
+        * return the size, but it doesn't.  If we have kernel 3.12 or
+        * later, we can lseek on the prime fd to get the size.  Older
+        * kernels will just fail, in which case we fall back to the
+        * provided (estimated or guess size). */
+       ret = lseek(prime_fd, 0, SEEK_END);
+       if (ret != -1)
+               bo_gem->bo.size = ret;
+       else
+               bo_gem->bo.size = size;
+
        bo_gem->bo.handle = handle;
        bo_gem->bo.bufmgr = bufmgr;
 
Index: intel/libdrm_intel.pc.in
===================================================================
RCS file: /home/cvs/xenocara/lib/libdrm/intel/libdrm_intel.pc.in,v
retrieving revision 1.1
diff -u -p -r1.1 libdrm_intel.pc.in
--- intel/libdrm_intel.pc.in    27 Jun 2009 10:02:53 -0000      1.1
+++ intel/libdrm_intel.pc.in    15 Nov 2013 13:59:49 -0000
@@ -3,8 +3,8 @@ exec_prefix=@exec_prefix@
 libdir=@libdir@
 includedir=@includedir@
 
-Name: libdrm
-Description: Userspace interface to kernel DRM services
+Name: libdrm_intel
+Description: Userspace interface to intel kernel DRM services
 Version: @PACKAGE_VERSION@
 Libs: -L${libdir} -ldrm -ldrm_intel
 Cflags: -I${includedir} -I/usr/include/dev/pci/drm
Index: radeon/r600_pci_ids.h
===================================================================
RCS file: /home/cvs/xenocara/lib/libdrm/radeon/r600_pci_ids.h,v
retrieving revision 1.4
diff -u -p -r1.4 r600_pci_ids.h
--- radeon/r600_pci_ids.h       8 Jul 2013 09:10:05 -0000       1.4
+++ radeon/r600_pci_ids.h       15 Nov 2013 13:59:49 -0000
@@ -424,3 +424,25 @@ CHIPSET(0x983C, KABINI_983C, KABINI)
 CHIPSET(0x983D, KABINI_983D, KABINI)
 CHIPSET(0x983E, KABINI_983E, KABINI)
 CHIPSET(0x983F, KABINI_983F, KABINI)
+
+CHIPSET(0x1304, KAVERI_1304, KAVERI)
+CHIPSET(0x1305, KAVERI_1305, KAVERI)
+CHIPSET(0x1306, KAVERI_1306, KAVERI)
+CHIPSET(0x1307, KAVERI_1307, KAVERI)
+CHIPSET(0x1309, KAVERI_1309, KAVERI)
+CHIPSET(0x130A, KAVERI_130A, KAVERI)
+CHIPSET(0x130B, KAVERI_130B, KAVERI)
+CHIPSET(0x130C, KAVERI_130C, KAVERI)
+CHIPSET(0x130D, KAVERI_130D, KAVERI)
+CHIPSET(0x130E, KAVERI_130E, KAVERI)
+CHIPSET(0x130F, KAVERI_130F, KAVERI)
+CHIPSET(0x1310, KAVERI_1310, KAVERI)
+CHIPSET(0x1311, KAVERI_1311, KAVERI)
+CHIPSET(0x1312, KAVERI_1312, KAVERI)
+CHIPSET(0x1313, KAVERI_1313, KAVERI)
+CHIPSET(0x1315, KAVERI_1315, KAVERI)
+CHIPSET(0x1316, KAVERI_1316, KAVERI)
+CHIPSET(0x1317, KAVERI_1317, KAVERI)
+CHIPSET(0x131B, KAVERI_131B, KAVERI)
+CHIPSET(0x131C, KAVERI_131C, KAVERI)
+CHIPSET(0x131D, KAVERI_131D, KAVERI)
Index: radeon/radeon_cs_gem.c
===================================================================
RCS file: /home/cvs/xenocara/lib/libdrm/radeon/radeon_cs_gem.c,v
retrieving revision 1.2
diff -u -p -r1.2 radeon_cs_gem.c
--- radeon/radeon_cs_gem.c      25 Mar 2013 02:32:20 -0000      1.2
+++ radeon/radeon_cs_gem.c      15 Nov 2013 13:59:49 -0000
@@ -425,6 +425,9 @@ static int cs_gem_emit(struct radeon_cs_
     unsigned i;
     int r;
 
+    while (cs->cdw & 7)
+       radeon_cs_write_dword((struct radeon_cs *)cs, 0x80000000);
+
 #if CS_BOF_DUMP
     cs_gem_dump_bof(cs);
 #endif
Index: radeon/radeon_surface.c
===================================================================
RCS file: /home/cvs/xenocara/lib/libdrm/radeon/radeon_surface.c,v
retrieving revision 1.4
diff -u -p -r1.4 radeon_surface.c
--- radeon/radeon_surface.c     8 Jul 2013 09:10:05 -0000       1.4
+++ radeon/radeon_surface.c     15 Nov 2013 13:59:50 -0000
@@ -1382,10 +1382,16 @@ static int si_surface_sanity(struct rade
         break;
     case RADEON_SURF_MODE_1D:
         if (surf->flags & RADEON_SURF_SBUFFER) {
-            *stencil_tile_mode = SI_TILE_MODE_DEPTH_STENCIL_1D;
+            if (surf_man->family >= CHIP_BONAIRE)
+                *stencil_tile_mode = CIK_TILE_MODE_DEPTH_STENCIL_1D;
+            else
+                *stencil_tile_mode = SI_TILE_MODE_DEPTH_STENCIL_1D;
         }
         if (surf->flags & RADEON_SURF_ZBUFFER) {
-            *tile_mode = SI_TILE_MODE_DEPTH_STENCIL_1D;
+            if (surf_man->family >= CHIP_BONAIRE)
+                *tile_mode = CIK_TILE_MODE_DEPTH_STENCIL_1D;
+            else
+                *tile_mode = SI_TILE_MODE_DEPTH_STENCIL_1D;
         } else if (surf->flags & RADEON_SURF_SCANOUT) {
             *tile_mode = SI_TILE_MODE_COLOR_1D_SCANOUT;
         } else {
@@ -1406,7 +1412,11 @@ static void si_surf_minify(struct radeon
                            uint32_t xalign, uint32_t yalign, uint32_t zalign,
                            uint32_t slice_align, unsigned offset)
 {
-    surflevel->npix_x = mip_minify(surf->npix_x, level);
+    if (level == 0) {
+        surflevel->npix_x = surf->npix_x;
+    } else {
+        surflevel->npix_x = mip_minify(next_power_of_two(surf->npix_x), level);
+    }
     surflevel->npix_y = mip_minify(surf->npix_y, level);
     surflevel->npix_z = mip_minify(surf->npix_z, level);
 
@@ -1428,7 +1438,7 @@ static void si_surf_minify(struct radeon
     if (level == 0 && surf->last_level == 0)
         /* Non-mipmap pitch padded to slice alignment */
         xalign = MAX2(xalign, slice_align / surf->bpe);
-    else
+    else if (surflevel->mode == RADEON_SURF_MODE_LINEAR_ALIGNED)
         /* Small rows evenly distributed across slice */
         xalign = MAX2(xalign, slice_align / surf->bpe / surflevel->nblk_y);
 
@@ -1450,7 +1460,11 @@ static void si_surf_minify_2d(struct rad
 {
     unsigned mtile_pr, mtile_ps;
 
-    surflevel->npix_x = mip_minify(surf->npix_x, level);
+    if (level == 0) {
+        surflevel->npix_x = surf->npix_x;
+    } else {
+        surflevel->npix_x = mip_minify(next_power_of_two(surf->npix_x), level);
+    }
     surflevel->npix_y = mip_minify(surf->npix_y, level);
     surflevel->npix_z = mip_minify(surf->npix_z, level);
 
@@ -1643,7 +1657,10 @@ static int si_surface_init_2d(struct rad
                 tile_mode = SI_TILE_MODE_COLOR_1D_SCANOUT;
                 break;
             case SI_TILE_MODE_DEPTH_STENCIL_2D:
-                tile_mode = SI_TILE_MODE_DEPTH_STENCIL_1D;
+                if (surf_man->family >= CHIP_BONAIRE)
+                    tile_mode = CIK_TILE_MODE_DEPTH_STENCIL_1D;
+                else
+                    tile_mode = SI_TILE_MODE_DEPTH_STENCIL_1D;
                 break;
             default:
                 return -EINVAL;

Reply via email to