configure.ac | 5 debian/changelog | 54 +++++ debian/control | 2 debian/libdrm-intel1.symbols | 2 debian/libkms1.symbols | 1 debian/patches/100_intel_remember_named_bo.patch | 99 --------- debian/patches/series | 1 debian/rules | 2 include/drm/i915_drm.h | 14 + intel/intel_bufmgr.c | 8 intel/intel_bufmgr.h | 2 intel/intel_bufmgr_gem.c | 51 +++- intel/intel_bufmgr_priv.h | 4 libkms/Makefile.am | 4 libkms/internal.h | 2 libkms/linux.c | 4 libkms/radeon.c | 242 +++++++++++++++++++++++ nouveau/Makefile.am | 2 nouveau/nouveau_channel.c | 37 +-- nouveau/nouveau_grobj.c | 11 - nouveau/nouveau_pushbuf.h | 38 --- nouveau/nouveau_reloc.c | 34 ++- nouveau/nv04_pushbuf.h | 66 ++++++ nouveau/nvc0_pushbuf.h | 92 ++++++++ tests/modeprint/Makefile.am | 4 tests/modeprint/modeprint.c | 4 tests/modetest/Makefile.am | 4 tests/modetest/modetest.c | 137 +++++++------ 28 files changed, 680 insertions(+), 246 deletions(-)
New commits: commit 9006cee7b62dce23e57639701fe3a54a910392ea Author: Christopher James Halse Rogers <christopher.halse.rog...@canonical.com> Date: Mon Apr 4 11:21:22 2011 +1000 Drop intel cherry-pick present in 2.4.24 diff --git a/debian/changelog b/debian/changelog index e21923a..2e93104 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,8 @@ libdrm (2.4.24-1ubuntu1) UNRELEASED; urgency=low - debian/*.install.in: - debian/*.links.in: + Multiarchify + * debian/patches/100_intel_remember_named_bo.patch: + - Drop this cherry-pick; included in 2.4.24 -- Christopher James Halse Rogers <ch...@cooperteam.net> Mon, 04 Apr 2011 11:07:04 +1000 diff --git a/debian/patches/100_intel_remember_named_bo.patch b/debian/patches/100_intel_remember_named_bo.patch deleted file mode 100644 index 5c76ce5..0000000 --- a/debian/patches/100_intel_remember_named_bo.patch +++ /dev/null @@ -1,99 +0,0 @@ -commit 36d4939343d8789d9066f7245fa2d4fe69119dd8 -Author: Chris Wilson <ch...@chris-wilson.co.uk> -Date: Mon Feb 14 09:39:06 2011 +0000 - - intel: Remember named bo - - ... and if asked to open a bo by the same global name, return a fresh - reference to the previously allocated buffer. - - Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> - -diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c -index 092b56a..3cdffce 100644 ---- a/intel/intel_bufmgr_gem.c -+++ b/intel/intel_bufmgr_gem.c -@@ -95,6 +95,8 @@ typedef struct _drm_intel_bufmgr_gem { - int num_buckets; - time_t time; - -+ drmMMListHead named; -+ - uint64_t gtt_size; - int available_fences; - int pci_device; -@@ -124,6 +126,7 @@ struct _drm_intel_bo_gem { - * Kenel-assigned global name for this object - */ - unsigned int global_name; -+ drmMMListHead name_list; - - /** - * Index of the buffer within the validation list while preparing a -@@ -690,6 +693,8 @@ retry: - drm_intel_gem_bo_free(&bo_gem->bo); - return NULL; - } -+ -+ DRMINITLISTHEAD(&bo_gem->name_list); - } - - bo_gem->name = name; -@@ -792,6 +797,23 @@ drm_intel_bo_gem_create_from_name(drm_intel_bufmgr *bufmgr, - int ret; - struct drm_gem_open open_arg; - struct drm_i915_gem_get_tiling get_tiling; -+ drmMMListHead *list; -+ -+ /* At the moment most applications only have a few named bo. -+ * For instance, in a DRI client only the render buffers passed -+ * between X and the client are named. And since X returns the -+ * alternating names for the front/back buffer a linear search -+ * provides a sufficiently fast match. -+ */ -+ for (list = bufmgr_gem->named.next; -+ list != &bufmgr_gem->named; -+ list = list->next) { -+ bo_gem = DRMLISTENTRY(drm_intel_bo_gem, list, name_list); -+ if (bo_gem->global_name == handle) { -+ drm_intel_gem_bo_reference(&bo_gem->bo); -+ return &bo_gem->bo; -+ } -+ } - - bo_gem = calloc(1, sizeof(*bo_gem)); - if (!bo_gem) -@@ -834,6 +856,7 @@ drm_intel_bo_gem_create_from_name(drm_intel_bufmgr *bufmgr, - /* XXX stride is unknown */ - drm_intel_bo_gem_set_in_aperture_size(bufmgr_gem, bo_gem); - -+ DRMLISTADDTAIL(&bo_gem->name_list, &bufmgr_gem->named); - DBG("bo_create_from_handle: %d (%s)\n", handle, bo_gem->name); - - return &bo_gem->bo; -@@ -925,6 +948,8 @@ drm_intel_gem_bo_unreference_final(drm_intel_bo *bo, time_t time) - bo_gem->relocs = NULL; - } - -+ DRMLISTDEL(&bo_gem->name_list); -+ - bucket = drm_intel_gem_bo_bucket_for_size(bufmgr_gem, bo->size); - /* Put the buffer into our internal cache for reuse if we can. */ - if (bufmgr_gem->bo_reuse && bo_gem->reusable && bucket != NULL && -@@ -1771,6 +1796,8 @@ drm_intel_gem_bo_flink(drm_intel_bo *bo, uint32_t * name) - return -errno; - bo_gem->global_name = flink.name; - bo_gem->reusable = 0; -+ -+ DRMLISTADDTAIL(&bo_gem->name_list, &bufmgr_gem->named); - } - - *name = bo_gem->global_name; -@@ -2217,6 +2244,7 @@ drm_intel_bufmgr_gem_init(int fd, int batch_size) - drm_intel_gem_get_pipe_from_crtc_id; - bufmgr_gem->bufmgr.bo_references = drm_intel_gem_bo_references; - -+ DRMINITLISTHEAD(&bufmgr_gem->named); - init_cache_buckets(bufmgr_gem); - - return &bufmgr_gem->bufmgr; diff --git a/debian/patches/series b/debian/patches/series index c37b7ae..e23f0b1 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,3 +1,2 @@ 01_default_perms.diff 02_build_libkms_against_in_tree_drm.diff -100_intel_remember_named_bo.patch commit 6c26ff465e0f680800864db026da6a98723a8412 Author: Cyril Brulebois <k...@debian.org> Date: Sat Mar 5 20:27:33 2011 +0100 Upload to experimental. diff --git a/debian/changelog b/debian/changelog index 375199f..b9229e2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -libdrm (2.4.24-1) UNRELEASED; urgency=low +libdrm (2.4.24-1) experimental; urgency=low [ Christopher James Halse Rogers ] * New upstream release. @@ -9,7 +9,7 @@ libdrm (2.4.24-1) UNRELEASED; urgency=low warning, since patches were sent upstream to stop exporting private symbols: symbols-declares-dependency-on-other-package - -- Christopher James Halse Rogers <r...@ubuntu.com> Fri, 04 Mar 2011 11:24:07 +1100 + -- Cyril Brulebois <k...@debian.org> Sat, 05 Mar 2011 20:27:23 +0100 libdrm (2.4.23-3) unstable; urgency=low commit 80190376c877b3cc1fbd9888e225071f4d2bf1bd Author: Cyril Brulebois <k...@debian.org> Date: Sat Mar 5 20:27:07 2011 +0100 No need to mention previous cherry-picks. diff --git a/debian/changelog b/debian/changelog index 886c938..375199f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,7 +2,6 @@ libdrm (2.4.24-1) UNRELEASED; urgency=low [ Christopher James Halse Rogers ] * New upstream release. - - Contains intel cherry-picks taken in 2.4.23-3. * Add new internal radeon symbols to libkms1.symbols [ Cyril Brulebois ] commit fefbe7bcf96610372f6344ecd626d8b54b369b4a Author: Cyril Brulebois <k...@debian.org> Date: Sat Mar 5 20:17:49 2011 +0100 Add a reminder for lintian warning. diff --git a/debian/changelog b/debian/changelog index 9f5f54d..886c938 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,15 @@ libdrm (2.4.24-1) UNRELEASED; urgency=low + [ Christopher James Halse Rogers ] * New upstream release. - Contains intel cherry-picks taken in 2.4.23-3. * Add new internal radeon symbols to libkms1.symbols + [ Cyril Brulebois ] + * Just as a reminder, not adding a lintian override for the following + warning, since patches were sent upstream to stop exporting private + symbols: symbols-declares-dependency-on-other-package + -- Christopher James Halse Rogers <r...@ubuntu.com> Fri, 04 Mar 2011 11:24:07 +1100 libdrm (2.4.23-3) unstable; urgency=low commit a11ea35f4ffb32591da33dba6e242d246d58ad7d Author: Christopher James Halse Rogers <christopher.halse.rog...@canonical.com> Date: Fri Mar 4 12:56:52 2011 +1100 Add new radeon symbols to libkms diff --git a/debian/changelog b/debian/changelog index 9f791eb..9f5f54d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,7 @@ libdrm (2.4.24-1) UNRELEASED; urgency=low * New upstream release. - Contains intel cherry-picks taken in 2.4.23-3. + * Add new internal radeon symbols to libkms1.symbols -- Christopher James Halse Rogers <r...@ubuntu.com> Fri, 04 Mar 2011 11:24:07 +1100 diff --git a/debian/libkms1.symbols b/debian/libkms1.symbols index 0458f6e..bb782d1 100644 --- a/debian/libkms1.symbols +++ b/debian/libkms1.symbols @@ -11,4 +11,5 @@ libkms.so.1 libkms1 #MINVER# kms_get_prop@Base 0 linux_create@Base 0 1 nouveau_create@Base 0 1 + radeon_create@Base 2.4.24 1 vmwgfx_create@Base 0 1 commit 5be062e94c857e8c76b6e8a87ec5e0d5ceb0f9b6 Author: Christopher James Halse Rogers <christopher.halse.rog...@canonical.com> Date: Fri Mar 4 12:53:37 2011 +1100 Changelog entry for new upstream diff --git a/debian/changelog b/debian/changelog index 9e5318e..9f791eb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +libdrm (2.4.24-1) UNRELEASED; urgency=low + + * New upstream release. + - Contains intel cherry-picks taken in 2.4.23-3. + + -- Christopher James Halse Rogers <r...@ubuntu.com> Fri, 04 Mar 2011 11:24:07 +1100 + libdrm (2.4.23-3) unstable; urgency=low * Cherry-pick from upstream: commit d9f77af478d9d4b9225df97632701b18588a0bab Author: Christopher James Halse Rogers <christopher.halse.rog...@canonical.com> Date: Fri Mar 4 12:32:59 2011 +1100 Revert "intel: Fallback to old exec if no mrb_exec is available" It seems git got confused by an upstream rebase and didn't merge this cherry-pick with the original commit which causes the build to fail. This reverts commit e4aa4696a44b2bb571bf7ba56ccdff921e562205. diff --git a/intel/intel_bufmgr.c b/intel/intel_bufmgr.c index a1d846b..e949ff2 100644 --- a/intel/intel_bufmgr.c +++ b/intel/intel_bufmgr.c @@ -147,10 +147,6 @@ drm_intel_bo_mrb_exec(drm_intel_bo *bo, int used, return bo->bufmgr->bo_exec(bo, used, cliprects, num_cliprects, DR4); - if (ring_flag == 0) - return bo->bufmgr->bo_exec(bo, used, - cliprects, num_cliprects, DR4); - return -ENODEV; } commit a926a043b8079a8e283aa231e3c2347f5ad5864f Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Tue Mar 1 18:24:14 2011 +0000 configure: Bump version to 2.4.24 New kernel headers. Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/configure.ac b/configure.ac index 23ccedf..1998204 100644 --- a/configure.ac +++ b/configure.ac @@ -19,7 +19,7 @@ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. AC_PREREQ(2.60) -AC_INIT([libdrm], 2.4.23, [dri-de...@lists.sourceforge.net], libdrm) +AC_INIT([libdrm], 2.4.24, [dri-de...@lists.sourceforge.net], libdrm) AC_USE_SYSTEM_EXTENSIONS AC_CONFIG_SRCDIR([Makefile.am]) AM_INIT_AUTOMAKE([dist-bzip2]) commit 0209428b3918c4336018da9293cdcbf7f8fedfb6 Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Tue Mar 1 16:01:53 2011 +0000 intel: Add I915_PARAM_HAS_RELAXED_DELTA Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/include/drm/i915_drm.h b/include/drm/i915_drm.h index 98e1597..adc2392 100644 --- a/include/drm/i915_drm.h +++ b/include/drm/i915_drm.h @@ -281,6 +281,7 @@ typedef struct drm_i915_irq_wait { #define I915_PARAM_HAS_RELAXED_FENCING 12 #define I915_PARAM_HAS_COHERENT_RINGS 13 #define I915_PARAM_HAS_EXEC_CONSTANTS 14 +#define I915_PARAM_HAS_RELAXED_DELTA 15 typedef struct drm_i915_getparam { int param; commit e6018c25ca63fa6066d8fa6e57373030d07b0392 Author: Daniel Vetter <daniel.vet...@ffwll.ch> Date: Tue Feb 22 19:11:07 2011 +0100 intel: Fixup for the fix for relaxed tiling on gen2 This is Fail. First patch to libdrm, and I've borked it up. Noticed-by: Chris Wilson <ch...@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vet...@ffwll.ch> diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c index 9b324d9..f5ab0a6 100644 --- a/intel/intel_bufmgr_gem.c +++ b/intel/intel_bufmgr_gem.c @@ -767,7 +767,7 @@ drm_intel_gem_bo_alloc_tiled(drm_intel_bufmgr *bufmgr, const char *name, else if (tiling == I915_TILING_Y) height_alignment = 32; /* i8xx has a interleaved 2-row tile layout */ - if (IS_GEN2(bufmgr_gem)) + if (IS_GEN2(bufmgr_gem) && tiling != I915_TILING_NONE) height_alignment *= 2; aligned_y = ALIGN(y, height_alignment); commit 9a71ed93f48f4b319148913a6b56751f6341f078 Author: Daniel Vetter <daniel.vet...@ffwll.ch> Date: Tue Feb 22 18:53:56 2011 +0100 intel: fix relaxed tiling on gen2 Signed-off-by: Daniel Vetter <daniel.vet...@ffwll.ch> diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c index 3cdffce..9b324d9 100644 --- a/intel/intel_bufmgr_gem.c +++ b/intel/intel_bufmgr_gem.c @@ -744,7 +744,7 @@ drm_intel_gem_bo_alloc_tiled(drm_intel_bufmgr *bufmgr, const char *name, uint32_t tiling; do { - unsigned long aligned_y; + unsigned long aligned_y, height_alignment; tiling = *tiling_mode; @@ -760,12 +760,16 @@ drm_intel_gem_bo_alloc_tiled(drm_intel_bufmgr *bufmgr, const char *name, * too so we try to be careful. */ aligned_y = y; - if (tiling == I915_TILING_NONE) - aligned_y = ALIGN(y, 2); - else if (tiling == I915_TILING_X) - aligned_y = ALIGN(y, 8); + height_alignment = 2; + + if (tiling == I915_TILING_X) + height_alignment = 8; else if (tiling == I915_TILING_Y) - aligned_y = ALIGN(y, 32); + height_alignment = 32; + /* i8xx has a interleaved 2-row tile layout */ + if (IS_GEN2(bufmgr_gem)) + height_alignment *= 2; + aligned_y = ALIGN(y, height_alignment); stride = x * cpp; stride = drm_intel_gem_bo_tile_pitch(bufmgr_gem, stride, tiling_mode); commit a697fb6acad7992c3d23bb6a663663694782eb7b Author: Benjamin Franzke <benjaminfran...@googlemail.com> Date: Thu Feb 17 20:36:42 2011 +0100 modetest: Do no flip twice to a current front buffer The incorrect order was: fb, other_fb, other_fb, fb_id, other_fb, .. diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c index 6a40820..bd0f0a0 100644 --- a/tests/modetest/modetest.c +++ b/tests/modetest/modetest.c @@ -614,7 +614,7 @@ set_mode(struct connector *c, int count, int page_flip) c[i].swap_count = 0; c[i].fb_id[0] = fb_id; c[i].fb_id[1] = other_fb_id; - c[i].current_fb_id = fb_id; + c[i].current_fb_id = other_fb_id; } memset(&evctx, 0, sizeof evctx); commit 51c6ae4c3a0e5527d3c6e1632b21546baaba0b29 Author: Benjamin Franzke <benjaminfran...@googlemail.com> Date: Thu Feb 17 14:09:12 2011 +0100 tests/modeprint: Output masks as hex numbers diff --git a/tests/modeprint/modeprint.c b/tests/modeprint/modeprint.c index 4c612f4..09b8df0 100644 --- a/tests/modeprint/modeprint.c +++ b/tests/modeprint/modeprint.c @@ -193,8 +193,8 @@ int printEncoder(int fd, drmModeResPtr res, drmModeEncoderPtr encoder, uint32_t printf("\tid :%i\n", id); printf("\tcrtc_id :%d\n", encoder->crtc_id); printf("\ttype :%d\n", encoder->encoder_type); - printf("\tpossible_crtcs :%d\n", encoder->possible_crtcs); - printf("\tpossible_clones :%d\n", encoder->possible_clones); + printf("\tpossible_crtcs :0x%x\n", encoder->possible_crtcs); + printf("\tpossible_clones :0x%x\n", encoder->possible_clones); return 0; } commit 17762467850618323f59e91702e3fc0749fbceac Author: Benjamin Franzke <benjaminfran...@googlemail.com> Date: Thu Feb 17 14:07:58 2011 +0100 tests/modeprint: Remove needless dependency on drm_intel diff --git a/tests/modeprint/Makefile.am b/tests/modeprint/Makefile.am index 2ae0fdc..c4862ac 100644 --- a/tests/modeprint/Makefile.am +++ b/tests/modeprint/Makefile.am @@ -1,6 +1,5 @@ AM_CFLAGS = \ -I$(top_srcdir)/include/drm \ - -I$(top_srcdir)/intel/ \ -I$(top_srcdir) noinst_PROGRAMS = \ @@ -9,5 +8,4 @@ noinst_PROGRAMS = \ modeprint_SOURCES = \ modeprint.c modeprint_LDADD = \ - $(top_builddir)/libdrm.la \ - $(top_builddir)/intel/libdrm_intel.la + $(top_builddir)/libdrm.la commit 8fef29093fae2a08f8c1cb4946687bf4bb62a1ca Author: Benjamin Franzke <benjaminfran...@googlemail.com> Date: Thu Feb 17 10:47:47 2011 +0100 modetest: Create buffers using libkms diff --git a/tests/modetest/Makefile.am b/tests/modetest/Makefile.am index 16f5e99..2191242 100644 --- a/tests/modetest/Makefile.am +++ b/tests/modetest/Makefile.am @@ -1,6 +1,6 @@ AM_CFLAGS = \ -I$(top_srcdir)/include/drm \ - -I$(top_srcdir)/intel/ \ + -I$(top_srcdir)/libkms/ \ -I$(top_srcdir) \ $(CAIRO_CFLAGS) @@ -11,5 +11,5 @@ modetest_SOURCES = \ modetest.c modetest_LDADD = \ $(top_builddir)/libdrm.la \ - $(top_builddir)/intel/libdrm_intel.la \ + $(top_builddir)/libkms/libkms.la \ $(CAIRO_LIBS) diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c index f3a04d0..6a40820 100644 --- a/tests/modetest/modetest.c +++ b/tests/modetest/modetest.c @@ -51,8 +51,7 @@ #include "xf86drm.h" #include "xf86drmMode.h" -#include "intel_bufmgr.h" -#include "i915_drm.h" +#include "libkms.h" #ifdef HAVE_CAIRO #include <math.h> @@ -354,29 +353,49 @@ connector_find_mode(struct connector *c) c->crtc = c->encoder->crtc_id; } -static drm_intel_bo * -allocate_buffer(drm_intel_bufmgr *bufmgr, +static struct kms_bo * +allocate_buffer(struct kms_driver *kms, int width, int height, int *stride) { - int size; + struct kms_bo *bo; + unsigned bo_attribs[] = { + KMS_WIDTH, 0, + KMS_HEIGHT, 0, + KMS_BO_TYPE, KMS_BO_TYPE_SCANOUT_X8R8G8B8, + KMS_TERMINATE_PROP_LIST + }; + int ret; + + bo_attribs[1] = width; + bo_attribs[3] = height; + + ret = kms_bo_create(kms, bo_attribs, &bo); + if (ret) { + fprintf(stderr, "failed to alloc buffer: %s\n", + strerror(-ret)); + return NULL; + } - /* Scan-out has a 64 byte alignment restriction */ - size = (width + 63) & -64; - *stride = size; - size *= height; + ret = kms_bo_get_prop(bo, KMS_PITCH, stride); + if (ret) { + fprintf(stderr, "failed to retreive buffer stride: %s\n", + strerror(-ret)); + kms_bo_destroy(&bo); + return NULL; + } - return drm_intel_bo_alloc(bufmgr, "frontbuffer", size, 0); + return bo; } static void -make_pwetty(drm_intel_bo *bo, int width, int height, int stride) +make_pwetty(void *data, int width, int height, int stride) { #ifdef HAVE_CAIRO cairo_surface_t *surface; cairo_t *cr; int x, y; - surface = cairo_image_surface_create_for_data(bo->virtual, + surface = cairo_image_surface_create_for_data(data, CAIRO_FORMAT_ARGB32, width, height, stride); @@ -415,29 +434,29 @@ make_pwetty(drm_intel_bo *bo, int width, int height, int stride) } static int -create_test_buffer(drm_intel_bufmgr *bufmgr, - int width, int height, int *stride_out, drm_intel_bo **bo_out) +create_test_buffer(struct kms_driver *kms, + int width, int height, int *stride_out, + struct kms_bo **bo_out) { - drm_intel_bo *bo; + struct kms_bo *bo; int ret, i, j, stride; + void *virtual; - bo = allocate_buffer(bufmgr, width, height, &stride); - if (!bo) { - fprintf(stderr, "failed to alloc buffer: %s\n", - strerror(errno)); + bo = allocate_buffer(kms, width, height, &stride); + if (!bo) return -1; - } - ret = drm_intel_gem_bo_map_gtt(bo); + ret = kms_bo_map(bo, &virtual); if (ret) { - fprintf(stderr, "failed to GTT map buffer: %s\n", - strerror(errno)); + fprintf(stderr, "failed to map buffer: %s\n", + strerror(-ret)); + kms_bo_destroy(&bo); return -1; } /* paint the buffer with colored tiles */ for (j = 0; j < height; j++) { - uint32_t *fb_ptr = (uint32_t*)((char*)bo->virtual + j * stride); + uint32_t *fb_ptr = (uint32_t*)((char*)virtual + j * stride); for (i = 0; i < width; i++) { div_t d = div(i, width); fb_ptr[i] = @@ -446,9 +465,9 @@ create_test_buffer(drm_intel_bufmgr *bufmgr, } } - make_pwetty(bo, width, height, stride); + make_pwetty(virtual, width, height, stride); - drm_intel_gem_bo_unmap_gtt(bo); + kms_bo_unmap(bo); *bo_out = bo; *stride_out = stride; @@ -456,32 +475,29 @@ create_test_buffer(drm_intel_bufmgr *bufmgr, } static int -create_grey_buffer(drm_intel_bufmgr *bufmgr, - int width, int height, int *stride_out, drm_intel_bo **bo_out) +create_grey_buffer(struct kms_driver *kms, + int width, int height, int *stride_out, + struct kms_bo **bo_out) { - drm_intel_bo *bo; + struct kms_bo *bo; int size, ret, stride; + void *virtual; - /* Mode size at 32 bpp */ - stride = width * 4; - size = stride * height; - - bo = drm_intel_bo_alloc(bufmgr, "frontbuffer", size, 4096); - if (!bo) { - fprintf(stderr, "failed to alloc buffer: %s\n", - strerror(errno)); + bo = allocate_buffer(kms, width, height, &stride); + if (!bo) return -1; - } - ret = drm_intel_gem_bo_map_gtt(bo); + ret = kms_bo_map(bo, &virtual); if (ret) { - fprintf(stderr, "failed to GTT map buffer: %s\n", - strerror(errno)); + fprintf(stderr, "failed to map buffer: %s\n", + strerror(-ret)); + kms_bo_destroy(&bo); return -1; } - memset(bo->virtual, 0x77, size); - drm_intel_gem_bo_unmap_gtt(bo); + size = stride * height; + memset(virtual, 0x77, size); + kms_bo_unmap(bo); *bo_out = bo; *stride_out = stride; @@ -521,10 +537,11 @@ page_flip_handler(int fd, unsigned int frame, static void set_mode(struct connector *c, int count, int page_flip) { - drm_intel_bufmgr *bufmgr; - drm_intel_bo *bo, *other_bo; + struct kms_driver *kms; + struct kms_bo *bo, *other_bo; unsigned int fb_id, other_fb_id; int i, ret, width, height, x, stride; + unsigned handle; drmEventContext evctx; width = 0; @@ -538,17 +555,18 @@ set_mode(struct connector *c, int count, int page_flip) height = c[i].mode->vdisplay; } - bufmgr = drm_intel_bufmgr_gem_init(fd, 2<<20); - if (!bufmgr) { - fprintf(stderr, "failed to init bufmgr: %s\n", strerror(errno)); + ret = kms_create(fd, &kms); + if (ret) { + fprintf(stderr, "failed to create kms driver: %s\n", + strerror(-ret)); return; } - if (create_test_buffer(bufmgr, width, height, &stride, &bo)) + if (create_test_buffer(kms, width, height, &stride, &bo)) return; - ret = drmModeAddFB(fd, width, height, 32, 32, stride, bo->handle, - &fb_id); + kms_bo_get_prop(bo, KMS_HANDLE, &handle); + ret = drmModeAddFB(fd, width, height, 32, 32, stride, handle, &fb_id); if (ret) { fprintf(stderr, "failed to add fb: %s\n", strerror(errno)); return; @@ -574,11 +592,12 @@ set_mode(struct connector *c, int count, int page_flip) if (!page_flip) return; - - if (create_grey_buffer(bufmgr, width, height, &stride, &other_bo)) + + if (create_grey_buffer(kms, width, height, &stride, &other_bo)) return; - ret = drmModeAddFB(fd, width, height, 32, 32, stride, other_bo->handle, + kms_bo_get_prop(other_bo, KMS_HANDLE, &handle); + ret = drmModeAddFB(fd, width, height, 32, 32, stride, handle, &other_fb_id); if (ret) { fprintf(stderr, "failed to add fb: %s\n", strerror(errno)); @@ -640,6 +659,10 @@ set_mode(struct connector *c, int count, int page_flip) drmHandleEvent(fd, &evctx); } + + kms_bo_destroy(&bo); + kms_bo_destroy(&other_bo); + kms_destroy(&kms); } extern char *optarg; @@ -665,6 +688,9 @@ void usage(char *name) static int page_flipping_supported(int fd) { + /*FIXME: generic ioctl needed? */ + return 1; +#if 0 int ret, value; struct drm_i915_getparam gp; @@ -678,6 +704,7 @@ static int page_flipping_supported(int fd) } return *gp.value; +#endif } int main(int argc, char **argv) commit c75fe3ae738732afda3a7d4222bb3828ed9ef7a8 Author: Benjamin Franzke <benjaminfran...@googlemail.com> Date: Thu Feb 17 10:46:35 2011 +0100 configure.ac: ac_define HAVE_RADEON diff --git a/configure.ac b/configure.ac index b064665..23ccedf 100644 --- a/configure.ac +++ b/configure.ac @@ -244,6 +244,9 @@ fi AM_CONDITIONAL(HAVE_INTEL, [test "x$INTEL" != "xno"]) AM_CONDITIONAL(HAVE_RADEON, [test "x$RADEON" != "xno"]) +if test "x$RADEON" = xyes; then + AC_DEFINE(HAVE_RADEON, 1, [Have radeon support]) +fi AC_ARG_WITH([kernel-source], [AS_HELP_STRING([--with-kernel-source], commit ed7d177f66885dfbc4e8410154559c4767fefa9f Author: nobled <nob...@dreamwidth.org> Date: Thu Sep 9 10:07:21 2010 +0100 libkms/radeon: Add backend Todo: What tiling should be set on scanout buffers? Haven't tested besides compiling it. diff --git a/libkms/Makefile.am b/libkms/Makefile.am index 2c75878..5c2e63f 100644 --- a/libkms/Makefile.am +++ b/libkms/Makefile.am @@ -26,6 +26,10 @@ if HAVE_NOUVEAU libkms_la_SOURCES += nouveau.c endif +if HAVE_RADEON +libkms_la_SOURCES += radeon.c +endif + libkmsincludedir = ${includedir}/libkms libkmsinclude_HEADERS = libkms.h diff --git a/libkms/internal.h b/libkms/internal.h index 63122d1..51f5e65 100644 --- a/libkms/internal.h +++ b/libkms/internal.h @@ -70,4 +70,6 @@ int intel_create(int fd, struct kms_driver **out); int nouveau_create(int fd, struct kms_driver **out); +int radeon_create(int fd, struct kms_driver **out); + #endif diff --git a/libkms/linux.c b/libkms/linux.c index 02182d3..7449abc 100644 --- a/libkms/linux.c +++ b/libkms/linux.c @@ -111,6 +111,10 @@ linux_from_sysfs(int fd, struct kms_driver **out) else if (!strcmp(name, "nouveau")) ret = nouveau_create(fd, out); #endif +#ifdef HAVE_RADEON + else if (!strcmp(name, "radeon")) + ret = radeon_create(fd, out); +#endif else ret = -ENOSYS; diff --git a/libkms/radeon.c b/libkms/radeon.c new file mode 100644 index 0000000..f5e382a --- /dev/null +++ b/libkms/radeon.c @@ -0,0 +1,242 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER 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. + * + **************************************************************************/ + + +#define HAVE_STDINT_H +#define _FILE_OFFSET_BITS 64 + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "internal.h" + +#include <sys/mman.h> +#include <sys/ioctl.h> +#include "xf86drm.h" + +#include "radeon_drm.h" + + +#define ALIGNMENT 512 + +struct radeon_bo +{ + struct kms_bo base; + unsigned map_count; +}; + +static int +radeon_get_prop(struct kms_driver *kms, unsigned key, unsigned *out) +{ + switch (key) { + case KMS_BO_TYPE: + *out = KMS_BO_TYPE_SCANOUT_X8R8G8B8 | KMS_BO_TYPE_CURSOR_64X64_A8R8G8B8; + break; + default: + return -EINVAL; + } + return 0; +} + +static int +radeon_destroy(struct kms_driver *kms) +{ + free(kms); + return 0; +} + +static int +radeon_bo_create(struct kms_driver *kms, + const unsigned width, const unsigned height, + const enum kms_bo_type type, const unsigned *attr, + struct kms_bo **out) +{ + struct drm_radeon_gem_create arg; + unsigned size, pitch; + struct radeon_bo *bo; + int i, ret; + + for (i = 0; attr[i]; i += 2) { + switch (attr[i]) { + case KMS_WIDTH: + case KMS_HEIGHT: + case KMS_BO_TYPE: + break; + default: + return -EINVAL; + } + } + + switch (type) { + case KMS_BO_TYPE_CURSOR_64X64_A8R8G8B8: + pitch = 4 * 64; + size = 4 * 64 * 64; + break; + case KMS_BO_TYPE_SCANOUT_X8R8G8B8: + pitch = width * 4; + pitch = (pitch + ALIGNMENT - 1) & ~(ALIGNMENT - 1); + size = pitch * height; + break; + default: + return -EINVAL; + } + + bo = calloc(1, sizeof(*bo)); + if (!bo) + return -ENOMEM; + + memset(&arg, 0, sizeof(arg)); + arg.size = size; + arg.alignment = ALIGNMENT; + arg.initial_domain = RADEON_GEM_DOMAIN_CPU; + arg.flags = 0; + arg.handle = 0; + + ret = drmCommandWriteRead(kms->fd, DRM_RADEON_GEM_CREATE, + &arg, sizeof(arg)); + if (ret) + goto err_free; + + bo->base.kms = kms; + bo->base.handle = arg.handle; + bo->base.size = size; + bo->base.pitch = pitch; + bo->base.offset = 0; + bo->map_count = 0; + + *out = &bo->base; + + return 0; + +err_free: + free(bo); -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/e1q6cug-0006di...@alioth.debian.org