diff --git a/.gitignore b/.gitignore index e809df4..bcd8aaf 100644 --- a/.gitignore +++ b/.gitignore @@ -78,3 +78,4 @@ mesa-20100720.tar.bz2 /mesa-20140625.tar.xz /mesa-20140711.tar.xz /mesa-20140806.tar.xz +/mesa-20140824.tar.xz diff --git a/0001-llvmpipe-Work-without-sse2-if-llvm-is-new-enough.patch b/0001-llvmpipe-Work-without-sse2-if-llvm-is-new-enough.patch deleted file mode 100644 index dd7e11b..0000000 --- a/0001-llvmpipe-Work-without-sse2-if-llvm-is-new-enough.patch +++ /dev/null @@ -1,33 +0,0 @@ -From a499fd73461257f284bd3194f9198dc484acd373 Mon Sep 17 00:00:00 2001 -From: Adam Jackson -Date: Thu, 4 Apr 2013 17:16:22 -0400 -Subject: [PATCH] llvmpipe: Work without sse2 if llvm is new enough - -At least on llvm 3.2 this appears to work fine. Tested on an Athlon XP -2600+, which has sse and 3dnow but not sse2. - -Signed-off-by: Adam Jackson ---- - src/gallium/drivers/llvmpipe/lp_screen.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c -index 6700887..ebcf680 100644 ---- a/src/gallium/drivers/llvmpipe/lp_screen.c -+++ b/src/gallium/drivers/llvmpipe/lp_screen.c -@@ -485,9 +485,10 @@ llvmpipe_create_screen(struct sw_winsys *winsys) - { - struct llvmpipe_screen *screen; - --#ifdef PIPE_ARCH_X86 -- /* require SSE2 due to LLVM PR6960. */ - util_cpu_detect(); -+ -+#if defined(PIPE_ARCH_X86) && HAVE_LLVM < 0x0302 -+ /* require SSE2 due to LLVM PR6960. */ - if (!util_cpu_caps.has_sse2) - return NULL; - #endif --- -1.8.2 - diff --git a/0001-mesa-Be-less-casual-about-texture-formats-in-st_fina.patch b/0001-mesa-Be-less-casual-about-texture-formats-in-st_fina.patch deleted file mode 100644 index 45c5ea8..0000000 --- a/0001-mesa-Be-less-casual-about-texture-formats-in-st_fina.patch +++ /dev/null @@ -1,39 +0,0 @@ -From dfe652d12c62c270e00f093518a05c6966661b8a Mon Sep 17 00:00:00 2001 -From: Adam Jackson -Date: Mon, 6 May 2013 16:04:03 -0400 -Subject: [PATCH] mesa: Be less casual about texture formats in - st_finalize_texture - -Commit 62452883 removed a hunk like - - if (firstImageFormat != stObj->pt->format) - st_view_format = firstImageFormat; - -from update_single_texture(). This broke piglit/glx-tfp on AMD Barts -(and probably others), as that hunk was compensating for the mesa and -gallium layers disagreeing about the format. - -Fix this by not ignoring the alpha channel in st_finalize_texture when -considering whether two 32-bit formats are sufficiently compatible. - -Signed-off-by: Adam Jackson ---- - src/mesa/state_tracker/st_cb_texture.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c -index 123ed2b..0f2656c 100644 ---- a/src/mesa/state_tracker/st_cb_texture.c -+++ b/src/mesa/state_tracker/st_cb_texture.c -@@ -1567,7 +1567,7 @@ st_finalize_texture(struct gl_context *ctx, - */ - if (stObj->pt) { - if (stObj->pt->target != gl_target_to_pipe(stObj->base.Target) || -- !st_sampler_compat_formats(stObj->pt->format, firstImageFormat) || -+ stObj->pt->format != firstImageFormat || - stObj->pt->last_level < stObj->lastLevel || - stObj->pt->width0 != ptWidth || - stObj->pt->height0 != ptHeight || --- -1.8.2.1 - diff --git a/0001-opencl-use-versioned-.so-in-mesa.icd.patch b/0001-opencl-use-versioned-.so-in-mesa.icd.patch index 35c9c47..564ee2a 100644 --- a/0001-opencl-use-versioned-.so-in-mesa.icd.patch +++ b/0001-opencl-use-versioned-.so-in-mesa.icd.patch @@ -1,4 +1,4 @@ -From 062e79e1cc1e2d22d5d9d7fe5d394b923372fe45 Mon Sep 17 00:00:00 2001 +From 69b30e8f48b24a28c7d27ba59b02776da10cc5a6 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Sun, 12 Jan 2014 02:09:16 +0400 Subject: [PATCH] opencl: use versioned .so in mesa.icd @@ -19,7 +19,7 @@ Signed-off-by: Igor Gnatenko create mode 100644 src/gallium/targets/opencl/mesa.icd.in diff --git a/configure.ac b/configure.ac -index 164b662..fe64a9a 100644 +index 4646212..89a4f48 100644 --- a/configure.ac +++ b/configure.ac @@ -25,6 +25,8 @@ m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) @@ -31,27 +31,27 @@ index 164b662..fe64a9a 100644 dnl Versions for external dependencies LIBDRM_REQUIRED=2.4.38 -@@ -2111,6 +2113,7 @@ AC_CONFIG_FILES([Makefile - src/gallium/targets/egl-static/Makefile - src/gallium/targets/gbm/Makefile +@@ -2215,6 +2217,7 @@ AC_CONFIG_FILES([Makefile + src/gallium/targets/libgl-xlib/Makefile + src/gallium/targets/omx/Makefile src/gallium/targets/opencl/Makefile + src/gallium/targets/opencl/mesa.icd - src/gallium/targets/xa/Makefile - src/gallium/targets/xa/xatracker.pc - src/gallium/targets/omx-nouveau/Makefile + src/gallium/targets/osmesa/Makefile + src/gallium/targets/osmesa/osmesa.pc + src/gallium/targets/pipe-loader/Makefile diff --git a/src/gallium/targets/opencl/Makefile.am b/src/gallium/targets/opencl/Makefile.am -index ba45aee..0a3d134 100644 +index ca047f0..82e29a6 100644 --- a/src/gallium/targets/opencl/Makefile.am +++ b/src/gallium/targets/opencl/Makefile.am -@@ -5,7 +5,7 @@ lib_LTLIBRARIES = lib@OPENCL_LIBNAME@.la +@@ -7,7 +7,7 @@ lib_LTLIBRARIES = lib@OPENCL_LIBNAME@.la lib@OPENCL_LIBNAME@_la_LDFLAGS = \ $(LLVM_LDFLAGS) \ -no-undefined \ - -version-number 1:0 \ + -version-number @OPENCL_VERSION@:0 \ - -Wl,--version-script=$(top_srcdir)/src/gallium/targets/opencl/opencl.sym \ $(GC_SECTIONS) \ $(LD_NO_UNDEFINED) + diff --git a/src/gallium/targets/opencl/mesa.icd b/src/gallium/targets/opencl/mesa.icd deleted file mode 100644 index 6a6a870..0000000 diff --git a/make-git-snapshot.sh b/make-git-snapshot.sh index b5045fe..bce2972 100755 --- a/make-git-snapshot.sh +++ b/make-git-snapshot.sh @@ -11,15 +11,21 @@ else XZ=/usr/bin/xz fi -DIRNAME=mesa-$( date +%Y%m%d ) +if [ -z "$1" ]; then + DIRNAME=mesa-$( date +%Y%m%d ) + BRANCH=10.3 +else + DIRNAME=mesa-$1 + BRANCH=master +fi echo REF ${REF:+--reference $REF} echo DIRNAME $DIRNAME -echo HEAD ${1:-10.2} +echo HEAD ${1:-$BRANCH} rm -rf $DIRNAME -git clone --depth 1 ${REF:+--reference $REF} --branch 10.2 \ +git clone --depth 1 ${REF:+--reference $REF} --branch $BRANCH \ git://git.freedesktop.org/git/mesa/mesa $DIRNAME GIT_DIR=$DIRNAME/.git git archive --format=tar --prefix=$DIRNAME/ ${1:-HEAD} \ diff --git a/mesa-7.10-swrastg.patch b/mesa-7.10-swrastg.patch deleted file mode 100644 index 4fc5957..0000000 --- a/mesa-7.10-swrastg.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff -up mesa-20101020/src/gallium/drivers/llvmpipe/Makefile.jx mesa-20101020/src/gallium/drivers/llvmpipe/Makefile -diff -up mesa-20101020/src/gallium/targets/dri-swrast/Makefile.jx mesa-20101020/src/gallium/targets/dri-swrast/Makefile ---- mesa-20101020/src/gallium/targets/dri-swrast/Makefile.jx 2010-10-20 15:54:57.000000000 -0400 -+++ mesa-20101020/src/gallium/targets/dri-swrast/Makefile 2010-11-08 14:39:47.000000000 -0500 -@@ -26,6 +26,8 @@ C_SOURCES = \ - - ASM_SOURCES = - -+LDFLAGS += -Wl,--version-script,../version-script -+ - include ../Makefile.dri - - INCLUDES += \ -diff -up mesa-20101020/src/gallium/targets/version-script.jx mesa-20101020/src/gallium/targets/version-script ---- mesa-20101020/src/gallium/targets/version-script.jx 2010-11-08 14:39:56.000000000 -0500 -+++ mesa-20101020/src/gallium/targets/version-script 2010-11-08 14:40:36.000000000 -0500 -@@ -0,0 +1,6 @@ -+GALLIUM { -+ global: -+ __dri*; -+ local: -+ *; -+}; diff --git a/mesa-8.0-nouveau-tfp-blacklist.patch b/mesa-8.0-nouveau-tfp-blacklist.patch deleted file mode 100644 index bf7005a..0000000 --- a/mesa-8.0-nouveau-tfp-blacklist.patch +++ /dev/null @@ -1,201 +0,0 @@ -diff -up Mesa-8.0.1/src/gallium/include/state_tracker/drm_driver.h.jx Mesa-8.0.1/src/gallium/include/state_tracker/drm_driver.h ---- Mesa-8.0.1/src/gallium/include/state_tracker/drm_driver.h.jx 2012-02-14 18:44:00.000000000 -0500 -+++ Mesa-8.0.1/src/gallium/include/state_tracker/drm_driver.h 2012-03-23 13:11:40.785842579 -0400 -@@ -43,6 +43,7 @@ struct winsys_handle - enum drm_conf { - /* How many frames to allow before throttling. Or -1 to indicate any number */ - DRM_CONF_THROTTLE, /* DRM_CONF_INT. */ -+ DRM_CONF_NOTFP, - DRM_CONF_MAX - }; - -diff -up Mesa-8.0.1/src/gallium/state_trackers/dri/drm/dri2.c.jx Mesa-8.0.1/src/gallium/state_trackers/dri/drm/dri2.c ---- Mesa-8.0.1/src/gallium/state_trackers/dri/drm/dri2.c.jx 2012-02-14 18:44:00.000000000 -0500 -+++ Mesa-8.0.1/src/gallium/state_trackers/dri/drm/dri2.c 2012-03-23 13:11:40.785842579 -0400 -@@ -642,6 +642,13 @@ static struct __DRIimageExtensionRec dri - * Backend function init_screen. - */ - -+static const __DRIextension *dri_screen_extensions_no_tfp[] = { -+ &dri2FlushExtension.base, -+ &dri2ImageExtension.base, -+ &dri2ConfigQueryExtension.base, -+ NULL -+}; -+ - static const __DRIextension *dri_screen_extensions[] = { - &driTexBufferExtension.base, - &dri2FlushExtension.base, -@@ -671,6 +678,7 @@ dri2_init_screen(__DRIscreen * sPriv) - struct dri_screen *screen; - struct pipe_screen *pscreen; - const struct drm_conf_ret *throttle_ret = NULL; -+ const struct drm_conf_ret *notfp_ret = NULL; - - screen = CALLOC_STRUCT(dri_screen); - if (!screen) -@@ -682,12 +690,16 @@ dri2_init_screen(__DRIscreen * sPriv) - sPriv->driverPrivate = (void *)screen; - - pscreen = driver_descriptor.create_screen(screen->fd); -- if (driver_descriptor.configuration) -+ if (driver_descriptor.configuration) { - throttle_ret = driver_descriptor.configuration(DRM_CONF_THROTTLE); -+ throttle_ret = driver_descriptor.configuration(DRM_CONF_NOTFP); -+ } - - if (throttle_ret && throttle_ret->val.val_int != -1) { - sPriv->extensions = dri_screen_extensions_throttle; - screen->default_throttle_frames = throttle_ret->val.val_int; -+ } else if (notfp_ret && notfp_ret->val.val_bool == 1) { -+ sPriv->extensions = dri_screen_extensions_no_tfp; - } else - sPriv->extensions = dri_screen_extensions; - -diff -up Mesa-8.0.1/src/gallium/targets/dri-nouveau/target.c.jx Mesa-8.0.1/src/gallium/targets/dri-nouveau/target.c ---- Mesa-8.0.1/src/gallium/targets/dri-nouveau/target.c.jx 2012-02-14 18:44:00.000000000 -0500 -+++ Mesa-8.0.1/src/gallium/targets/dri-nouveau/target.c 2012-03-23 13:14:37.824416888 -0400 -@@ -3,6 +3,12 @@ - #include "state_tracker/drm_driver.h" - #include "nouveau/drm/nouveau_drm_public.h" - -+#include -+#include -+ -+/* yes this is an ugly hack */ -+static int nvfd = -1; -+ - static struct pipe_screen * - create_screen(int fd) - { -@@ -12,9 +18,52 @@ create_screen(int fd) - if (!screen) - return NULL; - -+ nvfd = fd; -+ - screen = debug_screen_wrap(screen); - - return screen; - } - --DRM_DRIVER_DESCRIPTOR("nouveau", "nouveau", create_screen, NULL) -+static const struct drm_conf_ret notfp_ret = { -+ .type = DRM_CONF_BOOL, -+ .val.val_bool = 1, -+}; -+ -+static const struct drm_conf_ret *drm_configuration(enum drm_conf conf) -+{ -+ switch (conf) { -+ case DRM_CONF_NOTFP: -+ { -+ /* have to open-code to reuse the fd */ -+ struct drm_nouveau_getparam g; -+ int vram; -+ -+ g.param = NOUVEAU_GETPARAM_CHIPSET_ID; -+ if (drmCommandWriteRead(nvfd, DRM_NOUVEAU_GETPARAM, &g, sizeof(g))) -+ return ¬fp_ret; /* error? paranoia */ -+ -+ if (g.value < 0x50) -+ return NULL; /* nv50+ okay */ -+ -+ if (g.value & 0xf0 == 0x30) -+ return ¬fp_ret; /* nv30 definitely horked */ -+ -+ g.param = NOUVEAU_GETPARAM_FB_SIZE; -+ if (drmCommandWriteRead(nvfd, DRM_NOUVEAU_GETPARAM, &g, sizeof(g))) -+ return ¬fp_ret; /* error? paranoia */ -+ -+ vram = g.value; -+ if ((vram >> 20) <= 64) -+ return ¬fp_ret; /* let's say <64M is too little */ -+ -+ return NULL; -+ } -+ -+ default: -+ break; -+ } -+ return NULL; -+} -+ -+DRM_DRIVER_DESCRIPTOR("nouveau", "nouveau", create_screen, drm_configuration) -diff -up Mesa-8.0.1/src/mesa/drivers/dri/nouveau/nouveau_screen.c.jx Mesa-8.0.1/src/mesa/drivers/dri/nouveau/nouveau_screen.c ---- Mesa-8.0.1/src/mesa/drivers/dri/nouveau/nouveau_screen.c.jx 2012-02-14 18:44:00.000000000 -0500 -+++ Mesa-8.0.1/src/mesa/drivers/dri/nouveau/nouveau_screen.c 2012-03-23 13:38:34.477024222 -0400 -@@ -37,7 +37,11 @@ - #include "main/renderbuffer.h" - #include "swrast/s_renderbuffer.h" - -+#include -+#include -+ - static const __DRIextension *nouveau_screen_extensions[]; -+static const __DRIextension *nouveau_screen_extensions_notfp[]; - - static void - nouveau_destroy_screen(__DRIscreen *dri_screen); -@@ -86,6 +90,28 @@ nouveau_get_configs(void) - return (const __DRIconfig **)configs; - } - -+static int -+shouldnt_tfp(int nvfd) -+{ -+ /* have to open-code to reuse the fd */ -+ struct drm_nouveau_getparam g; -+ int vram; -+ -+ g.param = NOUVEAU_GETPARAM_CHIPSET_ID; -+ if (drmCommandWriteRead(nvfd, DRM_NOUVEAU_GETPARAM, &g, sizeof(g))) -+ return 1; /* error? paranoia */ -+ -+ g.param = NOUVEAU_GETPARAM_FB_SIZE; -+ if (drmCommandWriteRead(nvfd, DRM_NOUVEAU_GETPARAM, &g, sizeof(g))) -+ return 1; /* error? paranoia */ -+ -+ vram = g.value; -+ if ((vram >> 20) <= 64) -+ return 1; /* let's say 64M is too little */ -+ -+ return 0; -+} -+ - static const __DRIconfig ** - nouveau_init_screen2(__DRIscreen *dri_screen) - { -@@ -99,7 +125,6 @@ nouveau_init_screen2(__DRIscreen *dri_sc - return NULL; - - dri_screen->driverPrivate = screen; -- dri_screen->extensions = nouveau_screen_extensions; - screen->dri_screen = dri_screen; - - /* Open the DRM device. */ -@@ -110,6 +135,11 @@ nouveau_init_screen2(__DRIscreen *dri_sc - goto fail; - } - -+ if (shouldnt_tfp(dri_screen->fd)) -+ dri_screen->extensions = nouveau_screen_extensions_notfp; -+ else -+ dri_screen->extensions = nouveau_screen_extensions; -+ - /* Choose the card specific function pointers. */ - switch (screen->device->chipset & 0xf0) { - case 0x00: -@@ -240,6 +270,12 @@ static const __DRIextension *nouveau_scr - &dri2ConfigQueryExtension.base, - NULL - }; -+ -+static const __DRIextension *nouveau_screen_extensions_notfp[] = { -+ &nouveau_flush_extension.base, -+ &dri2ConfigQueryExtension.base, -+ NULL -+}; - - const struct __DriverAPIRec driDriverAPI = { - .InitScreen = nouveau_init_screen2, diff --git a/mesa-9.0.1-less-cxx-please.patch b/mesa-9.0.1-less-cxx-please.patch deleted file mode 100644 index 4882782..0000000 --- a/mesa-9.0.1-less-cxx-please.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff -up Mesa-9.0.1/src/gallium/drivers/nv50/codegen/nv50_ir.cpp.jx Mesa-9.0.1/src/gallium/drivers/nv50/codegen/nv50_ir.cpp ---- Mesa-9.0.1/src/gallium/drivers/nv50/codegen/nv50_ir.cpp.jx 2012-08-31 19:33:41.000000000 -0400 -+++ Mesa-9.0.1/src/gallium/drivers/nv50/codegen/nv50_ir.cpp 2012-12-20 12:58:02.115699825 -0500 -@@ -715,7 +715,9 @@ Instruction::clone(ClonePolicy - { - if (!i) - i = new_Instruction(pol.context(), op, dType); -+#ifdef __GXX_RTTI - assert(typeid(*i) == typeid(*this)); -+#endif - - pol.set(this, i); - diff --git a/mesa-no-libkms.patch b/mesa-no-libkms.patch deleted file mode 100644 index bbcd629..0000000 --- a/mesa-no-libkms.patch +++ /dev/null @@ -1,978 +0,0 @@ -diff --git a/configure.ac b/configure.ac -index 8badb72..2a3e766 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1217,8 +1217,6 @@ if test "x$enable_gbm" = xyes; then - if test "x$enable_shared_glapi" = xno; then - AC_MSG_ERROR([gbm_dri requires --enable-shared-glapi]) - fi -- PKG_CHECK_MODULES([LIBKMS], [libkms], [], -- AC_MSG_ERROR([gbm needs libkms])) - fi - fi - GBM_PC_REQ_PRIV="libudev" -diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h -index 1e0f1d0..f35f857 100644 ---- a/include/GL/internal/dri_interface.h -+++ b/include/GL/internal/dri_interface.h -@@ -923,10 +923,6 @@ struct __DRIdri2ExtensionRec { - * __DRI_IMAGE_FORMAT_NONE is for images that aren't directly usable - * by the driver (YUV planar formats) but serve as a base image for - * creating sub-images for the different planes within the image. -- * -- * R8, GR88 and NONE should not be used with createImageFormName or -- * createImage, and are returned by query from sub images created with -- * createImageFromNames (NONE, see above) and fromPlane (R8 & GR88). - */ - #define __DRI_IMAGE_FORMAT_RGB565 0x1001 - #define __DRI_IMAGE_FORMAT_XRGB8888 0x1002 -@@ -939,50 +935,8 @@ struct __DRIdri2ExtensionRec { - - #define __DRI_IMAGE_USE_SHARE 0x0001 - #define __DRI_IMAGE_USE_SCANOUT 0x0002 --#define __DRI_IMAGE_USE_CURSOR 0x0004 /* Depricated */ -- -- --/** -- * Four CC formats that matches with WL_DRM_FORMAT_* from wayland_drm.h -- * and GBM_FORMAT_* from gbm.h, used with createImageFromNames. -- * -- * \since 5 -- */ -- --#define __DRI_IMAGE_FOURCC_RGB565 0x36314752 --#define __DRI_IMAGE_FOURCC_ARGB8888 0x34325241 --#define __DRI_IMAGE_FOURCC_XRGB8888 0x34325258 --#define __DRI_IMAGE_FOURCC_ABGR8888 0x34324241 --#define __DRI_IMAGE_FOURCC_XBGR8888 0x34324258 --#define __DRI_IMAGE_FOURCC_YUV410 0x39565559 --#define __DRI_IMAGE_FOURCC_YUV411 0x31315559 --#define __DRI_IMAGE_FOURCC_YUV420 0x32315559 --#define __DRI_IMAGE_FOURCC_YUV422 0x36315559 --#define __DRI_IMAGE_FOURCC_YUV444 0x34325559 --#define __DRI_IMAGE_FOURCC_NV12 0x3231564e --#define __DRI_IMAGE_FOURCC_NV16 0x3631564e --#define __DRI_IMAGE_FOURCC_YUYV 0x56595559 -- -- --/** -- * Queryable on images created by createImageFromNames. -- * -- * RGB and RGBA are may be usable directly as images but its still -- * recommended to call fromPlanar with plane == 0. -- * -- * Y_U_V, Y_UV and Y_XUXV all requires call to fromPlanar to create -- * usable sub-images, sampling from images return raw YUV data and -- * color conversion needs to be done in the shader. -- * -- * \since 5 -- */ -- --#define __DRI_IMAGE_COMPONENTS_RGB 0x3001 --#define __DRI_IMAGE_COMPONENTS_RGBA 0x3002 --#define __DRI_IMAGE_COMPONENTS_Y_U_V 0x3003 --#define __DRI_IMAGE_COMPONENTS_Y_UV 0x3004 --#define __DRI_IMAGE_COMPONENTS_Y_XUXV 0x3005 -- -+#define __DRI_IMAGE_USE_CURSOR 0x0004 -+#define __DRI_IMAGE_USE_WRITE 0x0008 - - /** - * queryImage attributes -@@ -994,7 +948,6 @@ struct __DRIdri2ExtensionRec { - #define __DRI_IMAGE_ATTRIB_FORMAT 0x2003 /* available in versions 3+ */ - #define __DRI_IMAGE_ATTRIB_WIDTH 0x2004 /* available in versions 4+ */ - #define __DRI_IMAGE_ATTRIB_HEIGHT 0x2005 --#define __DRI_IMAGE_ATTRIB_COMPONENTS 0x2006 /* available in versions 5+ */ - - typedef struct __DRIimageRec __DRIimage; - typedef struct __DRIimageExtensionRec __DRIimageExtension; -@@ -1032,17 +985,11 @@ struct __DRIimageExtensionRec { - GLboolean (*validateUsage)(__DRIimage *image, unsigned int use); - - /** -- * Unlike createImageFromName __DRI_IMAGE_FORMAT is not but instead -- * __DRI_IMAGE_FOURCC and strides are in bytes not pixels. Stride is -- * also per block and not per pixel (for non-RGB, see gallium blocks). -+ * Write data into image. - * -- * \since 5 -+ * \since 4 - */ -- __DRIimage *(*createImageFromNames)(__DRIscreen *screen, -- int width, int height, int fourcc, -- int *names, int num_names, -- int *strides, int *offsets, -- void *loaderPrivate); -+ int (*write)(__DRIimage *image, const void *buf, size_t count); - - /** - * Create an image out of a sub-region of a parent image. This -@@ -1059,8 +1006,10 @@ struct __DRIimageExtensionRec { - * - * \since 5 - */ -- __DRIimage *(*fromPlanar)(__DRIimage *image, int plane, -- void *loaderPrivate); -+ __DRIimage *(*createSubImage)(__DRIimage *image, -+ int width, int height, int format, -+ int offset, int pitch, -+ void *loaderPrivate); - }; - - -diff --git a/src/egl/drivers/dri2/Makefile.am b/src/egl/drivers/dri2/Makefile.am -index 45f7dfa..49ec06b 100644 ---- a/src/egl/drivers/dri2/Makefile.am -+++ b/src/egl/drivers/dri2/Makefile.am -@@ -30,7 +30,6 @@ AM_CFLAGS = \ - $(DEFINES) \ - $(LIBDRM_CFLAGS) \ - $(LIBUDEV_CFLAGS) \ -- $(LIBKMS_CFLAGS) \ - -DDEFAULT_DRIVER_DIR=\"$(DRI_DRIVER_SEARCH_DIR)\" - - noinst_LTLIBRARIES = libegl_dri2.la -diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c -index f2cce74..7326b85 100644 ---- a/src/egl/drivers/dri2/egl_dri2.c -+++ b/src/egl/drivers/dri2/egl_dri2.c -@@ -1093,16 +1093,68 @@ dri2_create_image_mesa_drm_buffer(_EGLDisplay *disp, _EGLContext *ctx, - * wl_drm format code to a description of the planes in the buffer - * that lets us create a __DRIimage for each of the planes. */ - --static const struct wl_drm_components_descriptor { -- uint32_t dri_components; -+static const struct wl_drm_format_descriptor { -+ uint32_t wl_format; - EGLint components; - int nplanes; --} wl_drm_components[] = { -- { __DRI_IMAGE_COMPONENTS_RGB, EGL_TEXTURE_RGB, 1 }, -- { __DRI_IMAGE_COMPONENTS_RGBA, EGL_TEXTURE_RGBA, 1 }, -- { __DRI_IMAGE_COMPONENTS_Y_U_V, EGL_TEXTURE_Y_U_V_WL, 3 }, -- { __DRI_IMAGE_COMPONENTS_Y_UV, EGL_TEXTURE_Y_UV_WL, 2 }, -- { __DRI_IMAGE_COMPONENTS_Y_XUXV, EGL_TEXTURE_Y_XUXV_WL, 2 }, -+ struct { -+ int buffer_index; -+ int width_shift; -+ int height_shift; -+ uint32_t dri_format; -+ int cpp; -+ } planes[3]; -+} wl_drm_formats[] = { -+ { WL_DRM_FORMAT_ARGB8888, EGL_TEXTURE_RGBA, 1, -+ { { 0, 0, 0, __DRI_IMAGE_FORMAT_ARGB8888, 4 }, } }, -+ -+ { WL_DRM_FORMAT_XRGB8888, EGL_TEXTURE_RGB, 1, -+ { { 0, 0, 0, __DRI_IMAGE_FORMAT_XRGB8888, 4 }, } }, -+ -+ { WL_DRM_FORMAT_YUV410, EGL_TEXTURE_Y_U_V_WL, 3, -+ { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -+ { 1, 2, 2, __DRI_IMAGE_FORMAT_R8, 1 }, -+ { 2, 2, 2, __DRI_IMAGE_FORMAT_R8, 1 } } }, -+ -+ { WL_DRM_FORMAT_YUV411, EGL_TEXTURE_Y_U_V_WL, 3, -+ { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -+ { 1, 2, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -+ { 2, 2, 0, __DRI_IMAGE_FORMAT_R8, 1 } } }, -+ -+ { WL_DRM_FORMAT_YUV420, EGL_TEXTURE_Y_U_V_WL, 3, -+ { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -+ { 1, 1, 1, __DRI_IMAGE_FORMAT_R8, 1 }, -+ { 2, 1, 1, __DRI_IMAGE_FORMAT_R8, 1 } } }, -+ -+ { WL_DRM_FORMAT_YUV422, EGL_TEXTURE_Y_U_V_WL, 3, -+ { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -+ { 1, 1, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -+ { 2, 1, 0, __DRI_IMAGE_FORMAT_R8, 1 } } }, -+ -+ { WL_DRM_FORMAT_YUV444, EGL_TEXTURE_Y_U_V_WL, 3, -+ { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -+ { 1, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -+ { 2, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 } } }, -+ -+ { WL_DRM_FORMAT_NV12, EGL_TEXTURE_Y_UV_WL, 2, -+ { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -+ { 1, 1, 1, __DRI_IMAGE_FORMAT_GR88, 2 } } }, -+ -+ { WL_DRM_FORMAT_NV16, EGL_TEXTURE_Y_UV_WL, 2, -+ { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -+ { 1, 1, 0, __DRI_IMAGE_FORMAT_GR88, 2 } } }, -+ -+ /* For YUYV buffers, we set up two overlapping DRI images and treat -+ * them as planar buffers in the compositors. Plane 0 is GR88 and -+ * samples YU or YV pairs and places Y into the R component, while -+ * plane 1 is ARGB and samples YUYV clusters and places pairs and -+ * places U into the G component and V into A. This lets the -+ * texture sampler interpolate the Y components correctly when -+ * sampling from plane 0, and interpolate U and V correctly when -+ * sampling from plane 1. */ -+ { WL_DRM_FORMAT_YUYV, EGL_TEXTURE_Y_XUXV_WL, 2, -+ { { 0, 0, 0, __DRI_IMAGE_FORMAT_GR88, 2 }, -+ { 0, 1, 0, __DRI_IMAGE_FORMAT_ARGB8888, 4 } } } - }; - - static _EGLImage * -@@ -1112,11 +1164,13 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, _EGLContext *ctx, - { - struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer; - struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); -- const struct wl_drm_components_descriptor *f; - __DRIimage *dri_image; - _EGLImageAttribs attrs; - EGLint err; -- int32_t plane; -+ uint32_t format; -+ int32_t offset, stride, plane, width, height; -+ int cpp, index; -+ const struct wl_drm_format_descriptor *f; - - if (!wayland_buffer_is_drm(&buffer->buffer)) - return NULL; -@@ -1135,12 +1189,17 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, _EGLContext *ctx, - return NULL; - } - -- dri_image = dri2_dpy->image->fromPlanar(buffer->driver_buffer, plane, NULL); -+ width = buffer->buffer.width >> f->planes[plane].width_shift; -+ height = buffer->buffer.height >> f->planes[plane].height_shift; -+ format = f->planes[plane].dri_format; -+ cpp = f->planes[plane].cpp; -+ index = f->planes[plane].buffer_index; -+ offset = buffer->offset[index]; -+ stride = buffer->stride[index]; - -- if (dri_image == NULL) { -- _eglError(EGL_BAD_PARAMETER, "dri2_create_image_wayland_wl_buffer"); -- return NULL; -- } -+ dri_image = dri2_dpy->image->createSubImage(buffer->driver_buffer, -+ width, height, format, -+ offset, stride / cpp, NULL); - - return dri2_create_image(disp, dri_image); - } -@@ -1301,31 +1360,24 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name, - { - _EGLDisplay *disp = user_data; - struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); -- __DRIimage *img; -- int i, dri_components = 0; -- -- img = dri2_dpy->image->createImageFromNames(dri2_dpy->dri_screen, -- buffer->buffer.width, -- buffer->buffer.height, -- buffer->format, (int*)&name, 1, -- buffer->stride, -- buffer->offset, -- NULL); -- -- if (img == NULL) -- return; -- -- dri2_dpy->image->queryImage(img, __DRI_IMAGE_ATTRIB_COMPONENTS, &dri_components); -+ int i; - -- buffer->driver_format = NULL; -- for (i = 0; i < ARRAY_SIZE(wl_drm_components); i++) -- if (wl_drm_components[i].dri_components == dri_components) -- buffer->driver_format = &wl_drm_components[i]; -+ for (i = 0; i < ARRAY_SIZE(wl_drm_formats); i++) -+ if (wl_drm_formats[i].wl_format == buffer->format) { -+ buffer->driver_format = &wl_drm_formats[i]; -+ break; -+ } - - if (buffer->driver_format == NULL) -- dri2_dpy->image->destroyImage(img); -- else -- buffer->driver_buffer = img; -+ return; -+ -+ buffer->driver_buffer = -+ dri2_dpy->image->createImageFromName(dri2_dpy->dri_screen, -+ buffer->buffer.width, -+ buffer->buffer.height, -+ __DRI_IMAGE_FORMAT_NONE, name, -+ buffer->stride[0] / 4, -+ NULL); - } - - static void -@@ -1390,7 +1442,7 @@ dri2_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *disp, - EGLint attribute, EGLint *value) - { - struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer; -- const struct wl_drm_components_descriptor *format; -+ const struct wl_drm_format_descriptor *format; - - if (!wayland_buffer_is_drm(&buffer->buffer)) - return EGL_FALSE; -diff --git a/src/gallium/state_trackers/dri/common/dri_screen.h b/src/gallium/state_trackers/dri/common/dri_screen.h -index ff48b02..2818e9c 100644 ---- a/src/gallium/state_trackers/dri/common/dri_screen.h -+++ b/src/gallium/state_trackers/dri/common/dri_screen.h -@@ -86,7 +86,6 @@ struct __DRIimageRec { - unsigned level; - unsigned layer; - uint32_t dri_format; -- uint32_t dri_components; - - void *loader_private; - }; -diff --git a/src/gallium/state_trackers/dri/drm/dri2.c b/src/gallium/state_trackers/dri/drm/dri2.c -index 2f83dab..d7f4dd6 100644 ---- a/src/gallium/state_trackers/dri/drm/dri2.c -+++ b/src/gallium/state_trackers/dri/drm/dri2.c -@@ -574,7 +574,6 @@ dri2_create_image(__DRIscreen *_screen, - img->level = 0; - img->layer = 0; - img->dri_format = format; -- img->dri_components = 0; - - img->loader_private = loaderPrivate; - return img; -@@ -613,11 +612,6 @@ dri2_query_image(__DRIimage *image, int attrib, int *value) - case __DRI_IMAGE_ATTRIB_HEIGHT: - *value = image->texture->height0; - return GL_TRUE; -- case __DRI_IMAGE_ATTRIB_COMPONENTS: -- if (image->dri_components == 0) -- return GL_FALSE; -- *value = image->dri_components; -- return GL_TRUE; - default: - return GL_FALSE; - } -@@ -636,8 +630,6 @@ dri2_dup_image(__DRIimage *image, void *loaderPrivate) - pipe_resource_reference(&img->texture, image->texture); - img->level = image->level; - img->layer = image->layer; -- /* This should be 0 for sub images, but dup is also used for base images. */ -- img->dri_components = image->dri_components; - img->loader_private = loaderPrivate; - - return img; -@@ -657,76 +649,6 @@ dri2_validate_usage(__DRIimage *image, unsigned int use) - return GL_FALSE; - } - --static __DRIimage * --dri2_from_names(__DRIscreen *screen, int width, int height, int format, -- int *names, int num_names, int *strides, int *offsets, -- void *loaderPrivate) --{ -- __DRIimage *img; -- int stride, dri_components; -- -- if (num_names != 1) -- return NULL; -- if (offsets[0] != 0) -- return NULL; -- -- switch(format) { -- case __DRI_IMAGE_FOURCC_RGB565: -- format = __DRI_IMAGE_FORMAT_RGB565; -- dri_components = __DRI_IMAGE_COMPONENTS_RGB; -- break; -- case __DRI_IMAGE_FOURCC_ARGB8888: -- format = __DRI_IMAGE_FORMAT_ARGB8888; -- dri_components = __DRI_IMAGE_COMPONENTS_RGBA; -- break; -- case __DRI_IMAGE_FOURCC_XRGB8888: -- format = __DRI_IMAGE_FORMAT_XRGB8888; -- dri_components = __DRI_IMAGE_COMPONENTS_RGB; -- break; -- case __DRI_IMAGE_FOURCC_ABGR8888: -- format = __DRI_IMAGE_FORMAT_ABGR8888; -- dri_components = __DRI_IMAGE_COMPONENTS_RGBA; -- break; -- case __DRI_IMAGE_FOURCC_XBGR8888: -- format = __DRI_IMAGE_FORMAT_XBGR8888; -- dri_components = __DRI_IMAGE_COMPONENTS_RGB; -- break; -- default: -- return NULL; -- } -- -- /* Strides are in bytes not pixels. */ -- stride = strides[0] /4; -- -- img = dri2_create_image_from_name(screen, width, height, format, -- names[0], stride, loaderPrivate); -- if (img == NULL) -- return NULL; -- -- img->dri_components = dri_components; -- return img; --} -- --static __DRIimage * --dri2_from_planar(__DRIimage *image, int plane, void *loaderPrivate) --{ -- __DRIimage *img; -- -- if (plane != 0) -- return NULL; -- -- if (image->dri_components == 0) -- return NULL; -- -- img = dri2_dup_image(image, loaderPrivate); -- if (img == NULL) -- return NULL; -- -- /* set this to 0 for sub images. */ -- img->dri_components = 0; -- return img; --} -- - static void - dri2_destroy_image(__DRIimage *img) - { -@@ -735,7 +657,7 @@ dri2_destroy_image(__DRIimage *img) - } - - static struct __DRIimageExtensionRec dri2ImageExtension = { -- { __DRI_IMAGE, 5 }, -+ { __DRI_IMAGE, 4 }, - dri2_create_image_from_name, - dri2_create_image_from_renderbuffer, - dri2_destroy_image, -@@ -743,8 +665,6 @@ static struct __DRIimageExtensionRec dri2ImageExtension = { - dri2_query_image, - dri2_dup_image, - dri2_validate_usage, -- dri2_from_names, -- dri2_from_planar, - }; - - /* -diff --git a/src/gbm/Makefile.am b/src/gbm/Makefile.am -index e22c55c..f079da1 100644 ---- a/src/gbm/Makefile.am -+++ b/src/gbm/Makefile.am -@@ -7,7 +7,6 @@ AM_CFLAGS = \ - -I$(top_srcdir)/include \ - -I$(top_srcdir)/src/gbm/main \ - $(LIBUDEV_CFLAGS) \ -- $(LIBKMS_CFLAGS) \ - $(DLOPEN_CFLAGS) \ - $(DEFINES) - -@@ -19,7 +18,7 @@ libgbm_la_SOURCES = \ - main/backend.c \ - main/common.c - libgbm_la_LDFLAGS = -version-info 1:0 --libgbm_la_LIBADD = $(LIBUDEV_LIBS) $(LIBKMS_LIBS) $(DLOPEN_LIBS) -+libgbm_la_LIBADD = $(LIBUDEV_LIBS) $(DLOPEN_LIBS) - - if HAVE_EGL_PLATFORM_WAYLAND - AM_CPPFLAGS = -DHAVE_WAYLAND_PLATFORM -diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c -index d8b1cc7..173e727 100644 ---- a/src/gbm/backends/dri/gbm_dri.c -+++ b/src/gbm/backends/dri/gbm_dri.c -@@ -299,21 +299,13 @@ gbm_dri_is_format_supported(struct gbm_device *gbm, - static int - gbm_dri_bo_write(struct gbm_bo *_bo, const void *buf, size_t count) - { -+ struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm); - struct gbm_dri_bo *bo = gbm_dri_bo(_bo); -- void *ptr; -- int ret; - -- if (bo->bo == NULL) -- return -1; -- -- ret = kms_bo_map(bo->bo, &ptr); -- if (ret < 0) -+ if (dri->image->base.version < 4) - return -1; - -- memcpy(ptr, buf, count); -- -- kms_bo_unmap(bo->bo); -- return 0; -+ return dri->image->write(bo->image, buf, count); - } - - static void -@@ -322,10 +314,7 @@ gbm_dri_bo_destroy(struct gbm_bo *_bo) - struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm); - struct gbm_dri_bo *bo = gbm_dri_bo(_bo); - -- if (bo->image != NULL) -- dri->image->destroyImage(bo->image); -- if (bo->bo != NULL) -- kms_bo_destroy(&bo->bo); -+ dri->image->destroyImage(bo->image); - free(bo); - } - -@@ -363,7 +352,7 @@ gbm_dri_bo_import(struct gbm_device *gbm, - struct gbm_dri_bo *bo; - __DRIimage *image; - unsigned dri_use = 0; -- int gbm_format; -+ int dri_format, width, height, gbm_format, stride, cpp, offset; - - /* Required for query image WIDTH & HEIGHT */ - if (dri->image->base.version < 4) -@@ -376,15 +365,20 @@ gbm_dri_bo_import(struct gbm_device *gbm, - struct wl_drm_buffer *wb = (struct wl_drm_buffer *) buffer; - - image = wb->driver_buffer; -- -+ stride = wb->stride[0]; -+ offset = wb->offset[0]; -+ cpp = 4; - switch (wb->format) { - case WL_DRM_FORMAT_XRGB8888: -+ dri_format = __DRI_IMAGE_FORMAT_XRGB8888; - gbm_format = GBM_FORMAT_XRGB8888; - break; - case WL_DRM_FORMAT_ARGB8888: -+ dri_format = __DRI_IMAGE_FORMAT_ARGB8888; - gbm_format = GBM_FORMAT_ARGB8888; - break; - case WL_DRM_FORMAT_YUYV: -+ dri_format = __DRI_IMAGE_FORMAT_ARGB8888; - gbm_format = GBM_FORMAT_YUYV; - break; - default: -@@ -396,15 +390,15 @@ gbm_dri_bo_import(struct gbm_device *gbm, - - case GBM_BO_IMPORT_EGL_IMAGE: - { -- int dri_format; - if (dri->lookup_image == NULL) - return NULL; - - image = dri->lookup_image(dri->screen, buffer, dri->lookup_user_data); - dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_FORMAT, &dri_format); - gbm_format = gbm_dri_to_gbm_format(dri_format); -- if (gbm_format == 0) -- return NULL; -+ dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_STRIDE, &stride); -+ offset = 0; -+ cpp = 4; - break; - } - -@@ -417,7 +411,13 @@ gbm_dri_bo_import(struct gbm_device *gbm, - if (bo == NULL) - return NULL; - -- bo->image = dri->image->dupImage(image, NULL); -+ dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_WIDTH, &width); -+ dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_HEIGHT, &height); -+ -+ bo->image = dri->image->createSubImage(image, -+ width, height, dri_format, -+ offset, stride / cpp, NULL); -+ - - if (usage & GBM_BO_USE_SCANOUT) - dri_use |= __DRI_IMAGE_USE_SCANOUT; -@@ -430,14 +430,10 @@ gbm_dri_bo_import(struct gbm_device *gbm, - } - - bo->base.base.gbm = gbm; -+ bo->base.base.width = width; -+ bo->base.base.height = height; -+ bo->base.base.stride = stride; - bo->base.base.format = gbm_format; -- -- dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_WIDTH, -- (int*)&bo->base.base.width); -- dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_HEIGHT, -- (int*)&bo->base.base.height); -- dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_STRIDE, -- (int*)&bo->base.base.stride); - dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_HANDLE, - &bo->base.base.handle.s32); - -@@ -454,6 +450,9 @@ gbm_dri_bo_create(struct gbm_device *gbm, - int dri_format; - unsigned dri_use = 0; - -+ if (dri->image->base.version < 4 && (usage & GBM_BO_USE_WRITE)) -+ return NULL; -+ - bo = calloc(1, sizeof *bo); - if (bo == NULL) - return NULL; -@@ -462,33 +461,6 @@ gbm_dri_bo_create(struct gbm_device *gbm, - bo->base.base.width = width; - bo->base.base.height = height; - -- if (usage & GBM_BO_USE_WRITE) { -- int ret; -- unsigned attrs[7] = { -- KMS_WIDTH, 64, -- KMS_HEIGHT, 64, -- KMS_BO_TYPE, KMS_BO_TYPE_SCANOUT_X8R8G8B8, -- KMS_TERMINATE_PROP_LIST, -- }; -- -- if (!(usage & GBM_BO_USE_CURSOR_64X64)) -- return NULL; -- -- if (dri->kms == NULL) -- return NULL; -- -- ret = kms_bo_create(dri->kms, attrs, &bo->bo); -- if (ret < 0) { -- free(bo); -- return NULL; -- } -- -- kms_bo_get_prop(bo->bo, KMS_PITCH, &bo->base.base.stride); -- kms_bo_get_prop(bo->bo, KMS_HANDLE, (unsigned*)&bo->base.base.handle); -- -- return &bo->base.base; -- } -- - switch (format) { - case GBM_FORMAT_RGB565: - dri_format =__DRI_IMAGE_FORMAT_RGB565; -@@ -512,6 +484,8 @@ gbm_dri_bo_create(struct gbm_device *gbm, - dri_use |= __DRI_IMAGE_USE_SCANOUT; - if (usage & GBM_BO_USE_CURSOR_64X64) - dri_use |= __DRI_IMAGE_USE_CURSOR; -+ if (usage & GBM_BO_USE_WRITE) -+ dri_use |= __DRI_IMAGE_USE_WRITE; - - /* Gallium drivers requires shared in order to get the handle/stride */ - dri_use |= __DRI_IMAGE_USE_SHARE; -@@ -594,21 +568,13 @@ dri_device_create(int fd) - dri->base.type = GBM_DRM_DRIVER_TYPE_DRI; - dri->base.base.name = "drm"; - -- kms_create(fd, &dri->kms); -- if (dri->kms == NULL) -- goto err_kms; -- - ret = dri_screen_create(dri); -- if (ret) -- goto err_dri; -+ if (ret) { -+ free(dri); -+ return NULL; -+ } - - return &dri->base.base; -- --err_dri: -- kms_destroy(&dri->kms); --err_kms: -- free(dri); -- return NULL; - } - - struct gbm_backend gbm_dri_backend = { -diff --git a/src/gbm/backends/dri/gbm_driint.h b/src/gbm/backends/dri/gbm_driint.h -index 4b619a0..f404368 100644 ---- a/src/gbm/backends/dri/gbm_driint.h -+++ b/src/gbm/backends/dri/gbm_driint.h -@@ -30,8 +30,6 @@ - - #include "gbmint.h" - --#include "libkms.h" -- - #include "common.h" - #include "common_drm.h" - -@@ -43,9 +41,6 @@ struct gbm_dri_surface; - struct gbm_dri_device { - struct gbm_drm_device base; - -- /* Only used for cursors */ -- struct kms_driver *kms; -- - void *driver; - - __DRIscreen *screen; -@@ -77,9 +72,6 @@ struct gbm_dri_bo { - struct gbm_drm_bo base; - - __DRIimage *image; -- -- /* Only used for cursors */ -- struct kms_bo *bo; - }; - - struct gbm_dri_surface { -diff --git a/src/mesa/drivers/dri/intel/intel_regions.h b/src/mesa/drivers/dri/intel/intel_regions.h -index 7480853..782d669 100644 ---- a/src/mesa/drivers/dri/intel/intel_regions.h -+++ b/src/mesa/drivers/dri/intel/intel_regions.h -@@ -141,38 +141,13 @@ uint32_t - intel_region_get_aligned_offset(struct intel_region *region, uint32_t x, - uint32_t y); - --/** -- * Used with images created with image_from_names -- * to help support planar images. -- */ --struct intel_image_format { -- int fourcc; -- int components; -- int nplanes; -- struct { -- int buffer_index; -- int width_shift; -- int height_shift; -- uint32_t dri_format; -- int cpp; -- } planes[3]; --}; -- - struct __DRIimageRec { - struct intel_region *region; - GLenum internal_format; -+ uint32_t usage; - uint32_t dri_format; - GLuint format; - uint32_t offset; -- -- /* -- * Need to save these here between calls to -- * image_from_names and calls to image_from_planar. -- */ -- uint32_t strides[3]; -- uint32_t offsets[3]; -- struct intel_image_format *planar_format; -- - void *data; - }; - -diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c -index 7476ca0..b245314 100644 ---- a/src/mesa/drivers/dri/intel/intel_screen.c -+++ b/src/mesa/drivers/dri/intel/intel_screen.c -@@ -190,59 +190,6 @@ static const struct __DRI2flushExtensionRec intelFlushExtension = { - dri2InvalidateDrawable, - }; - --struct intel_image_format intel_image_formats[] = { -- { __DRI_IMAGE_FOURCC_ARGB8888, __DRI_IMAGE_COMPONENTS_RGBA, 1, -- { { 0, 0, 0, __DRI_IMAGE_FORMAT_ARGB8888, 4 } } }, -- -- { __DRI_IMAGE_FOURCC_XRGB8888, __DRI_IMAGE_COMPONENTS_RGB, 1, -- { { 0, 0, 0, __DRI_IMAGE_FORMAT_XRGB8888, 4 }, } }, -- -- { __DRI_IMAGE_FOURCC_YUV410, __DRI_IMAGE_COMPONENTS_Y_U_V, 3, -- { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -- { 1, 2, 2, __DRI_IMAGE_FORMAT_R8, 1 }, -- { 2, 2, 2, __DRI_IMAGE_FORMAT_R8, 1 } } }, -- -- { __DRI_IMAGE_FOURCC_YUV411, __DRI_IMAGE_COMPONENTS_Y_U_V, 3, -- { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -- { 1, 2, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -- { 2, 2, 0, __DRI_IMAGE_FORMAT_R8, 1 } } }, -- -- { __DRI_IMAGE_FOURCC_YUV420, __DRI_IMAGE_COMPONENTS_Y_U_V, 3, -- { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -- { 1, 1, 1, __DRI_IMAGE_FORMAT_R8, 1 }, -- { 2, 1, 1, __DRI_IMAGE_FORMAT_R8, 1 } } }, -- -- { __DRI_IMAGE_FOURCC_YUV422, __DRI_IMAGE_COMPONENTS_Y_U_V, 3, -- { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -- { 1, 1, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -- { 2, 1, 0, __DRI_IMAGE_FORMAT_R8, 1 } } }, -- -- { __DRI_IMAGE_FOURCC_YUV444, __DRI_IMAGE_COMPONENTS_Y_U_V, 3, -- { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -- { 1, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -- { 2, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 } } }, -- -- { __DRI_IMAGE_FOURCC_NV12, __DRI_IMAGE_COMPONENTS_Y_UV, 2, -- { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -- { 1, 1, 1, __DRI_IMAGE_FORMAT_GR88, 2 } } }, -- -- { __DRI_IMAGE_FOURCC_NV16, __DRI_IMAGE_COMPONENTS_Y_UV, 2, -- { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, -- { 1, 1, 0, __DRI_IMAGE_FORMAT_GR88, 2 } } }, -- -- /* For YUYV buffers, we set up two overlapping DRI images and treat -- * them as planar buffers in the compositors. Plane 0 is GR88 and -- * samples YU or YV pairs and places Y into the R component, while -- * plane 1 is ARGB and samples YUYV clusters and places pairs and -- * places U into the G component and V into A. This lets the -- * texture sampler interpolate the Y components correctly when -- * sampling from plane 0, and interpolate U and V correctly when -- * sampling from plane 1. */ -- { __DRI_IMAGE_FOURCC_YUYV, __DRI_IMAGE_COMPONENTS_Y_XUXV, 2, -- { { 0, 0, 0, __DRI_IMAGE_FORMAT_GR88, 2 }, -- { 0, 1, 0, __DRI_IMAGE_FORMAT_ARGB8888, 4 } } } --}; -- - static __DRIimage * - intel_allocate_image(int dri_format, void *loaderPrivate) - { -@@ -302,7 +249,7 @@ intel_create_image_from_name(__DRIscreen *screen, - - image = intel_allocate_image(format, loaderPrivate); - if (image->format == MESA_FORMAT_NONE) -- cpp = 1; -+ cpp = 0; - else - cpp = _mesa_get_format_bytes(image->format); - image->region = intel_region_alloc_for_handle(intelScreen, -@@ -392,7 +339,13 @@ intel_create_image(__DRIscreen *screen, - tiling = I915_TILING_NONE; - } - -+ /* We only support write for cursor drm images */ -+ if ((use & __DRI_IMAGE_USE_WRITE) && -+ use != (__DRI_IMAGE_USE_WRITE | __DRI_IMAGE_USE_CURSOR)) -+ return NULL; -+ - image = intel_allocate_image(format, loaderPrivate); -+ image->usage = use; - cpp = _mesa_get_format_bytes(image->format); - image->region = - intel_region_alloc(intelScreen, tiling, cpp, width, height, true); -@@ -425,11 +378,6 @@ intel_query_image(__DRIimage *image, int attrib, int *value) - case __DRI_IMAGE_ATTRIB_HEIGHT: - *value = image->region->height; - return true; -- case __DRI_IMAGE_ATTRIB_COMPONENTS: -- if (image->planar_format == NULL) -- return false; -- *value = image->planar_format->components; -- return true; - default: - return false; - } -@@ -451,15 +399,12 @@ intel_dup_image(__DRIimage *orig_image, void *loaderPrivate) - } - - image->internal_format = orig_image->internal_format; -- image->planar_format = orig_image->planar_format; -+ image->usage = orig_image->usage; - image->dri_format = orig_image->dri_format; - image->format = orig_image->format; - image->offset = orig_image->offset; - image->data = loaderPrivate; -- -- memcpy(image->strides, orig_image->strides, sizeof(image->strides)); -- memcpy(image->offsets, orig_image->offsets, sizeof(image->offsets)); -- -+ - return image; - } - -@@ -471,76 +416,40 @@ intel_validate_usage(__DRIimage *image, unsigned int use) - return GL_FALSE; - } - -+ /* We only support write for cursor drm images */ -+ if ((use & __DRI_IMAGE_USE_WRITE) && -+ use != (__DRI_IMAGE_USE_WRITE | __DRI_IMAGE_USE_CURSOR)) -+ return GL_FALSE; -+ - return GL_TRUE; - } - --static __DRIimage * --intel_create_image_from_names(__DRIscreen *screen, -- int width, int height, int fourcc, -- int *names, int num_names, -- int *strides, int *offsets, -- void *loaderPrivate) -+static int -+intel_image_write(__DRIimage *image, const void *buf, size_t count) - { -- struct intel_image_format *f = NULL; -- __DRIimage *image; -- int i, index; -- -- if (screen == NULL || names == NULL || num_names != 1) -- return NULL; -- -- for (i = 0; i < ARRAY_SIZE(intel_image_formats); i++) { -- if (intel_image_formats[i].fourcc == fourcc) { -- f = &intel_image_formats[i]; -- } -- } -+ if (image->region->map_refcount) -+ return -1; -+ if (!(image->usage & __DRI_IMAGE_USE_WRITE)) -+ return -1; - -- if (f == NULL) -- return NULL; -+ drm_intel_bo_map(image->region->bo, true); -+ memcpy(image->region->bo->virtual, buf, count); -+ drm_intel_bo_unmap(image->region->bo); - -- image = intel_create_image_from_name(screen, width, height, -- __DRI_IMAGE_FORMAT_NONE, -- names[0], strides[0], -- loaderPrivate); -- -- if (image == NULL) -- return NULL; -- -- image->planar_format = f; -- for (i = 0; i < f->nplanes; i++) { -- index = f->planes[i].buffer_index; -- image->offsets[index] = offsets[index]; -- image->strides[index] = strides[index]; -- } -- -- return image; -+ return 0; - } - - static __DRIimage * --intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate) -+intel_create_sub_image(__DRIimage *parent, -+ int width, int height, int dri_format, -+ int offset, int pitch, void *loaderPrivate) - { -- int width, height, offset, stride, dri_format, cpp, index, pitch; -- struct intel_image_format *f; -- uint32_t mask_x, mask_y; - __DRIimage *image; -- -- if (parent == NULL || parent->planar_format == NULL) -- return NULL; -- -- f = parent->planar_format; -- -- if (plane >= f->nplanes) -- return NULL; -- -- width = parent->region->width >> f->planes[plane].width_shift; -- height = parent->region->height >> f->planes[plane].height_shift; -- dri_format = f->planes[plane].dri_format; -- index = f->planes[plane].buffer_index; -- offset = parent->offsets[index]; -- stride = parent->strides[index]; -+ int cpp; -+ uint32_t mask_x, mask_y; - - image = intel_allocate_image(dri_format, loaderPrivate); -- cpp = _mesa_get_format_bytes(image->format); /* safe since no none format */ -- pitch = stride / cpp; -+ cpp = _mesa_get_format_bytes(image->format); - if (offset + height * cpp * pitch > parent->region->bo->size) { - _mesa_warning(NULL, "intel_create_sub_image: subimage out of bounds"); - FREE(image); -@@ -581,8 +490,8 @@ static struct __DRIimageExtensionRec intelImageExtension = { - intel_query_image, - intel_dup_image, - intel_validate_usage, -- intel_create_image_from_names, -- intel_from_planar -+ intel_image_write, -+ intel_create_sub_image - }; - - static const __DRIextension *intelScreenExtensions[] = { diff --git a/mesa-undefined-symbols.patch b/mesa-undefined-symbols.patch deleted file mode 100644 index 5acc91f..0000000 --- a/mesa-undefined-symbols.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 6a934ff6638352b2c28cf5a7452fed2f32853c17 Mon Sep 17 00:00:00 2001 -From: Anssi Hannula -Date: Sun, 5 Aug 2012 00:47:06 +0300 -Subject: [PATCH] Fix undefined symbols in libOSMesa and libglapi - ---- - src/mapi/shared-glapi/Makefile.am | 2 +- - src/mesa/Makefile.am | 2 +- - src/mesa/drivers/osmesa/Makefile.am | 6 ++++++ - 3 files changed, 8 insertions(+), 2 deletions(-) - -diff --git a/src/mapi/shared-glapi/Makefile.am b/src/mapi/shared-glapi/Makefile.am -index 8db7688..8d41db2 100644 ---- a/src/mapi/shared-glapi/Makefile.am -+++ b/src/mapi/shared-glapi/Makefile.am -@@ -6,7 +6,7 @@ include $(top_srcdir)/src/mapi/mapi/sources.mak - - lib_LTLIBRARIES = libglapi.la - libglapi_la_SOURCES = $(MAPI_GLAPI_FILES) --libglapi_la_LDFLAGS = -no-undefined -+libglapi_la_LDFLAGS = -no-undefined -pthread - - include $(GLAPI)/gen/glapi_gen.mk - glapi_mapi_tmp.h : $(GLAPI)/gen/gl_and_es_API.xml $(glapi_gen_mapi_deps) -diff --git a/src/mesa/Makefile.am b/src/mesa/Makefile.am -index bb70ed6..82b2f36 100644 ---- a/src/mesa/Makefile.am -+++ b/src/mesa/Makefile.am -@@ -120,7 +120,7 @@ libmesa_la_SOURCES = \ - $(MESA_CXX_FILES) \ - $(MESA_ASM_FILES_FOR_ARCH) - --libmesa_la_LIBADD = $(top_builddir)/src/glsl/libglsl.la -+libmesa_la_LIBADD = $(top_builddir)/src/glsl/libglsl.la -ldl - libmesa_la_LDFLAGS = - - libmesagallium_la_SOURCES = \ -diff --git a/src/mesa/drivers/osmesa/Makefile.am b/src/mesa/drivers/osmesa/Makefile.am -index dbee925..5a1d88e 100644 ---- a/src/mesa/drivers/osmesa/Makefile.am -+++ b/src/mesa/drivers/osmesa/Makefile.am -@@ -39,6 +39,12 @@ lib@OSMESA_LIB@_la_LDFLAGS = -module -version-number @OSMESA_VERSION@ -shared -n - lib@OSMESA_LIB@_la_LIBADD = \ - $(top_builddir)/src/mesa/libmesa.la \ - $(top_builddir)/src/mapi/glapi/libglapi.la -+lib@OSMESA_LIB@_la_LIBTOOLFLAGS = --tag=CXX -+ -+if HAVE_SHARED_GLAPI -+lib@OSMESA_LIB@_la_LDFLAGS += -L$(top_builddir)/$(LIB_DIR) -+lib@OSMESA_LIB@_la_LIBADD += -lglapi -+endif - - # Provide compatibility with scripts for the old Mesa build system for - # a while by putting a link to the driver into /lib of the build tree. --- -1.7.10 - diff --git a/mesa.spec b/mesa.spec index 6f1baf2..c38fab5 100644 --- a/mesa.spec +++ b/mesa.spec @@ -13,7 +13,7 @@ # S390 doesn't have video cards, but we need swrast for xserver's GLX # llvm (and thus llvmpipe) doesn't actually work on ppc32 -%ifnarch s390 ppc +%ifnarch s390 ppc ppc64le %define with_llvm 1 %endif @@ -47,19 +47,20 @@ %define _default_patch_fuzz 2 -%define gitdate 20140806 -#% define snapshot +%define gitdate 20140824 +#% define githash c2867f5b3626157379ef0d4d5bcaf5180ca0ec1f +%define git %{?githash:%{githash}}%{!?githash:%{gitdate}} Summary: Mesa graphics libraries Name: mesa -Version: 10.2.5 -Release: 2.%{gitdate}%{?dist} +Version: 10.3 +Release: 0.rc1.%{git}%{?dist} License: MIT Group: System Environment/Libraries URL: http://www.mesa3d.org # Source0: MesaLib-%{version}.tar.xz -Source0: %{name}-%{gitdate}.tar.xz +Source0: %{name}-%{git}.tar.xz Source1: sanitize-tarball.sh Source2: make-release-tarball.sh Source3: make-git-snapshot.sh @@ -323,7 +324,7 @@ Mesa OpenCL development package. %prep #setup -q -n Mesa-%{version}%{?snapshot} -%setup -q -n mesa-%{gitdate} +%setup -q -n mesa-%{git} grep -q ^/ src/gallium/auxiliary/vl/vl_decoder.c && exit 1 %patch1 -p1 -b .nv50rtti @@ -535,14 +536,13 @@ rm -rf $RPM_BUILD_ROOT %{_libdir}/gallium-pipe/*.so %endif %{_libdir}/dri/swrast_dri.so +%{_libdir}/dri/kms_swrast_dri.so %if %{with_hardware} %if 0%{?with_omx} %files omx-drivers %defattr(-,root,root,-) -%{_libdir}/bellagio/libomx_nouveau.so* -%{_libdir}/bellagio/libomx_r600.so* -%{_libdir}/bellagio/libomx_radeonsi.so* +%{_libdir}/bellagio/libomx_mesa.so %endif %if 0%{?with_vdpau} %files vdpau-drivers @@ -565,6 +565,7 @@ rm -rf $RPM_BUILD_ROOT %{_includedir}/GL/glx.h %{_includedir}/GL/glx_mangle.h %{_includedir}/GL/glxext.h +%{_includedir}/GL/glcorearb.h %dir %{_includedir}/GL/internal %{_includedir}/GL/internal/dri_interface.h %{_libdir}/pkgconfig/dri.pc @@ -579,6 +580,7 @@ rm -rf $RPM_BUILD_ROOT %{_includedir}/EGL/egl.h %{_includedir}/EGL/eglmesaext.h %{_includedir}/EGL/eglplatform.h +%{_includedir}/EGL/eglextchromium.h %dir %{_includedir}/KHR %{_includedir}/KHR/khrplatform.h %{_libdir}/pkgconfig/egl.pc @@ -667,13 +669,17 @@ rm -rf $RPM_BUILD_ROOT %{_libdir}/libMesaOpenCL.so %endif +# Generate changelog using: +# git log old_commit_sha..new_commit_sha --format="- %H: %s (%an)" %changelog +* Sun Aug 24 2014 Igor Gnatenko - 10.3-0.rc1.20140824 +- 10.3-rc1 + * Sun Aug 17 2014 Fedora Release Engineering - 10.2.5-2.20140806 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild * Wed Aug 06 2014 Igor Gnatenko - 10.2.5-1.20140806 - 10.2.5 upstream release (RHBZ #1126223) - * Fri Jul 11 2014 Igor Gnatenko - 10.2.3-1.20140711 - 10.2.3 upstream release diff --git a/sources b/sources index 197e322..26b653b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -f03f73cc5541088276a6a63d0f48be10 mesa-20140806.tar.xz +abb3ea0771d72d9305f56cc37b11a25c mesa-20140824.tar.xz