[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

drm-snapshot: Changes to 'upstream-experimental'



 libdrm/Makefile.am               |    3 +--
 libdrm/intel/Makefile.am         |    1 +
 libdrm/intel/intel_bufmgr.c      |   10 ++++++++++
 libdrm/intel/intel_bufmgr.h      |    2 ++
 libdrm/intel/intel_bufmgr_fake.c |   20 ++++++++++++--------
 libdrm/intel/intel_bufmgr_gem.c  |   23 +++++++++++++++++++++++
 libdrm/intel/intel_bufmgr_priv.h |    9 +++++++++
 7 files changed, 58 insertions(+), 10 deletions(-)

New commits:
commit 458e2d5bc5f949d00cfcc9a3f9ce89f0c9f5628c
Author: Eric Anholt <eric@anholt.net>
Date:   Tue Oct 14 13:33:38 2008 -0700

    intel: Fix compile warning.

diff --git a/libdrm/intel/intel_bufmgr_fake.c b/libdrm/intel/intel_bufmgr_fake.c
index cfe9a73..8e476c4 100644
--- a/libdrm/intel/intel_bufmgr_fake.c
+++ b/libdrm/intel/intel_bufmgr_fake.c
@@ -732,7 +732,6 @@ static void
 dri_fake_bo_wait_rendering(dri_bo *bo)
 {
    dri_bufmgr_fake *bufmgr_fake = (dri_bufmgr_fake *)bo->bufmgr;
-   dri_bo_fake *bo_fake = (dri_bo_fake *)bo;
 
    pthread_mutex_lock(&bufmgr_fake->lock);
    dri_fake_bo_wait_rendering_locked(bo);

commit 993383873c215ab11975d98b93f131a4e3ea7ce6
Author: Eric Anholt <eric@anholt.net>
Date:   Tue Oct 14 13:18:11 2008 -0700

    intel: Add interface for getting tiling mode of a bo.

diff --git a/libdrm/intel/intel_bufmgr.c b/libdrm/intel/intel_bufmgr.c
index fc7284b..92b6046 100644
--- a/libdrm/intel/intel_bufmgr.c
+++ b/libdrm/intel/intel_bufmgr.c
@@ -192,3 +192,13 @@ int dri_bo_set_tiling(dri_bo *bo, uint32_t *tiling_mode)
     *tiling_mode = I915_TILING_NONE;
     return 0;
 }
+
+int dri_bo_get_tiling(dri_bo *bo, uint32_t *tiling_mode, uint32_t *swizzle_mode)
+{
+    if (bo->bufmgr->bo_get_tiling)
+	return bo->bufmgr->bo_get_tiling(bo, tiling_mode, swizzle_mode);
+
+    *tiling_mode = I915_TILING_NONE;
+    *swizzle_mode = I915_BIT_6_SWIZZLE_NONE;
+    return 0;
+}
diff --git a/libdrm/intel/intel_bufmgr.h b/libdrm/intel/intel_bufmgr.h
index c44d596..0c7b0e4 100644
--- a/libdrm/intel/intel_bufmgr.h
+++ b/libdrm/intel/intel_bufmgr.h
@@ -87,6 +87,8 @@ int dri_bo_emit_reloc(dri_bo *reloc_buf,
 int dri_bo_pin(dri_bo *buf, uint32_t alignment);
 int dri_bo_unpin(dri_bo *buf);
 int dri_bo_set_tiling(dri_bo *buf, uint32_t *tiling_mode);
+int dri_bo_get_tiling(dri_bo *buf, uint32_t *tiling_mode,
+		      uint32_t *swizzle_mode);
 int dri_bo_flink(dri_bo *buf, uint32_t *name);
 
 /* intel_bufmgr_gem.c */
diff --git a/libdrm/intel/intel_bufmgr_gem.c b/libdrm/intel/intel_bufmgr_gem.c
index 9bd4441..33853c4 100644
--- a/libdrm/intel/intel_bufmgr_gem.c
+++ b/libdrm/intel/intel_bufmgr_gem.c
@@ -873,6 +873,28 @@ dri_gem_bo_set_tiling(dri_bo *bo, uint32_t *tiling_mode)
 }
 
 static int
+dri_gem_bo_get_tiling(dri_bo *bo, uint32_t *tiling_mode, uint32_t *swizzle_mode)
+{
+    dri_bufmgr_gem *bufmgr_gem = (dri_bufmgr_gem *)bo->bufmgr;
+    dri_bo_gem *bo_gem = (dri_bo_gem *)bo;
+    struct drm_i915_gem_get_tiling get_tiling;
+    int ret;
+
+    get_tiling.handle = bo_gem->gem_handle;
+
+    ret = ioctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_GET_TILING, &get_tiling);
+    if (ret != 0) {
+	*tiling_mode = I915_TILING_NONE;
+	*swizzle_mode = I915_BIT_6_SWIZZLE_NONE;
+	return -errno;
+    }
+
+    *tiling_mode = get_tiling.tiling_mode;
+    *swizzle_mode = get_tiling.swizzle_mode;
+    return 0;
+}
+
+static int
 dri_gem_bo_flink(dri_bo *bo, uint32_t *name)
 {
     dri_bufmgr_gem *bufmgr_gem = (dri_bufmgr_gem *)bo->bufmgr;
@@ -959,6 +981,7 @@ intel_bufmgr_gem_init(int fd, int batch_size)
     bufmgr_gem->bufmgr.bo_emit_reloc = dri_gem_bo_emit_reloc;
     bufmgr_gem->bufmgr.bo_pin = dri_gem_bo_pin;
     bufmgr_gem->bufmgr.bo_unpin = dri_gem_bo_unpin;
+    bufmgr_gem->bufmgr.bo_get_tiling = dri_gem_bo_get_tiling;
     bufmgr_gem->bufmgr.bo_set_tiling = dri_gem_bo_set_tiling;
     bufmgr_gem->bufmgr.bo_flink = dri_gem_bo_flink;
     bufmgr_gem->bufmgr.bo_exec = dri_gem_bo_exec;
diff --git a/libdrm/intel/intel_bufmgr_priv.h b/libdrm/intel/intel_bufmgr_priv.h
index 7f39bfc..cbf3b31 100644
--- a/libdrm/intel/intel_bufmgr_priv.h
+++ b/libdrm/intel/intel_bufmgr_priv.h
@@ -150,6 +150,15 @@ struct _dri_bufmgr {
      */
     int (*bo_set_tiling) (dri_bo *bo, uint32_t *tiling_mode);
     /**
+     * Get the current tiling (and resulting swizzling) mode for the bo.
+     *
+     * \param buf Buffer to get tiling mode for
+     * \param tiling_mode returned tiling mode
+     * \param swizzle_mode returned swizzling mode
+     */
+    int (*bo_get_tiling) (dri_bo *bo, uint32_t *tiling_mode,
+			  uint32_t *swizzle_mode);
+    /**
      * Create a visible name for a buffer which can be used by other apps
      *
      * \param buf Buffer to create a name for

commit d9c2f65dd8e50736a33e97a55c257ef6843e1ce7
Author: Julien Cristau <jcristau@debian.org>
Date:   Tue Oct 14 01:25:57 2008 +0200

    link libdrm_intel properly
    
    libdrm_intel needs symbols from libdrm, so link against it.

diff --git a/libdrm/Makefile.am b/libdrm/Makefile.am
index dbe58fb..63f6e64 100644
--- a/libdrm/Makefile.am
+++ b/libdrm/Makefile.am
@@ -18,7 +18,7 @@
 #  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 #  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-SUBDIRS = intel
+SUBDIRS = . intel
 
 libdrm_la_LTLIBRARIES = libdrm.la
 libdrm_ladir = $(libdir)
@@ -27,7 +27,6 @@ libdrm_la_LDFLAGS = -version-number 2:3:0 -no-undefined
 AM_CFLAGS = -I$(top_srcdir)/shared-core
 libdrm_la_SOURCES = xf86drm.c xf86drmHash.c xf86drmRandom.c xf86drmSL.c \
 	libdrm_lists.h
-libdrm_la_LIBADD = @PTHREADSTUBS_LIBS@
 
 libdrmincludedir = ${includedir}
 libdrminclude_HEADERS = xf86drm.h
diff --git a/libdrm/intel/Makefile.am b/libdrm/intel/Makefile.am
index 92388c2..5e3dee0 100644
--- a/libdrm/intel/Makefile.am
+++ b/libdrm/intel/Makefile.am
@@ -32,6 +32,7 @@ AM_CFLAGS = \
 libdrm_intel_la_LTLIBRARIES = libdrm_intel.la
 libdrm_intel_ladir = $(libdir)
 libdrm_intel_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libdrm_intel_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
 
 libdrm_intel_la_SOURCES = \
 	intel_bufmgr.c \

commit 3e03d781f7c41a88d5d5f895be9c443bf3592ef0
Author: Eric Anholt <eric@anholt.net>
Date:   Mon Oct 13 13:41:10 2008 -0700

    intel: Avoid pthread mutex recursion in bufmgr_fake.
    
    Bug #18035. Fixes deadlock in glean texCube testcase.

diff --git a/libdrm/intel/intel_bufmgr_fake.c b/libdrm/intel/intel_bufmgr_fake.c
index 1be4698..cfe9a73 100644
--- a/libdrm/intel/intel_bufmgr_fake.c
+++ b/libdrm/intel/intel_bufmgr_fake.c
@@ -717,20 +717,25 @@ dri_bufmgr_fake_wait_idle(dri_bufmgr_fake *bufmgr_fake)
  * the necessary flushing.
  */
 static void
-dri_fake_bo_wait_rendering(dri_bo *bo)
+dri_fake_bo_wait_rendering_locked(dri_bo *bo)
 {
    dri_bufmgr_fake *bufmgr_fake = (dri_bufmgr_fake *)bo->bufmgr;
    dri_bo_fake *bo_fake = (dri_bo_fake *)bo;
 
-   pthread_mutex_lock(&bufmgr_fake->lock);
-
-   if (bo_fake->block == NULL || !bo_fake->block->fenced) {
-      pthread_mutex_unlock(&bufmgr_fake->lock);
+   if (bo_fake->block == NULL || !bo_fake->block->fenced)
       return;
-   }
 
    _fence_wait_internal(bufmgr_fake, bo_fake->block->fence);
+}
+
+static void
+dri_fake_bo_wait_rendering(dri_bo *bo)
+{
+   dri_bufmgr_fake *bufmgr_fake = (dri_bufmgr_fake *)bo->bufmgr;
+   dri_bo_fake *bo_fake = (dri_bo_fake *)bo;
 
+   pthread_mutex_lock(&bufmgr_fake->lock);
+   dri_fake_bo_wait_rendering_locked(bo);
    pthread_mutex_unlock(&bufmgr_fake->lock);
 }
 
@@ -972,7 +977,7 @@ dri_fake_bo_map_locked(dri_bo *bo, int write_enable)
 
 	    if (!(bo_fake->flags & BM_NO_FENCE_SUBDATA) &&
 		bo_fake->block->fenced) {
-	       dri_fake_bo_wait_rendering(bo);
+	       dri_fake_bo_wait_rendering_locked(bo);
 	    }
 
 	    bo->virtual = bo_fake->block->virtual;
@@ -987,7 +992,7 @@ dri_fake_bo_map_locked(dri_bo *bo, int write_enable)
 
          if ((bo_fake->card_dirty == 1) && bo_fake->block) {
             if (bo_fake->block->fenced)
-               dri_fake_bo_wait_rendering(bo);
+               dri_fake_bo_wait_rendering_locked(bo);
 
             memcpy(bo_fake->backing_store, bo_fake->block->virtual, bo_fake->block->bo->size);
             bo_fake->card_dirty = 0;

commit c6109df93bc062d3ec2ff2808babe826532d11b3
Author: Dave Airlie <airlied@linux.ie>
Date:   Mon Oct 13 07:16:33 2008 +1000

    libdrm: don't depend or link to libdrm_intel

diff --git a/libdrm/Makefile.am b/libdrm/Makefile.am
index 543b278..dbe58fb 100644
--- a/libdrm/Makefile.am
+++ b/libdrm/Makefile.am
@@ -27,7 +27,7 @@ libdrm_la_LDFLAGS = -version-number 2:3:0 -no-undefined
 AM_CFLAGS = -I$(top_srcdir)/shared-core
 libdrm_la_SOURCES = xf86drm.c xf86drmHash.c xf86drmRandom.c xf86drmSL.c \
 	libdrm_lists.h
-libdrm_la_LIBADD = intel/libdrm_intel.la @PTHREADSTUBS_LIBS@
+libdrm_la_LIBADD = @PTHREADSTUBS_LIBS@
 
 libdrmincludedir = ${includedir}
 libdrminclude_HEADERS = xf86drm.h


Reply to: