Rebase to 'master' branch (f381c27c548aa28b003c8e188f5d627ab4105f76 commit)

Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
This commit is contained in:
Igor Gnatenko 2014-07-11 19:27:50 +04:00
parent 17dc7f453b
commit 007eb4e80d
12 changed files with 37 additions and 1369 deletions

1
.gitignore vendored
View file

@ -77,3 +77,4 @@ mesa-20100720.tar.bz2
/mesa-20140608.tar.xz
/mesa-20140625.tar.xz
/mesa-20140711.tar.xz
/mesa-f381c27c548aa28b003c8e188f5d627ab4105f76.tar.xz

View file

@ -1,33 +0,0 @@
From a499fd73461257f284bd3194f9198dc484acd373 Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
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 <ajax@redhat.com>
---
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

View file

@ -1,39 +0,0 @@
From dfe652d12c62c270e00f093518a05c6966661b8a Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
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 <ajax@redhat.com>
---
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

View file

@ -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 <i.gnatenko.brain@gmail.com>
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 <i.gnatenko.brain@gmail.com>
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

View file

@ -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.2
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} \

View file

@ -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:
+ *;
+};

View file

@ -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 <xf86drm.h>
+#include <nouveau_drm.h>
+
+/* 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 &notfp_ret; /* error? paranoia */
+
+ if (g.value < 0x50)
+ return NULL; /* nv50+ okay */
+
+ if (g.value & 0xf0 == 0x30)
+ return &notfp_ret; /* nv30 definitely horked */
+
+ g.param = NOUVEAU_GETPARAM_FB_SIZE;
+ if (drmCommandWriteRead(nvfd, DRM_NOUVEAU_GETPARAM, &g, sizeof(g)))
+ return &notfp_ret; /* error? paranoia */
+
+ vram = g.value;
+ if ((vram >> 20) <= 64)
+ return &notfp_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 <xf86drm.h>
+#include <nouveau_drm.h>
+
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,

View file

@ -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<Function>
{
if (!i)
i = new_Instruction(pol.context(), op, dType);
+#ifdef __GXX_RTTI
assert(typeid(*i) == typeid(*this));
+#endif
pol.set<Instruction>(this, i);

View file

@ -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[] = {

View file

@ -1,57 +0,0 @@
From 6a934ff6638352b2c28cf5a7452fed2f32853c17 Mon Sep 17 00:00:00 2001
From: Anssi Hannula <anssi.hannula@iki.fi>
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

View file

@ -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 20140711
#% define snapshot
#% define gitdate 20140510
%define githash f381c27c548aa28b003c8e188f5d627ab4105f76
%define git %{?githash:%{githash}}%{!?githash:%{gitdate}}
Summary: Mesa graphics libraries
Name: mesa
Version: 10.2.3
Release: 1.%{gitdate}%{?dist}
Version: 10.3
Release: 0.devel.19.%{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
@ -327,7 +328,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
@ -546,9 +547,7 @@ rm -rf $RPM_BUILD_ROOT
%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
@ -585,6 +584,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
@ -673,7 +673,12 @@ 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
* Fri Jul 11 2014 Igor Gnatenko <i.gnatenko.brain@gmail.com> - 10.3-0.devel.1.f381c27c548aa28b003c8e188f5d627ab4105f76
- Rebase to 'master' branch (f381c27c548aa28b003c8e188f5d627ab4105f76 commit)
* Fri Jul 11 2014 Igor Gnatenko <i.gnatenko.brain@gmail.com> - 10.2.3-1.20140711
- 10.2.3 upstream release

View file

@ -1 +1 @@
74c4f5f50aca7006cd537f99c085ab1b mesa-20140711.tar.xz
4dce9cb9f6e9e0f7f8e12f08dccd4285 mesa-f381c27c548aa28b003c8e188f5d627ab4105f76.tar.xz