summaryrefslogtreecommitdiff
path: root/extra/glamor-egl
diff options
context:
space:
mode:
authorNicolás Reynolds <fauno@endefensadelsl.org>2014-01-14 03:47:29 +0000
committerNicolás Reynolds <fauno@endefensadelsl.org>2014-01-14 03:47:29 +0000
commit271da49386e259723ef574713339f04886630604 (patch)
tree3357a1b3aa15cfd25145095c41b0a94612ce3635 /extra/glamor-egl
parentbcefa96cbc68f340b2aa11c108353993db074e76 (diff)
Tue Jan 14 03:40:13 UTC 2014
Diffstat (limited to 'extra/glamor-egl')
-rw-r--r--extra/glamor-egl/PKGBUILD19
-rw-r--r--extra/glamor-egl/compat-api.h107
-rw-r--r--extra/glamor-egl/compiler.h59
-rw-r--r--extra/glamor-egl/git-fixes.patch428
-rw-r--r--extra/glamor-egl/glamor_debug.h116
-rw-r--r--extra/glamor-egl/glamor_gl_dispatch.h137
-rw-r--r--extra/glamor-egl/glamor_glext.h64
-rw-r--r--extra/glamor-egl/glamor_priv.h1016
-rw-r--r--extra/glamor-egl/glamor_utils.h1836
-rw-r--r--extra/glamor-egl/glapi.h121
10 files changed, 11 insertions, 3892 deletions
diff --git a/extra/glamor-egl/PKGBUILD b/extra/glamor-egl/PKGBUILD
index 1a8f1336a..bf9b4bf2a 100644
--- a/extra/glamor-egl/PKGBUILD
+++ b/extra/glamor-egl/PKGBUILD
@@ -3,24 +3,27 @@
# Contributor: Eugeni Dodonov <eugeni@dodonov.net>
pkgname=glamor-egl
-pkgver=0.5.1
+pkgver=0.5.1.r256
pkgrel=1
pkgdesc='OpenGL based 2D rendering acceleration library'
arch=('i686' 'x86_64')
url="http://xorg.freedesktop.org/"
license=('custom')
depends=('mesa-libgl')
-makedepends=('xorg-server-devel')
-source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-conflicts=('glamor-git')
-sha256sums=('f42805b68e2bddc90cb5d9d3811e4f2176659c5686f295865839b20b7be7f359')
+makedepends=('xorg-server-devel' 'dri3proto' 'X-ABI-VIDEODRV_VERSION=15' 'git')
+conflicts=('xorg-server<1.15.0' 'X-ABI-VIDEODRV_VERSION<15' 'X-ABI-VIDEODRV_VERSION>=16' 'glamor-git')
+source=('glamor-egl::git+http://anongit.freedesktop.org/git/xorg/driver/glamor.git#commit=fb4d046c04002851a5e895726461509983f633e7')
+sha256sums=(SKIP)
+#source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+#sha256sums=('f42805b68e2bddc90cb5d9d3811e4f2176659c5686f295865839b20b7be7f359')
build() {
- cd ${srcdir}/${pkgname}-${pkgver}
+ cd glamor-egl
- ./configure --prefix=/usr \
+ ./autogen.sh --prefix=/usr \
--disable-static \
--enable-glx-tls \
+ --enable-xv \
#--with-xorg-conf-dir=/etc/X11/xorg.conf.d
#--help
#--enable-glamor-gles2 \ https://bugs.archlinux.org/task/34284
@@ -29,7 +32,7 @@ build() {
}
package() {
- cd "${srcdir}/${pkgname}-${pkgver}"
+ cd glamor-egl
make "DESTDIR=${pkgdir}" install
diff --git a/extra/glamor-egl/compat-api.h b/extra/glamor-egl/compat-api.h
deleted file mode 100644
index 1608478f8..000000000
--- a/extra/glamor-egl/compat-api.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2012 Red Hat, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Author: Dave Airlie <airlied@redhat.com>
- */
-
-/* this file provides API compat between server post 1.13 and pre it,
- it should be reused inside as many drivers as possible */
-#ifndef COMPAT_API_H
-#define COMPAT_API_H
-
-#ifndef GLYPH_HAS_GLYPH_PICTURE_ACCESSOR
-#define GetGlyphPicture(g, s) GlyphPicture((g))[(s)->myNum]
-#define SetGlyphPicture(g, s, p) GlyphPicture((g))[(s)->myNum] = p
-#endif
-
-#ifndef XF86_HAS_SCRN_CONV
-#define xf86ScreenToScrn(s) xf86Screens[(s)->myNum]
-#define xf86ScrnToScreen(s) screenInfo.screens[(s)->scrnIndex]
-#endif
-
-#ifndef XF86_SCRN_INTERFACE
-
-#define SCRN_ARG_TYPE int
-#define SCRN_INFO_PTR(arg1) ScrnInfoPtr scrn = xf86Screens[(arg1)]
-
-#define SCREEN_ARG_TYPE int
-#define SCREEN_PTR(arg1) ScreenPtr screen = screenInfo.screens[(arg1)]
-
-#define SCREEN_INIT_ARGS_DECL int scrnIndex, ScreenPtr screen, int argc, char **argv
-
-#define BLOCKHANDLER_ARGS_DECL int arg, pointer blockData, pointer timeout, pointer read_mask
-#define BLOCKHANDLER_ARGS arg, blockData, timeout, read_mask
-
-#define WAKEUPHANDLER_ARGS_DECL int arg, pointer wakeupData, unsigned long result, pointer read_mask
-#define WAKEUPHANDLER_ARGS arg, wakeupData, result, read_mask
-
-#define CLOSE_SCREEN_ARGS_DECL int scrnIndex, ScreenPtr screen
-#define CLOSE_SCREEN_ARGS scrnIndex, screen
-
-#define ADJUST_FRAME_ARGS_DECL int arg, int x, int y, int flags
-#define ADJUST_FRAME_ARGS(arg, x, y) (arg)->scrnIndex, x, y, 0
-
-#define SWITCH_MODE_ARGS_DECL int arg, DisplayModePtr mode, int flags
-#define SWITCH_MODE_ARGS(arg, m) (arg)->scrnIndex, m, 0
-
-#define FREE_SCREEN_ARGS_DECL int arg, int flags
-#define FREE_SCREEN_ARGS arg, flags
-
-#define VT_FUNC_ARGS_DECL int arg, int flags
-#define VT_FUNC_ARGS(flags) scrn->scrnIndex, (flags)
-
-#define XF86_ENABLEDISABLEFB_ARG(x) ((x)->scrnIndex)
-
-#else
-#define SCRN_ARG_TYPE ScrnInfoPtr
-#define SCRN_INFO_PTR(arg1) ScrnInfoPtr scrn = (arg1)
-
-#define SCREEN_ARG_TYPE ScreenPtr
-#define SCREEN_PTR(arg1) ScreenPtr screen = (arg1)
-
-#define SCREEN_INIT_ARGS_DECL ScreenPtr screen, int argc, char **argv
-
-#define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer timeout, pointer read_mask
-#define BLOCKHANDLER_ARGS arg, timeout, read_mask
-
-#define WAKEUPHANDLER_ARGS_DECL ScreenPtr arg, unsigned long result, pointer read_mask
-#define WAKEUPHANDLER_ARGS arg, result, read_mask
-
-#define CLOSE_SCREEN_ARGS_DECL ScreenPtr screen
-#define CLOSE_SCREEN_ARGS screen
-
-#define ADJUST_FRAME_ARGS_DECL ScrnInfoPtr arg, int x, int y
-#define ADJUST_FRAME_ARGS(arg, x, y) arg, x, y
-
-#define SWITCH_MODE_ARGS_DECL ScrnInfoPtr arg, DisplayModePtr mode
-#define SWITCH_MODE_ARGS(arg, m) arg, m
-
-#define FREE_SCREEN_ARGS_DECL ScrnInfoPtr arg
-#define FREE_SCREEN_ARGS arg
-
-#define VT_FUNC_ARGS_DECL ScrnInfoPtr arg
-#define VT_FUNC_ARGS(flags) scrn
-
-#define XF86_ENABLEDISABLEFB_ARG(x) (x)
-
-#endif
-#endif
diff --git a/extra/glamor-egl/compiler.h b/extra/glamor-egl/compiler.h
deleted file mode 100644
index fa2895976..000000000
--- a/extra/glamor-egl/compiler.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Authors:
- * Chris Wilson <chris@chris-wilson.co.uk>
- *
- * Copied from sna
- *
- */
-
-#ifndef _GLAMOR_COMPILER_H_
-#define _GLAMOR_COMPILER_H_
-
-#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
-#define likely(expr) (__builtin_expect (!!(expr), 1))
-#define unlikely(expr) (__builtin_expect (!!(expr), 0))
-#define noinline __attribute__((noinline))
-#define fastcall __attribute__((regparm(3)))
-#define must_check __attribute__((warn_unused_result))
-#define constant __attribute__((const))
-#else
-#define likely(expr) (expr)
-#define unlikely(expr) (expr)
-#define noinline
-#define fastcall
-#define must_check
-#define constant
-#endif
-
-#ifdef HAVE_VALGRIND
-#define VG(x) x
-#else
-#define VG(x)
-#endif
-
-#define VG_CLEAR(s) VG(memset(&s, 0, sizeof(s)))
-
-#define COMPILE_TIME_ASSERT(E) ((void)sizeof(char[1 - 2*!(E)]))
-
-#endif /* _SNA_COMPILER_H_ */
diff --git a/extra/glamor-egl/git-fixes.patch b/extra/glamor-egl/git-fixes.patch
deleted file mode 100644
index 7a03a225e..000000000
--- a/extra/glamor-egl/git-fixes.patch
+++ /dev/null
@@ -1,428 +0,0 @@
-From beeddaae1da253d1a442228a75f80ef40a0204ac Mon Sep 17 00:00:00 2001
-From: Michel Dänzer <michel.daenzer@amd.com>
-Date: Wed, 31 Oct 2012 15:56:00 +0000
-Subject: Don't use glBlitFramebufferEXT for overlapping copies.
-
-According to the GL_EXT_framebuffer_blit spec, the result of doing so is
-undefined. But we need well-defined results. :)
-
-Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
----
-diff --git a/src/glamor_copyarea.c b/src/glamor_copyarea.c
-index 7d06833..4e6f953 100644
---- a/src/glamor_copyarea.c
-+++ b/src/glamor_copyarea.c
-@@ -318,7 +318,8 @@ __glamor_copy_n_to_n(DrawablePtr src,
- dx, dy,
- src_pixmap, dst_pixmap);
- #ifndef GLAMOR_GLES2
-- if ((overlaped || glamor_priv->state != RENDER_STATE
-+ if (!overlaped &&
-+ (glamor_priv->state != RENDER_STATE
- || !src_pixmap_priv->base.gl_tex || !dst_pixmap_priv->base.gl_tex)
- && glamor_copy_n_to_n_fbo_blit(src, dst, gc, box, nbox, dx,
- dy)) {
---
-cgit v0.9.0.2-2-gbebe
-From f1457c1c59efdadbad25f01dce9433643d688844 Mon Sep 17 00:00:00 2001
-From: Zhigang Gong <zhigang.gong@linux.intel.com>
-Date: Tue, 13 Nov 2012 02:08:02 +0000
-Subject: glamor_compositerects: Need to initialize region before fallback.
-
-As we need to call DamageRegionAppend even for fallback path,
-we must initialize the region before do that. Pointed by
-Igor Vagulin.
-
-https://bugs.freedesktop.org/show_bug.cgi?id=56940
-
-Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
----
-diff --git a/src/glamor_compositerects.c b/src/glamor_compositerects.c
-index 5fe1bbf..f1564a2 100644
---- a/src/glamor_compositerects.c
-+++ b/src/glamor_compositerects.c
-@@ -131,16 +131,6 @@ glamor_composite_rectangles(CARD8 op,
- return;
- }
-
-- pixmap = glamor_get_drawable_pixmap(dst->pDrawable);
-- priv = glamor_get_pixmap_private(pixmap);
--
-- if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(priv))
-- goto fallback;
-- if (dst->alphaMap) {
-- DEBUGF("%s: fallback, dst has an alpha-map\n", __FUNCTION__);
-- goto fallback;
-- }
--
- if ((color->red|color->green|color->blue|color->alpha) <= 0x00ff) {
- switch (op) {
- case PictOpOver:
-@@ -204,6 +194,16 @@ glamor_composite_rectangles(CARD8 op,
- return;
- }
-
-+ pixmap = glamor_get_drawable_pixmap(dst->pDrawable);
-+ priv = glamor_get_pixmap_private(pixmap);
-+
-+ if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(priv))
-+ goto fallback;
-+ if (dst->alphaMap) {
-+ DEBUGF("%s: fallback, dst has an alpha-map\n", __FUNCTION__);
-+ goto fallback;
-+ }
-+
- need_free_region = TRUE;
-
- DEBUGF("%s: drawable extents (%d, %d),(%d, %d) x %d\n",
---
-cgit v0.9.0.2-2-gbebe
-From 4a0ac3ff00d70b13e8483d50657187c7abdfc110 Mon Sep 17 00:00:00 2001
-From: Dave Airlie <airlied@redhat.com>
-Date: Sat, 29 Dec 2012 06:28:17 +0000
-Subject: glamor: fix make distcheck part 1
-
-This just adds the headers, then it falls over on the sdk_HEADERS
-as it overrides proper install paths by the looks of it.
-
-Signed-off-by: Dave Airlie <airlied@redhat.com>
----
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 766aac7..e1ee86d 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -20,10 +20,13 @@ AM_CFLAGS = $(CWARNFLAGS) $(XORG_CFLAGS) $(DIX_CFLAGS) $(LIBDRM_CFLAGS)
- libglamor_la_LDFLAGS = -avoid-version
-
- libglamor_la_SOURCES = \
-+ compat-api.h \
- glamor.c \
- glamor_copyarea.c \
- glamor_copywindow.c \
- glamor_core.c \
-+ glamor_debug.h \
-+ glamor_gl_dispatch.h \
- glamor_fill.c \
- glamor_fillspans.c \
- glamor_getspans.c \
-@@ -42,6 +45,7 @@ libglamor_la_SOURCES = \
- glamor_copyplane.c\
- glamor_glyphblt.c\
- glamor_polyops.c\
-+ glamor_priv.h\
- glamor_pixmap.c\
- glamor_largepixmap.c\
- glamor_picture.c\
-@@ -49,7 +53,9 @@ libglamor_la_SOURCES = \
- glamor_gl_dispatch.c\
- glamor_fbo.c\
- glamor_compositerects.c\
-- glamor.h
-+ glamor_utils.h\
-+ glamor.h\
-+ glapi.h
-
- sdk_HEADERS = glamor.h
-
---
-cgit v0.9.0.2-2-gbebe
-From c6d9cb1eb4962a15f8bbc869e9fef6d1464165af Mon Sep 17 00:00:00 2001
-From: Dave Airlie <airlied@redhat.com>
-Date: Sat, 29 Dec 2012 06:42:10 +0000
-Subject: glamor: add compiler.h
-
-This is also required for distchecking.
-
-Signed-off-by: Dave Airlie <airlied@redhat.com>
----
-diff --git a/src/Makefile.am b/src/Makefile.am
-index e1ee86d..55721f6 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -21,6 +21,7 @@ libglamor_la_LDFLAGS = -avoid-version
-
- libglamor_la_SOURCES = \
- compat-api.h \
-+ compiler.h \
- glamor.c \
- glamor_copyarea.c \
- glamor_copywindow.c \
---
-cgit v0.9.0.2-2-gbebe
-From c0729336ae35dcc7e46bcf840d6e9a056d5cdd26 Mon Sep 17 00:00:00 2001
-From: Dave Airlie <airlied@redhat.com>
-Date: Sat, 29 Dec 2012 06:42:30 +0000
-Subject: glamor_utils: fix unlikely define use
-
-using a define across a split line expression is failure, compiling
-with warnings shows this up.
-
-Signed-off-by: Dave Airlie <airlied@redhat.com>
----
-diff --git a/src/glamor_utils.h b/src/glamor_utils.h
-index 36beb49..d307838 100644
---- a/src/glamor_utils.h
-+++ b/src/glamor_utils.h
-@@ -80,8 +80,7 @@
-
- #define pixmap_priv_get_fbo_off(_priv_, _xoff_, _yoff_) \
- do { \
-- if (unlikely(_priv_ && (_priv_)->type \
-- == GLAMOR_TEXTURE_LARGE)) { \
-+ if (unlikely(_priv_ && (_priv_)->type == GLAMOR_TEXTURE_LARGE)) { \
- *(_xoff_) = - (_priv_)->large.box.x1; \
- *(_yoff_) = - (_priv_)->large.box.y1; \
- } else { \
---
-cgit v0.9.0.2-2-gbebe
-From 61879504f86c5cb326cc06a5873283234cfbbcd2 Mon Sep 17 00:00:00 2001
-From: Michel Dänzer <michel.daenzer@amd.com>
-Date: Wed, 13 Mar 2013 16:15:33 +0000
-Subject: glamoregl: Use xf86ScreenToScrn()
-
-Fixes crashes when glamor is used for a GPU screen with xserver 1.13 or
-newer.
-
-Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=57200#c17
-
-Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
-Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
----
-diff --git a/src/glamor_egl.c b/src/glamor_egl.c
-index a248aa2..cd0bdc0 100644
---- a/src/glamor_egl.c
-+++ b/src/glamor_egl.c
-@@ -116,7 +116,7 @@ glamor_egl_get_screen_private(ScrnInfoPtr scrn)
- _X_EXPORT void
- glamor_egl_make_current(ScreenPtr screen)
- {
-- ScrnInfoPtr scrn = xf86Screens[screen->myNum];
-+ ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
- struct glamor_egl_screen_private *glamor_egl =
- glamor_egl_get_screen_private(scrn);
-
-@@ -139,7 +139,7 @@ glamor_egl_make_current(ScreenPtr screen)
- _X_EXPORT void
- glamor_egl_restore_context(ScreenPtr screen)
- {
-- ScrnInfoPtr scrn = xf86Screens[screen->myNum];
-+ ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
- struct glamor_egl_screen_private *glamor_egl =
- glamor_egl_get_screen_private(scrn);
-
-@@ -221,7 +221,7 @@ glamor_create_texture_from_image(struct glamor_egl_screen_private
- Bool
- glamor_egl_create_textured_screen(ScreenPtr screen, int handle, int stride)
- {
-- ScrnInfoPtr scrn = xf86Screens[screen->myNum];
-+ ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
- struct glamor_egl_screen_private *glamor_egl;
- PixmapPtr screen_pixmap;
-
-@@ -245,7 +245,7 @@ glamor_egl_create_textured_screen_ext(ScreenPtr screen,
- int stride,
- PixmapPtr *back_pixmap)
- {
-- ScrnInfoPtr scrn = xf86Screens[screen->myNum];
-+ ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
- struct glamor_egl_screen_private *glamor_egl;
-
- glamor_egl = glamor_egl_get_screen_private(scrn);
-@@ -272,7 +272,7 @@ Bool
- glamor_egl_create_textured_pixmap(PixmapPtr pixmap, int handle, int stride)
- {
- ScreenPtr screen = pixmap->drawable.pScreen;
-- ScrnInfoPtr scrn = xf86Screens[screen->myNum];
-+ ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
- struct glamor_egl_screen_private *glamor_egl;
- EGLImageKHR image;
- GLuint texture;
-@@ -318,7 +318,7 @@ done:
- static void
- _glamor_egl_destroy_pixmap_image(PixmapPtr pixmap)
- {
-- ScrnInfoPtr scrn = xf86Screens[pixmap->drawable.pScreen->myNum];
-+ ScrnInfoPtr scrn = xf86ScreenToScrn(pixmap->drawable.pScreen);
- EGLImageKHR image;
- struct glamor_egl_screen_private *glamor_egl =
- glamor_egl_get_screen_private(scrn);
-@@ -338,7 +338,7 @@ _glamor_egl_destroy_pixmap_image(PixmapPtr pixmap)
- _X_EXPORT void
- glamor_egl_exchange_buffers(PixmapPtr front, PixmapPtr back)
- {
-- ScrnInfoPtr scrn = xf86Screens[front->drawable.pScreen->myNum];
-+ ScrnInfoPtr scrn = xf86ScreenToScrn(front->drawable.pScreen);
- struct glamor_egl_screen_private *glamor_egl =
- glamor_egl_get_screen_private(scrn);
- EGLImageKHR old_front_image;
-@@ -371,7 +371,7 @@ glamor_egl_close_screen(CLOSE_SCREEN_ARGS_DECL)
- PixmapPtr screen_pixmap;
- EGLImageKHR back_image;
-
-- scrn = xf86Screens[screen->myNum];
-+ scrn = xf86ScreenToScrn(screen);
- glamor_egl = glamor_egl_get_screen_private(scrn);
- screen_pixmap = screen->GetScreenPixmap(screen);
-
-@@ -417,7 +417,7 @@ glamor_egl_has_extension(struct glamor_egl_screen_private *glamor_egl,
- void
- glamor_egl_screen_init(ScreenPtr screen)
- {
-- ScrnInfoPtr scrn = xf86Screens[screen->myNum];
-+ ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
- struct glamor_egl_screen_private *glamor_egl =
- glamor_egl_get_screen_private(scrn);
-
-@@ -588,7 +588,7 @@ glamor_gl_dispatch_init(ScreenPtr screen,
- struct glamor_gl_dispatch *dispatch,
- int gl_version)
- {
-- ScrnInfoPtr scrn = xf86Screens[screen->myNum];
-+ ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
- struct glamor_egl_screen_private *glamor_egl =
- glamor_egl_get_screen_private(scrn);
- if (!glamor_gl_dispatch_init_impl
---
-cgit v0.9.0.2-2-gbebe
-From 3cd34ba9f0708ab7d816eeee80139257fafcb4ad Mon Sep 17 00:00:00 2001
-From: Armin K <krejzi@email.com>
-Date: Wed, 13 Mar 2013 17:28:57 +0000
-Subject: Silence Automake 1.13 warnings
-
-warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
-
-Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
----
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 55721f6..2140b81 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -12,7 +12,7 @@ endif
-
- instdir = $(moduledir)
-
--INCLUDES = \
-+AM_CPPFLAGS = \
- $(XORG_INCS)
-
- AM_CFLAGS = $(CWARNFLAGS) $(XORG_CFLAGS) $(DIX_CFLAGS) $(LIBDRM_CFLAGS)
---
-cgit v0.9.0.2-2-gbebe
-From c7241f097ddb4d3bfb832f6b4ee6fafe8b4d2cfe Mon Sep 17 00:00:00 2001
-From: Armin K <krejzi@email.com>
-Date: Wed, 13 Mar 2013 17:28:58 +0000
-Subject: Properly dist necesary headers
-
-Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
----
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 2140b81..0879287 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -31,6 +31,7 @@ libglamor_la_SOURCES = \
- glamor_fill.c \
- glamor_fillspans.c \
- glamor_getspans.c \
-+ glamor_glext.h \
- glamor_glyphs.c \
- glamor_polyfillrect.c \
- glamor_polylines.c \
---
-cgit v0.9.0.2-2-gbebe
-From f2d7f1cf351bdc3a8a00fe564cd6a937db3b4e19 Mon Sep 17 00:00:00 2001
-From: Armin K <krejzi@email.com>
-Date: Wed, 13 Mar 2013 17:49:32 +0000
-Subject: First attempt to make libglamor.so shared versioned library
-
-As recommended by Michel in this thread reply:
-http://lists.freedesktop.org/archives/glamor/2013-March/000305.html
-
-v2: Correct shared library location in glamor.pc.in
-
-Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=62259
-
-Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
----
-diff --git a/glamor.pc.in b/glamor.pc.in
-index 74ecd2e..5257468 100644
---- a/glamor.pc.in
-+++ b/glamor.pc.in
-@@ -2,12 +2,11 @@ prefix=@prefix@
- exec_prefix=@exec_prefix@
- libdir=@libdir@
- includedir=@includedir@
--moduledir=@moduledir@
- sdkdir=@sdkdir@
- GLAMOR_GL_CFLAGS=@GLAMOR_GL_CFLAGS@
-
- Name: glamor
- Description: X.Org glamor common library.
- Version: @PACKAGE_VERSION@
--Cflags: -I${sdkdir} -L${moduledir} -lglamor ${GLAMOR_GL_CFLAGS}
--
-+Cflags: -I${sdkdir} ${GLAMOR_GL_CFLAGS}
-+Libs: -L${libdir} -lglamor
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 0879287..4beb559 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -1,4 +1,4 @@
--inst_LTLIBRARIES = libglamor.la
-+lib_LTLIBRARIES = libglamor.la
-
- # Override these since glamor doesn't need them and the needed files aren't
- # built (in hw/xfree86/os-support/solaris) until after glamor is built
-@@ -10,14 +10,12 @@ else
- libglamor_la_LIBADD = $(GL_LIBS)
- endif
-
--instdir = $(moduledir)
--
- AM_CPPFLAGS = \
- $(XORG_INCS)
-
- AM_CFLAGS = $(CWARNFLAGS) $(XORG_CFLAGS) $(DIX_CFLAGS) $(LIBDRM_CFLAGS)
-
--libglamor_la_LDFLAGS = -avoid-version
-+libglamor_la_LDFLAGS = -version-info 0:0:0
-
- libglamor_la_SOURCES = \
- compat-api.h \
-@@ -65,7 +63,8 @@ if EGL
- LIBGLAMOREGL = libglamoregl.la
- module_LTLIBRARIES = $(LIBGLAMOREGL)
- libglamoregl_la_DEPENDENCIES = libglamor.la
--libglamoregl_la_LDFLAGS = -avoid-version -module $(EGL_LIBS) -lglamor $(GLX_SYS_LIBS)
-+libglamoregl_la_LDFLAGS = -avoid-version -module
-+libglamoregl_la_LIBADD = $(EGL_LIBS) $(GLX_SYS_LIBS) libglamor.la
- libglamoregl_la_SOURCES = glamor_eglmodule.c $(top_srcdir)/src/glamor_egl.c
- libglamoregl_la_CFLAGS = $(AM_CFLAGS) $(GLX_DEFINES) -I$(top_srcdir)/src $(LIBDRM_CFLAGS) $(EGL_CFLAGS)
- endif
---
-cgit v0.9.0.2-2-gbebe
-From 81aadb8ae204f58d77a948c8624f1e72659dcdf0 Mon Sep 17 00:00:00 2001
-From: Armin K <krejzi@email.com>
-Date: Wed, 13 Mar 2013 17:49:33 +0000
-Subject: Don't use AC_PROG_LIBTOOL
-
-Autoconf only needs libtool macros which are copied when
-autoreconf is run. There is no need for looking for
-"libtool" program in PATH. This properly disables static
-libraries from being built and installed.
-
-Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
----
-diff --git a/configure.ac b/configure.ac
-index 230543c..5ff6ae1 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -37,7 +37,6 @@ AM_INIT_AUTOMAKE([foreign dist-bzip2])
- AM_MAINTAINER_MODE([enable])
-
- # Initialize libtool
--AC_PROG_LIBTOOL
- LT_PREREQ([2.2])
- LT_INIT([disable-static])
-
---
-cgit v0.9.0.2-2-gbebe
diff --git a/extra/glamor-egl/glamor_debug.h b/extra/glamor-egl/glamor_debug.h
deleted file mode 100644
index f0c969b11..000000000
--- a/extra/glamor-egl/glamor_debug.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright © 2009 Intel Corporation
- * Copyright © 1998 Keith Packard
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- * Zhigang Gong <zhigang.gong@gmail.com>
- *
- */
-
-#ifndef __GLAMOR_DEBUG_H__
-#define __GLAMOR_DEBUG_H__
-
-
-#define GLAMOR_DELAYED_STRING_MAX 64
-
-#define GLAMOR_DEBUG_NONE 0
-#define GLAMOR_DEBUG_UNIMPL 0
-#define GLAMOR_DEBUG_FALLBACK 1
-#define GLAMOR_DEBUG_TEXTURE_DOWNLOAD 2
-#define GLAMOR_DEBUG_TEXTURE_DYNAMIC_UPLOAD 3
-
-extern void
-AbortServer(void)
- _X_NORETURN;
-
-#define GLAMOR_PANIC(_format_, ...) \
- do { \
- LogMessageVerb(X_NONE, 0, "Glamor Fatal Error" \
- " at %32s line %d: " _format_ "\n", \
- __FUNCTION__, __LINE__, \
- ##__VA_ARGS__ ); \
- exit(1); \
- } while(0)
-
-
-
-
-#define __debug_output_message(_format_, _prefix_, ...) \
- LogMessageVerb(X_NONE, 0, \
- "%32s:\t" _format_ , \
- /*_prefix_,*/ \
- __FUNCTION__, \
- ##__VA_ARGS__)
-
-#define glamor_debug_output(_level_, _format_,...) \
- do { \
- if (glamor_debug_level >= _level_) \
- __debug_output_message(_format_, \
- "Glamor debug", \
- ##__VA_ARGS__); \
- } while(0)
-
-
-#define glamor_fallback(_format_,...) \
- do { \
- if (glamor_debug_level >= GLAMOR_DEBUG_FALLBACK) \
- __debug_output_message(_format_, \
- "Glamor fallback", \
- ##__VA_ARGS__);} while(0)
-
-
-
-#define glamor_delayed_fallback(_screen_, _format_,...) \
- do { \
- if (glamor_debug_level >= GLAMOR_DEBUG_FALLBACK) { \
- glamor_screen_private *_glamor_priv_; \
- _glamor_priv_ = glamor_get_screen_private(_screen_); \
- _glamor_priv_->delayed_fallback_pending = 1; \
- snprintf(_glamor_priv_->delayed_fallback_string, \
- GLAMOR_DELAYED_STRING_MAX, \
- "glamor delayed fallback: \t%s " _format_ , \
- __FUNCTION__, ##__VA_ARGS__); } } while(0)
-
-
-#define glamor_clear_delayed_fallbacks(_screen_) \
- do { \
- if (glamor_debug_level >= GLAMOR_DEBUG_FALLBACK) { \
- glamor_screen_private *_glamor_priv_; \
- _glamor_priv_ = glamor_get_screen_private(_screen_); \
- _glamor_priv_->delayed_fallback_pending = 0; } } while(0)
-
-#define glamor_report_delayed_fallbacks(_screen_) \
- do { \
- if (glamor_debug_level >= GLAMOR_DEBUG_FALLBACK) { \
- glamor_screen_private *_glamor_priv_; \
- _glamor_priv_ = glamor_get_screen_private(_screen_); \
- LogMessageVerb(X_INFO, 0, "%s", \
- _glamor_priv_->delayed_fallback_string); \
- _glamor_priv_->delayed_fallback_pending = 0; } } while(0)
-
-#define DEBUGF(str, ...) do {} while(0)
-//#define DEBUGF(str, ...) ErrorF(str, ##__VA_ARGS__)
-#define DEBUGRegionPrint(x) do {} while (0)
-//#define DEBUGRegionPrint RegionPrint
-
-
-#endif
diff --git a/extra/glamor-egl/glamor_gl_dispatch.h b/extra/glamor-egl/glamor_gl_dispatch.h
deleted file mode 100644
index b3fc3a629..000000000
--- a/extra/glamor-egl/glamor_gl_dispatch.h
+++ /dev/null
@@ -1,137 +0,0 @@
-typedef struct glamor_gl_dispatch {
- /* Transformation functions */
- void (*glMatrixMode) (GLenum mode);
- void (*glLoadIdentity) (void);
- void (*glViewport) (GLint x, GLint y, GLsizei width,
- GLsizei height);
- /* Drawing functions */
- void (*glRasterPos2i) (GLint x, GLint y);
-
- /* Vertex Array */
- void (*glDrawArrays) (GLenum mode, GLint first, GLsizei count);
-
- /* Elements Array*/
- void (*glDrawElements) (GLenum mode, GLsizei count, GLenum type, const GLvoid * indices);
-
- /* Raster functions */
- void (*glReadPixels) (GLint x, GLint y,
- GLsizei width, GLsizei height,
- GLenum format, GLenum type, GLvoid * pixels);
-
- void (*glDrawPixels) (GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const GLvoid * pixels);
- void (*glPixelStorei) (GLenum pname, GLint param);
- /* Texture Mapping */
-
- void (*glTexParameteri) (GLenum target, GLenum pname, GLint param);
- void (*glTexImage2D) (GLenum target, GLint level,
- GLint internalFormat,
- GLsizei width, GLsizei height,
- GLint border, GLenum format, GLenum type,
- const GLvoid * pixels);
- /* 1.1 */
- void (*glGenTextures) (GLsizei n, GLuint * textures);
- void (*glDeleteTextures) (GLsizei n, const GLuint * textures);
- void (*glBindTexture) (GLenum target, GLuint texture);
- void (*glTexSubImage2D) (GLenum target, GLint level,
- GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const GLvoid * pixels);
- /* MISC */
- void (*glFlush) (void);
- void (*glFinish) (void);
- void (*glGetIntegerv) (GLenum pname, GLint * params);
- const GLubyte *(*glGetString) (GLenum name);
- void (*glScissor) (GLint x, GLint y, GLsizei width,
- GLsizei height);
- void (*glEnable) (GLenum cap);
- void (*glDisable) (GLenum cap);
- void (*glBlendFunc) (GLenum sfactor, GLenum dfactor);
- void (*glLogicOp) (GLenum opcode);
-
- /* 1.3 */
- void (*glActiveTexture) (GLenum texture);
-
- /* GL Extentions */
- void (*glGenBuffers) (GLsizei n, GLuint * buffers);
- void (*glBufferData) (GLenum target, GLsizeiptr size,
- const GLvoid * data, GLenum usage);
- GLvoid *(*glMapBuffer) (GLenum target, GLenum access);
- GLvoid *(*glMapBufferRange) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
- GLboolean (*glUnmapBuffer) (GLenum target);
- void (*glBindBuffer) (GLenum target, GLuint buffer);
- void (*glDeleteBuffers) (GLsizei n, const GLuint * buffers);
-
- void (*glFramebufferTexture2D) (GLenum target, GLenum attachment,
- GLenum textarget, GLuint texture,
- GLint level);
- void (*glBindFramebuffer) (GLenum target, GLuint framebuffer);
- void (*glDeleteFramebuffers) (GLsizei n,
- const GLuint * framebuffers);
- void (*glGenFramebuffers) (GLsizei n, GLuint * framebuffers);
- GLenum (*glCheckFramebufferStatus) (GLenum target);
- void (*glBlitFramebuffer) (GLint srcX0, GLint srcY0, GLint srcX1,
- GLint srcY1, GLint dstX0, GLint dstY0,
- GLint dstX1, GLint dstY1,
- GLbitfield mask, GLenum filter);
-
- void (*glVertexAttribPointer) (GLuint index, GLint size,
- GLenum type, GLboolean normalized,
- GLsizei stride,
- const GLvoid * pointer);
- void (*glDisableVertexAttribArray) (GLuint index);
- void (*glEnableVertexAttribArray) (GLuint index);
- void (*glBindAttribLocation) (GLuint program, GLuint index,
- const GLchar * name);
-
- void (*glLinkProgram) (GLuint program);
- void (*glShaderSource) (GLuint shader, GLsizei count,
- const GLchar * *string,
- const GLint * length);
- void (*glUseProgram) (GLuint program);
- void (*glUniform1i) (GLint location, GLint v0);
- void (*glUniform1f) (GLint location, GLfloat v0);
- void (*glUniform4f) (GLint location, GLfloat v0, GLfloat v1,
- GLfloat v2, GLfloat v3);
- void (*glUniform1fv) (GLint location, GLsizei count,
- const GLfloat * value);
- void (*glUniform2fv) (GLint location, GLsizei count,
- const GLfloat * value);
- void (*glUniform4fv) (GLint location, GLsizei count,
- const GLfloat * value);
- void (*glUniformMatrix3fv) (GLint location, GLsizei count,
- GLboolean transpose, const GLfloat* value);
- GLuint (*glCreateProgram) (void);
- GLuint (*glDeleteProgram) (GLuint);
- GLuint (*glCreateShader) (GLenum type);
- void (*glCompileShader) (GLuint shader);
- void (*glAttachShader) (GLuint program, GLuint shader);
- void (*glDeleteShader) (GLuint shader);
- void (*glGetShaderiv) (GLuint shader, GLenum pname,
- GLint * params);
- void (*glGetShaderInfoLog) (GLuint shader, GLsizei bufSize,
- GLsizei * length, GLchar * infoLog);
- void (*glGetProgramiv) (GLuint program, GLenum pname,
- GLint * params);
- void (*glGetProgramInfoLog) (GLuint program, GLsizei bufSize,
- GLsizei * length, GLchar * infoLog);
- GLint (*glGetUniformLocation) (GLuint program,
- const GLchar * name);
-
-} glamor_gl_dispatch;
-
-
-typedef void *(*get_proc_address_t) (const char *);
-
-_X_EXPORT Bool
-glamor_gl_dispatch_init_impl(struct glamor_gl_dispatch *dispatch,
- int gl_version,
- get_proc_address_t get_proc_address);
-
-
-_X_EXPORT Bool
-glamor_gl_dispatch_init(ScreenPtr screen,
- struct glamor_gl_dispatch *dispatch,
- int gl_version);
diff --git a/extra/glamor-egl/glamor_glext.h b/extra/glamor-egl/glamor_glext.h
deleted file mode 100644
index 1f7206b99..000000000
--- a/extra/glamor-egl/glamor_glext.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright © 2001 Keith Packard
- * Copyright © 2008 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- * Zhigang Gong <zhigang.gong@linux.intel.com>
- *
- */
-
-
-#ifdef GLAMOR_GLES2
-
-#define GL_BGRA GL_BGRA_EXT
-#define GL_COLOR_INDEX 0x1900
-#define GL_BITMAP 0x1A00
-#define GL_UNSIGNED_INT_8_8_8_8 0x8035
-#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367
-#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
-#define GL_UNSIGNED_INT_10_10_10_2 0x8036
-#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364
-#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
-#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365
-
-#define GL_PIXEL_PACK_BUFFER 0x88EB
-#define GL_PIXEL_UNPACK_BUFFER 0x88EC
-#define GL_CLAMP_TO_BORDER 0x812D
-
-#define GL_READ_WRITE 0x88BA
-#define GL_READ_ONLY 0x88B8
-#define GL_WRITE_ONLY 0x88B9
-#define GL_STREAM_DRAW 0x88E0
-#define GL_STREAM_READ 0x88E1
-#define GL_PACK_ROW_LENGTH 0x0D02
-#define GL_UNPACK_ROW_LENGTH 0x0CF2
-
-#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB
-#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC
-#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
-
-#define GL_PACK_INVERT_MESA 0x8758
-#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
-#define GL_MAP_READ_BIT 0x0001
-#define GL_MAP_WRITE_BIT 0x0002
-
-#endif
diff --git a/extra/glamor-egl/glamor_priv.h b/extra/glamor-egl/glamor_priv.h
deleted file mode 100644
index 6e80ebdf9..000000000
--- a/extra/glamor-egl/glamor_priv.h
+++ /dev/null
@@ -1,1016 +0,0 @@
-/*
- * Copyright © 2008 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- * Eric Anholt <eric@anholt.net>
- *
- */
-#ifndef GLAMOR_PRIV_H
-#define GLAMOR_PRIV_H
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "compiler.h"
-
-#include <xorg-server.h>
-#ifndef DEBUG
-#define NDEBUG
-#endif
-#include "glamor.h"
-#include "compat-api.h"
-
-#define GL_GLEXT_PROTOTYPES
-
-#ifdef GLAMOR_GLES2
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
-
-#define GLAMOR_DEFAULT_PRECISION "precision mediump float;\n"
-#include "glamor_glext.h"
-#else
-#include <GL/gl.h>
-#include <GL/glext.h>
-#define GLAMOR_DEFAULT_PRECISION
-#endif
-
-#ifdef RENDER
-#include "glyphstr.h"
-#endif
-
-#include "glamor_debug.h"
-
-#include <list.h>
-/* The list.h rename all the function to add xorg_ prefix.
- We add hack here to avoid the compile error when using
- old version xserver header file.
- These will be removed in future. */
-#ifndef xorg_list_entry
-#define xorg_list list
-#define xorg_list_for_each_entry list_for_each_entry
-#define xorg_list_for_each_entry_safe list_for_each_entry_safe
-#define xorg_list_del list_del
-#define xorg_list_add list_add
-#define xorg_list_append list_append
-#define xorg_list_init list_init
-#endif
-
-struct glamor_pixmap_private;
-
-typedef struct glamor_composite_shader {
- GLuint prog;
- GLint dest_to_dest_uniform_location;
- GLint dest_to_source_uniform_location;
- GLint dest_to_mask_uniform_location;
- GLint source_uniform_location;
- GLint mask_uniform_location;
- GLint source_wh;
- GLint mask_wh;
- GLint source_repeat_mode;
- GLint mask_repeat_mode;
- union {
- float source_solid_color[4];
- struct {
- struct glamor_pixmap_private *source_priv;
- PicturePtr source;
- };
- };
-
- union {
- float mask_solid_color[4];
- struct {
- struct glamor_pixmap_private *mask_priv;
- PicturePtr mask;
- };
- };
-} glamor_composite_shader;
-
-enum shader_source {
- SHADER_SOURCE_SOLID,
- SHADER_SOURCE_TEXTURE,
- SHADER_SOURCE_TEXTURE_ALPHA,
- SHADER_SOURCE_COUNT,
-};
-
-enum shader_mask {
- SHADER_MASK_NONE,
- SHADER_MASK_SOLID,
- SHADER_MASK_TEXTURE,
- SHADER_MASK_TEXTURE_ALPHA,
- SHADER_MASK_COUNT,
-};
-
-enum shader_in {
- SHADER_IN_SOURCE_ONLY,
- SHADER_IN_NORMAL,
- SHADER_IN_CA_SOURCE,
- SHADER_IN_CA_ALPHA,
- SHADER_IN_COUNT,
-};
-
-struct shader_key {
- enum shader_source source;
- enum shader_mask mask;
- enum shader_in in;
-};
-
-struct blendinfo {
- Bool dest_alpha;
- Bool source_alpha;
- GLenum source_blend;
- GLenum dest_blend;
-};
-
-typedef struct {
- INT16 x_src;
- INT16 y_src;
- INT16 x_mask;
- INT16 y_mask;
- INT16 x_dst;
- INT16 y_dst;
- INT16 width;
- INT16 height;
-} glamor_composite_rect_t;
-
-
-enum glamor_vertex_type {
- GLAMOR_VERTEX_POS,
- GLAMOR_VERTEX_SOURCE,
- GLAMOR_VERTEX_MASK
-};
-
-
-enum gradient_shader {
- SHADER_GRADIENT_LINEAR,
- SHADER_GRADIENT_RADIAL,
- SHADER_GRADIENT_CONICAL,
- SHADER_GRADIENT_COUNT,
-};
-
-enum gradient_shader_prog {
- SHADER_GRADIENT_VS_PROG,
- SHADER_GRADIENT_FS_MAIN_PROG,
- SHADER_GRADIENT_FS_GETCOLOR_PROG,
- SHADER_GRADIENT_PROG_COUNT,
-};
-
-struct glamor_screen_private;
-struct glamor_pixmap_private;
-
-enum glamor_gl_flavor {
- GLAMOR_GL_DESKTOP, // OPENGL API
- GLAMOR_GL_ES2 // OPENGL ES2.0 API
-};
-
-#define GLAMOR_CREATE_PIXMAP_CPU 0x100
-#define GLAMOR_CREATE_PIXMAP_FIXUP 0x101
-#define GLAMOR_CREATE_FBO_NO_FBO 0x103
-#define GLAMOR_CREATE_PIXMAP_MAP 0x104
-
-#define GLAMOR_CREATE_TEXTURE_EXACT_SIZE 0x104
-
-#define GLAMOR_NUM_GLYPH_CACHE_FORMATS 2
-
-#define GLAMOR_COMPOSITE_VBO_VERT_CNT (64*1024)
-
-typedef struct {
- PicturePtr picture; /* Where the glyphs of the cache are stored */
- GlyphPtr *glyphs;
- uint16_t count;
- uint16_t evict;
-} glamor_glyph_cache_t;
-
-#include "glamor_gl_dispatch.h"
-
-struct glamor_saved_procs {
- CloseScreenProcPtr close_screen;
- CreateGCProcPtr create_gc;
- CreatePixmapProcPtr create_pixmap;
- DestroyPixmapProcPtr destroy_pixmap;
- GetSpansProcPtr get_spans;
- GetImageProcPtr get_image;
- CompositeProcPtr composite;
- CompositeRectsProcPtr composite_rects;
- TrapezoidsProcPtr trapezoids;
- GlyphsProcPtr glyphs;
- ChangeWindowAttributesProcPtr change_window_attributes;
- CopyWindowProcPtr copy_window;
- BitmapToRegionProcPtr bitmap_to_region;
- TrianglesProcPtr triangles;
- AddTrapsProcPtr addtraps;
- CreatePictureProcPtr create_picture;
- DestroyPictureProcPtr destroy_picture;
- UnrealizeGlyphProcPtr unrealize_glyph;
-};
-
-#ifdef GLAMOR_GLES2
-#define CACHE_FORMAT_COUNT 3
-#else
-#define CACHE_FORMAT_COUNT 2
-#endif
-
-#define CACHE_BUCKET_WCOUNT 4
-#define CACHE_BUCKET_HCOUNT 4
-
-#define GLAMOR_TICK_AFTER(t0, t1) \
- (((int)(t1) - (int)(t0)) < 0)
-
-#define IDLE_STATE 0
-#define RENDER_STATE 1
-#define BLIT_STATE 2
-#define RENDER_IDEL_MAX 32
-
-typedef struct glamor_screen_private {
- struct glamor_gl_dispatch _dispatch;
- int yInverted;
- unsigned int tick;
- enum glamor_gl_flavor gl_flavor;
- int has_pack_invert;
- int has_fbo_blit;
- int max_fbo_size;
-
- struct xorg_list fbo_cache[CACHE_FORMAT_COUNT][CACHE_BUCKET_WCOUNT][CACHE_BUCKET_HCOUNT];
- unsigned long fbo_cache_watermark;
-
- /* glamor_solid */
- GLint solid_prog;
- GLint solid_color_uniform_location;
-
- /* vertext/elment_index buffer object for render */
- GLuint vbo, ebo;
- int vbo_offset;
- int vbo_size;
- char *vb;
- int vb_stride;
- Bool has_source_coords, has_mask_coords;
- int render_nr_verts;
- glamor_composite_shader composite_shader[SHADER_SOURCE_COUNT]
- [SHADER_MASK_COUNT]
- [SHADER_IN_COUNT];
- glamor_glyph_cache_t glyphCaches[GLAMOR_NUM_GLYPH_CACHE_FORMATS];
- Bool glyph_cache_initialized;
-
- /* shaders to restore a texture to another texture.*/
- GLint finish_access_prog[2];
- GLint finish_access_revert[2];
- GLint finish_access_swap_rb[2];
-
- /* glamor_tile */
- GLint tile_prog;
- GLint tile_wh;
-
- /* glamor gradient, 0 for small nstops, 1 for
- large nstops and 2 for dynamic generate. */
- GLint gradient_prog[SHADER_GRADIENT_COUNT][3];
- GLint linear_gradient_shaders[SHADER_GRADIENT_PROG_COUNT][3];
- int linear_max_nstops;
- GLint radial_gradient_shaders[SHADER_GRADIENT_PROG_COUNT][3];
- int radial_max_nstops;
-
- /* glamor trapezoid shader. */
- GLint trapezoid_prog;
-
- /* glamor_putimage */
- GLint put_image_xybitmap_prog;
- GLint put_image_xybitmap_fg_uniform_location;
- GLint put_image_xybitmap_bg_uniform_location;
-
- PixmapPtr *back_pixmap;
- int screen_fbo;
- struct glamor_saved_procs saved_procs;
- char delayed_fallback_string[GLAMOR_DELAYED_STRING_MAX + 1];
- int delayed_fallback_pending;
- int flags;
- int state;
- unsigned int render_idle_cnt;
- ScreenPtr screen;
-} glamor_screen_private;
-
-typedef enum glamor_access {
- GLAMOR_ACCESS_RO,
- GLAMOR_ACCESS_RW,
- GLAMOR_ACCESS_WO,
-} glamor_access_t;
-
-#define GLAMOR_FBO_NORMAL 1
-#define GLAMOR_FBO_DOWNLOADED 2
-/* glamor_pixmap_fbo:
- * @list: to be used to link to the cache pool list.
- * @expire: when push to cache pool list, set a expire count.
- * will be freed when glamor_priv->tick is equal or
- * larger than this expire count in block handler.
- * @pbo_valid: The pbo has a valid copy of the pixmap's data.
- * @tex: attached texture.
- * @fb: attached fbo.
- * @pbo: attached pbo.
- * @width: width of this fbo.
- * @height: height of this fbo.
- * @format: internal format of this fbo's texture.
- * @type: internal type of this fbo's texture.
- * @glamor_priv: point to glamor private data.
- */
-typedef struct glamor_pixmap_fbo {
- struct xorg_list list;
- unsigned int expire;
- unsigned char pbo_valid;
- GLuint tex;
- GLuint fb;
- GLuint pbo;
- int width;
- int height;
- GLenum format;
- GLenum type;
- glamor_screen_private *glamor_priv;
-} glamor_pixmap_fbo;
-
-/*
- * glamor_pixmap_private - glamor pixmap's private structure.
- * @gl_fbo:
- * 0 - The pixmap doesn't has a fbo attached to it.
- * GLAMOR_FBO_NORMAL - The pixmap has a fbo and can be accessed normally.
- * GLAMOR_FBO_DOWNLOADED - The pixmap has a fbo and already downloaded to
- * CPU, so it can only be treated as a in-memory pixmap
- * if this bit is set.
- * @gl_tex: The pixmap is in a gl texture originally.
- * @is_picture: The drawable is attached to a picture.
- * @pict_format: the corresponding picture's format.
- * @pixmap: The corresponding pixmap's pointer.
- *
- * For GLAMOR_TEXTURE_LARGE, nbox should larger than 1.
- * And the box and fbo will both have nbox elements.
- * and box[i] store the relatively coords in this pixmap
- * of the fbo[i]. The reason why use boxes not region to
- * represent this structure is we may need to use overlapped
- * boxes for one pixmap for some special reason.
- *
- * pixmap
- * ******************
- * * fbo0 * fbo1 *
- * * * *
- * ******************
- * * fbo2 * fbo3 *
- * * * *
- * ******************
- *
- * Let's assume the texture has size of 1024x1024
- * box[0] = {0,0,1024,1024}
- * box[1] = {1024,0,2048,2048}
- * ...
- *
- * For GLAMOR_TEXTURE_ATLAS nbox should be 1. And box
- * and fbo both has one elements, and the box store
- * the relatively coords in the fbo of this pixmap:
- *
- * fbo
- * ******************
- * * pixmap *
- * * ********* *
- * * * * *
- * * ********* *
- * * *
- * ******************
- *
- * Assume the pixmap is at the (100,100) relatively to
- * the fbo's origin.
- * box[0]={100, 100, 1124, 1124};
- *
- * Considering large pixmap is not a normal case, to keep
- * it simple, I designe it as the following way.
- * When deal with a large pixmap, it split the working
- * rectangle into serval boxes, and each box fit into a
- * corresponding fbo. And then the rendering function will
- * loop from the left-top box to the right-bottom box,
- * each time, we will set current box and current fbo
- * to the box and fbo elements. Thus the inner routines
- * can handle it as normal, only the coords calculation need
- * to aware of it's large pixmap.
- *
- * Currently, we haven't implemented the atlas pixmap.
- *
- **/
-
-typedef struct glamor_pixmap_clipped_regions{
- int block_idx;
- RegionPtr region;
-} glamor_pixmap_clipped_regions;
-
-#define SET_PIXMAP_FBO_CURRENT(priv, idx) \
- do { \
- if (priv->type == GLAMOR_TEXTURE_LARGE) { \
- (priv)->large.base.fbo = priv->large.fbo_array[idx]; \
- (priv)->large.box = priv->large.box_array[idx]; \
- } \
- } while(0)
-
-typedef struct glamor_pixmap_private_base {
- glamor_pixmap_type_t type;
- unsigned char gl_fbo:2;
- unsigned char is_picture:1;
- unsigned char gl_tex:1;
- glamor_pixmap_fbo *fbo;
- PixmapPtr pixmap;
- int drm_stride;
- glamor_screen_private *glamor_priv;
- PicturePtr picture;
-}glamor_pixmap_private_base_t;
-
-/*
- * @base.fbo: current fbo.
- * @box: current fbo's coords in the whole pixmap.
- * @block_w: block width of this large pixmap.
- * @block_h: block height of this large pixmap.
- * @block_wcnt: block count in one block row.
- * @block_hcnt: block count in one block column.
- * @nbox: total block count.
- * @box_array: contains each block's corresponding box.
- * @fbo_array: contains each block's fbo pointer.
- *
- **/
-typedef struct glamor_pixmap_private_large {
- union {
- glamor_pixmap_type_t type;
- glamor_pixmap_private_base_t base;
- };
- BoxRec box;
- int block_w;
- int block_h;
- int block_wcnt;
- int block_hcnt;
- int nbox;
- BoxPtr box_array;
- glamor_pixmap_fbo **fbo_array;
-}glamor_pixmap_private_large_t;
-
-/*
- * @box: the relative coords in the corresponding fbo.
- */
-typedef struct glamor_pixmap_private_atlas {
- union {
- glamor_pixmap_type_t type;
- glamor_pixmap_private_base_t base;
- };
- BoxRec box;
-}glamor_pixmap_private_atlas_t;
-
-typedef struct glamor_pixmap_private {
- union {
- glamor_pixmap_type_t type;
- glamor_pixmap_private_base_t base;
- glamor_pixmap_private_large_t large;
- glamor_pixmap_private_atlas_t atlas;
- };
-}glamor_pixmap_private;
-
-/*
- * Pixmap dynamic status, used by dynamic upload feature.
- *
- * GLAMOR_NONE: initial status, don't need to do anything.
- * GLAMOR_UPLOAD_PENDING: marked as need to be uploaded to gl texture.
- * GLAMOR_UPLOAD_DONE: the pixmap has been uploaded successfully.
- * GLAMOR_UPLOAD_FAILED: fail to upload the pixmap.
- *
- * */
-typedef enum glamor_pixmap_status {
- GLAMOR_NONE,
- GLAMOR_UPLOAD_PENDING,
- GLAMOR_UPLOAD_DONE,
- GLAMOR_UPLOAD_FAILED
-} glamor_pixmap_status_t;
-
-extern DevPrivateKey glamor_screen_private_key;
-extern DevPrivateKey glamor_pixmap_private_key;
-static inline glamor_screen_private *
-glamor_get_screen_private(ScreenPtr screen)
-{
- return (glamor_screen_private *)
- dixLookupPrivate(&screen->devPrivates,
- glamor_screen_private_key);
-}
-
-static inline void
-glamor_set_screen_private(ScreenPtr screen, glamor_screen_private *priv)
-{
- dixSetPrivate(&screen->devPrivates,
- glamor_screen_private_key,
- priv);
-}
-
-
-
-static inline glamor_pixmap_private *
-glamor_get_pixmap_private(PixmapPtr pixmap)
-{
- glamor_pixmap_private *priv;
- priv = dixLookupPrivate(&pixmap->devPrivates,
- glamor_pixmap_private_key);
- if (!priv) {
- glamor_set_pixmap_type(pixmap, GLAMOR_MEMORY);
- priv = dixLookupPrivate(&pixmap->devPrivates,
- glamor_pixmap_private_key);
- }
- return priv;
-}
-
-void glamor_set_pixmap_private(PixmapPtr pixmap, glamor_pixmap_private *priv);
-
-/**
- * Returns TRUE if the given planemask covers all the significant bits in the
- * pixel values for pDrawable.
- */
-static inline Bool
-glamor_pm_is_solid(DrawablePtr drawable, unsigned long planemask)
-{
- return (planemask & FbFullMask(drawable->depth)) ==
- FbFullMask(drawable->depth);
-}
-
-extern int glamor_debug_level;
-
-/* glamor.c */
-PixmapPtr glamor_get_drawable_pixmap(DrawablePtr drawable);
-
-Bool glamor_destroy_pixmap(PixmapPtr pixmap);
-
-glamor_pixmap_fbo* glamor_pixmap_detach_fbo(glamor_pixmap_private *pixmap_priv);
-void glamor_pixmap_attach_fbo(PixmapPtr pixmap, glamor_pixmap_fbo *fbo);
-glamor_pixmap_fbo * glamor_create_fbo_from_tex(glamor_screen_private *glamor_priv,
- int w, int h, GLenum format, GLint tex, int flag);
-glamor_pixmap_fbo * glamor_create_fbo(glamor_screen_private *glamor_priv,
- int w, int h, GLenum format, int flag);
-void glamor_destroy_fbo(glamor_pixmap_fbo *fbo);
-void glamor_pixmap_destroy_fbo(glamor_pixmap_private *priv);
-void glamor_purge_fbo(glamor_pixmap_fbo *fbo);
-
-void glamor_init_pixmap_fbo(ScreenPtr screen);
-void glamor_fini_pixmap_fbo(ScreenPtr screen);
-Bool glamor_pixmap_fbo_fixup(ScreenPtr screen, PixmapPtr pixmap);
-void glamor_fbo_expire(glamor_screen_private *glamor_priv);
-
-glamor_pixmap_fbo *
-glamor_create_fbo_array(glamor_screen_private *glamor_priv,
- int w, int h, GLenum format, int flag,
- int block_w, int block_h, glamor_pixmap_private *);
-
-/* glamor_copyarea.c */
-RegionPtr
-glamor_copy_area(DrawablePtr src, DrawablePtr dst, GCPtr gc,
- int srcx, int srcy, int width, int height, int dstx,
- int dsty);
-void glamor_copy_n_to_n(DrawablePtr src, DrawablePtr dst, GCPtr gc,
- BoxPtr box, int nbox, int dx, int dy, Bool reverse,
- Bool upsidedown, Pixel bitplane, void *closure);
-
-/* glamor_copywindow.c */
-void glamor_copy_window(WindowPtr win, DDXPointRec old_origin,
- RegionPtr src_region);
-
-/* glamor_core.c */
-Bool glamor_prepare_access(DrawablePtr drawable, glamor_access_t access);
-void glamor_finish_access(DrawablePtr drawable, glamor_access_t access);
-Bool glamor_prepare_access_window(WindowPtr window);
-void glamor_finish_access_window(WindowPtr window);
-Bool glamor_prepare_access_gc(GCPtr gc);
-void glamor_finish_access_gc(GCPtr gc);
-void glamor_init_finish_access_shaders(ScreenPtr screen);
-void glamor_fini_finish_access_shaders(ScreenPtr screen);
-const Bool glamor_get_drawable_location(const DrawablePtr drawable);
-void glamor_get_drawable_deltas(DrawablePtr drawable, PixmapPtr pixmap,
- int *x, int *y);
-Bool glamor_stipple(PixmapPtr pixmap, PixmapPtr stipple,
- int x, int y, int width, int height,
- unsigned char alu, unsigned long planemask,
- unsigned long fg_pixel, unsigned long bg_pixel,
- int stipple_x, int stipple_y);
-GLint glamor_compile_glsl_prog(glamor_gl_dispatch * dispatch, GLenum type,
- const char *source);
-void glamor_link_glsl_prog(glamor_gl_dispatch * dispatch, GLint prog);
-void glamor_get_color_4f_from_pixel(PixmapPtr pixmap,
- unsigned long fg_pixel,
- GLfloat * color);
-
-int glamor_set_destination_pixmap(PixmapPtr pixmap);
-int glamor_set_destination_pixmap_priv(glamor_pixmap_private *
- pixmap_priv);
-void glamor_set_destination_pixmap_fbo(glamor_pixmap_fbo *, int, int, int, int);
-
-/* nc means no check. caller must ensure this pixmap has valid fbo.
- * usually use the GLAMOR_PIXMAP_PRIV_HAS_FBO firstly.
- * */
-void glamor_set_destination_pixmap_priv_nc(glamor_pixmap_private *
- pixmap_priv);
-
-glamor_pixmap_fbo *
-glamor_es2_pixmap_read_prepare(PixmapPtr source, int x, int y, int w, int h, GLenum format,
- GLenum type, int no_alpha, int revert, int swap_rb);
-
-Bool glamor_set_alu(struct glamor_gl_dispatch *dispatch,
- unsigned char alu);
-Bool glamor_set_planemask(PixmapPtr pixmap, unsigned long planemask);
-Bool glamor_change_window_attributes(WindowPtr pWin, unsigned long mask);
-RegionPtr glamor_bitmap_to_region(PixmapPtr pixmap);
-Bool glamor_gl_has_extension(const char *extension);
-int glamor_gl_get_version(void);
-
-#define GLAMOR_GL_VERSION_ENCODE(major, minor) ( \
- ((major) * 256) \
- + ((minor) * 1))
-
-
-
-
-/* glamor_fill.c */
-Bool glamor_fill(DrawablePtr drawable,
- GCPtr gc, int x, int y, int width, int height, Bool fallback);
-Bool glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height,
- unsigned char alu, unsigned long planemask,
- unsigned long fg_pixel);
-Bool
-glamor_solid_boxes(PixmapPtr pixmap,
- BoxPtr box, int nbox,
- unsigned long fg_pixel);
-
-/* glamor_fillspans.c */
-void glamor_fill_spans(DrawablePtr drawable,
- GCPtr gc,
- int n, DDXPointPtr points, int *widths, int sorted);
-
-void glamor_init_solid_shader(ScreenPtr screen);
-void glamor_fini_solid_shader(ScreenPtr screen);
-
-/* glamor_getspans.c */
-void
-
-glamor_get_spans(DrawablePtr drawable,
- int wmax,
- DDXPointPtr points,
- int *widths, int nspans, char *dst_start);
-
-/* glamor_glyphs.c */
-void glamor_glyphs_fini(ScreenPtr screen);
-void glamor_glyphs(CARD8 op,
- PicturePtr pSrc,
- PicturePtr pDst,
- PictFormatPtr maskFormat,
- INT16 xSrc,
- INT16 ySrc, int nlist, GlyphListPtr list,
- GlyphPtr * glyphs);
-
-/* glamor_setspans.c */
-void glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src,
- DDXPointPtr points, int *widths, int n, int sorted);
-
-/* glamor_polyfillrect.c */
-void
-glamor_poly_fill_rect(DrawablePtr drawable,
- GCPtr gc, int nrect, xRectangle * prect);
-
-/* glamor_polylines.c */
-void
-
-glamor_poly_lines(DrawablePtr drawable, GCPtr gc, int mode, int n,
- DDXPointPtr points);
-
-/* glamor_putimage.c */
-void
-
-glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y,
- int w, int h, int leftPad, int format, char *bits);
-void glamor_init_putimage_shaders(ScreenPtr screen);
-void glamor_fini_putimage_shaders(ScreenPtr screen);
-
-/* glamor_render.c */
-Bool
-glamor_composite_clipped_region(CARD8 op,
- PicturePtr source,
- PicturePtr mask,
- PicturePtr dest,
- glamor_pixmap_private *soruce_pixmap_priv,
- glamor_pixmap_private *mask_pixmap_priv,
- glamor_pixmap_private *dest_pixmap_priv,
- RegionPtr region,
- int x_source,
- int y_source,
- int x_mask,
- int y_mask,
- int x_dest,
- int y_dest);
-
-void glamor_composite(CARD8 op,
- PicturePtr pSrc,
- PicturePtr pMask,
- PicturePtr pDst,
- INT16 xSrc,
- INT16 ySrc,
- INT16 xMask,
- INT16 yMask,
- INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
-
-void glamor_init_composite_shaders(ScreenPtr screen);
-void glamor_fini_composite_shaders(ScreenPtr screen);
-void glamor_composite_glyph_rects(CARD8 op,
- PicturePtr src, PicturePtr mask,
- PicturePtr dst, int nrect,
- glamor_composite_rect_t * rects);
-void glamor_composite_rects (CARD8 op,
- PicturePtr pDst,
- xRenderColor *color,
- int nRect,
- xRectangle *rects);
-void glamor_init_trapezoid_shader(ScreenPtr screen);
-void glamor_fini_trapezoid_shader(ScreenPtr screen);
-PicturePtr glamor_convert_gradient_picture(ScreenPtr screen,
- PicturePtr source,
- int x_source,
- int y_source, int width, int height);
-
-Bool glamor_composite_choose_shader(CARD8 op,
- PicturePtr source,
- PicturePtr mask,
- PicturePtr dest,
- glamor_pixmap_private *source_pixmap_priv,
- glamor_pixmap_private *mask_pixmap_priv,
- glamor_pixmap_private *dest_pixmap_priv,
- struct shader_key *s_key,
- glamor_composite_shader **shader,
- struct blendinfo *op_info,
- PictFormatShort *psaved_source_format);
-
-void
-glamor_composite_set_shader_blend(glamor_pixmap_private *dest_priv,
- struct shader_key *key,
- glamor_composite_shader *shader,
- struct blendinfo *op_info);
-
-void glamor_setup_composite_vbo(ScreenPtr screen, int n_verts);
-void glamor_emit_composite_vert(ScreenPtr screen,
- const float *src_coords,
- const float *mask_coords,
- const float *dst_coords, int i);
-
-/* glamor_trapezoid.c */
-void glamor_trapezoids(CARD8 op,
- PicturePtr src, PicturePtr dst,
- PictFormatPtr mask_format, INT16 x_src, INT16 y_src,
- int ntrap, xTrapezoid * traps);
-
-/* glamor_tile.c */
-Bool glamor_tile(PixmapPtr pixmap, PixmapPtr tile,
- int x, int y, int width, int height,
- unsigned char alu, unsigned long planemask,
- int tile_x, int tile_y);
-void glamor_init_tile_shader(ScreenPtr screen);
-void glamor_fini_tile_shader(ScreenPtr screen);
-
-/* glamor_gradient.c */
-void glamor_init_gradient_shader(ScreenPtr screen);
-void glamor_fini_gradient_shader(ScreenPtr screen);
-PicturePtr glamor_generate_linear_gradient_picture(ScreenPtr screen,
- PicturePtr src_picture,
- int x_source, int y_source,
- int width, int height,
- PictFormatShort format);
-PicturePtr glamor_generate_radial_gradient_picture(ScreenPtr screen,
- PicturePtr src_picture,
- int x_source, int y_source,
- int width, int height,
- PictFormatShort format);
-
-/* glamor_triangles.c */
-void
-
-glamor_triangles(CARD8 op,
- PicturePtr pSrc,
- PicturePtr pDst,
- PictFormatPtr maskFormat,
- INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris);
-
-/* glamor_pixmap.c */
-
-void glamor_pixmap_init(ScreenPtr screen);
-void glamor_pixmap_fini(ScreenPtr screen);
-/**
- * Download a pixmap's texture to cpu memory. If success,
- * One copy of current pixmap's texture will be put into
- * the pixmap->devPrivate.ptr. Will use pbo to map to
- * the pointer if possible.
- * The pixmap must be a gl texture pixmap. gl_fbo and
- * gl_tex must be 1. Used by glamor_prepare_access.
- *
- */
-Bool glamor_download_pixmap_to_cpu(PixmapPtr pixmap,
- glamor_access_t access);
-
-void *
-glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, int x, int y, int w, int h,
- int stride, void *bits, int pbo, glamor_access_t access);
-
-
-/**
- * Restore a pixmap's data which is downloaded by
- * glamor_download_pixmap_to_cpu to its original
- * gl texture. Used by glamor_finish_access.
- *
- * The pixmap must be
- * in texture originally. In other word, the gl_fbo
- * must be 1.
- **/
-void glamor_restore_pixmap_to_texture(PixmapPtr pixmap);
-
-/**
- * According to the flag,
- * if the flag is GLAMOR_CREATE_FBO_NO_FBO then just ensure
- * the fbo has a valid texture. Otherwise, it will ensure
- * the fbo has valid texture and attach to a valid fb.
- * If the fbo already has a valid glfbo then do nothing.
- */
-Bool
-glamor_pixmap_ensure_fbo(PixmapPtr pixmap, GLenum format, int flag);
-
-/**
- * Upload a pixmap to gl texture. Used by dynamic pixmap
- * uploading feature. The pixmap must be a software pixmap.
- * This function will change current FBO and current shaders.
- */
-enum glamor_pixmap_status glamor_upload_pixmap_to_texture(PixmapPtr
- pixmap);
-
-Bool
-glamor_upload_sub_pixmap_to_texture(PixmapPtr pixmap, int x, int y, int w, int h,
- int stride, void *bits, int pbo);
-
-PixmapPtr
-glamor_get_sub_pixmap(PixmapPtr pixmap, int x, int y,
- int w, int h, glamor_access_t access);
-void
-glamor_put_sub_pixmap(PixmapPtr sub_pixmap, PixmapPtr pixmap, int x, int y,
- int w, int h, glamor_access_t access);
-
-glamor_pixmap_clipped_regions *
-glamor_compute_clipped_regions(glamor_pixmap_private *priv, RegionPtr region,
- int *clipped_nbox, int repeat_type,
- int reverse, int upsidedown);
-
-glamor_pixmap_clipped_regions *
-glamor_compute_clipped_regions_ext(glamor_pixmap_private *pixmap_priv,
- RegionPtr region,
- int *n_region,
- int inner_block_w, int inner_block_h,
- int reverse, int upsidedown);
-
-glamor_pixmap_clipped_regions *
-glamor_compute_transform_clipped_regions(glamor_pixmap_private *priv, struct pixman_transform *transform,
- RegionPtr region, int *n_region, int dx, int dy, int repeat_type,
- int reverse, int upsidedown);
-
-Bool
-glamor_composite_largepixmap_region(CARD8 op,
- PicturePtr source,
- PicturePtr mask,
- PicturePtr dest,
- glamor_pixmap_private * source_pixmap_priv,
- glamor_pixmap_private * mask_pixmap_priv,
- glamor_pixmap_private * dest_pixmap_priv,
- RegionPtr region, Bool force_clip,
- INT16 x_source,
- INT16 y_source,
- INT16 x_mask,
- INT16 y_mask,
- INT16 x_dest, INT16 y_dest,
- CARD16 width, CARD16 height);
-
-Bool
-glamor_get_transform_block_size(struct pixman_transform *transform,
- int block_w, int block_h,
- int *transformed_block_w,
- int *transformed_block_h);
-
-void
-glamor_get_transform_extent_from_box(struct pixman_box32 *temp_box,
- struct pixman_transform *transform);
-
-/**
- * Upload a picture to gl texture. Similar to the
- * glamor_upload_pixmap_to_texture. Used in rendering.
- **/
-enum glamor_pixmap_status
- glamor_upload_picture_to_texture(PicturePtr picture);
-
-/**
- * Upload bits to a pixmap's texture. This function will
- * convert the bits to the specified format/type format
- * if the conversion is unavoidable.
- **/
-Bool glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format, GLenum type,
- int no_alpha, int revert, int swap_rb, void *bits);
-
-/**
- * Destroy all the resources allocated on the uploading
- * phase, includs the tex and fbo.
- **/
-void glamor_destroy_upload_pixmap(PixmapPtr pixmap);
-
-int glamor_create_picture(PicturePtr picture);
-
-Bool
-glamor_prepare_access_picture(PicturePtr picture, glamor_access_t access);
-
-void glamor_finish_access_picture(PicturePtr picture, glamor_access_t access);
-
-void glamor_destroy_picture(PicturePtr picture);
-
-/* fixup a fbo to the exact size as the pixmap. */
-Bool
-glamor_fixup_pixmap_priv(ScreenPtr screen, glamor_pixmap_private *pixmap_priv);
-
-void
-glamor_picture_format_fixup(PicturePtr picture,
- glamor_pixmap_private * pixmap_priv);
-
-void
-glamor_get_image(DrawablePtr pDrawable, int x, int y, int w, int h,
- unsigned int format, unsigned long planeMask, char *d);
-
-void
-glamor_add_traps(PicturePtr pPicture,
- INT16 x_off,
- INT16 y_off, int ntrap, xTrap * traps);
-
-RegionPtr
-glamor_copy_plane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
- int srcx, int srcy, int w, int h, int dstx, int dsty,
- unsigned long bitPlane);
-
-void
-glamor_image_glyph_blt(DrawablePtr pDrawable, GCPtr pGC,
- int x, int y, unsigned int nglyph,
- CharInfoPtr * ppci, pointer pglyphBase);
-
-void
-glamor_poly_glyph_blt(DrawablePtr pDrawable, GCPtr pGC,
- int x, int y, unsigned int nglyph,
- CharInfoPtr * ppci, pointer pglyphBase);
-
-void
-glamor_push_pixels(GCPtr pGC, PixmapPtr pBitmap,
- DrawablePtr pDrawable, int w, int h, int x, int y);
-
-void
-glamor_poly_point(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
- DDXPointPtr ppt);
-
-void
-glamor_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg,
- xSegment *pSeg);
-
-void
-glamor_poly_line(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
- DDXPointPtr ppt);
-
-void
-glamor_composite_rectangles(CARD8 op,
- PicturePtr dst,
- xRenderColor *color,
- int num_rects,
- xRectangle *rects);
-
-#include"glamor_utils.h"
-
-/* Dynamic pixmap upload to texture if needed.
- * Sometimes, the target is a gl texture pixmap/picture,
- * but the source or mask is in cpu memory. In that case,
- * upload the source/mask to gl texture and then avoid
- * fallback the whole process to cpu. Most of the time,
- * this will increase performance obviously. */
-
-#define GLAMOR_PIXMAP_DYNAMIC_UPLOAD
-#define GLAMOR_GRADIENT_SHADER
-#define GLAMOR_TRAPEZOID_SHADER
-#define GLAMOR_TEXTURED_LARGE_PIXMAP 1
-#define WALKAROUND_LARGE_TEXTURE_MAP
-#if 0
-#define MAX_FBO_SIZE 32 /* For test purpose only. */
-#endif
-//#define GLYPHS_NO_EDEGEMAP_OVERLAP_CHECK
-#define GLYPHS_EDEGE_OVERLAP_LOOSE_CHECK
-
-#endif /* GLAMOR_PRIV_H */
diff --git a/extra/glamor-egl/glamor_utils.h b/extra/glamor-egl/glamor_utils.h
deleted file mode 100644
index 36beb49ed..000000000
--- a/extra/glamor-egl/glamor_utils.h
+++ /dev/null
@@ -1,1836 +0,0 @@
-/*
- * Copyright © 2009 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- * Zhigang Gong <zhigang.gong@linux.intel.com>
- *
- */
-
-#ifndef GLAMOR_PRIV_H
-#error This file can only be included by glamor_priv.h
-#endif
-
-#ifndef __GLAMOR_UTILS_H__
-#define __GLAMOR_UTILS_H__
-
-#define v_from_x_coord_x(_xscale_, _x_) ( 2 * (_x_) * (_xscale_) - 1.0)
-#define v_from_x_coord_y(_yscale_, _y_) (-2 * (_y_) * (_yscale_) + 1.0)
-#define v_from_x_coord_y_inverted(_yscale_, _y_) (2 * (_y_) * (_yscale_) - 1.0)
-#define t_from_x_coord_x(_xscale_, _x_) ((_x_) * (_xscale_))
-#define t_from_x_coord_y(_yscale_, _y_) (1.0 - (_y_) * (_yscale_))
-#define t_from_x_coord_y_inverted(_yscale_, _y_) ((_y_) * (_yscale_))
-
-#define pixmap_priv_get_dest_scale(_pixmap_priv_, _pxscale_, _pyscale_) \
- do { \
- int _w_,_h_; \
- PIXMAP_PRIV_GET_ACTUAL_SIZE(_pixmap_priv_, _w_, _h_); \
- *(_pxscale_) = 1.0 / _w_; \
- *(_pyscale_) = 1.0 / _h_; \
- } while(0)
-
-#define pixmap_priv_get_scale(_pixmap_priv_, _pxscale_, _pyscale_) \
- do { \
- *(_pxscale_) = 1.0 / (_pixmap_priv_)->base.fbo->width; \
- *(_pyscale_) = 1.0 / (_pixmap_priv_)->base.fbo->height; \
- } while(0)
-
-#define GLAMOR_PIXMAP_FBO_NOT_EAXCT_SIZE(priv) \
- (priv->base.fbo->width != priv->base.pixmap->drawable.width \
- || priv->base.fbo->height != priv->base.pixmap->drawable.height) \
-
-#define PIXMAP_PRIV_GET_ACTUAL_SIZE(priv, w, h) \
- do { \
- if (unlikely(priv->type == GLAMOR_TEXTURE_LARGE)) { \
- w = priv->large.box.x2 - priv->large.box.x1; \
- h = priv->large.box.y2 - priv->large.box.y1; \
- } else { \
- w = priv->base.pixmap->drawable.width; \
- h = priv->base.pixmap->drawable.height; \
- } \
- } while(0)
-
-#define glamor_pixmap_fbo_fix_wh_ratio(wh, priv) \
- do { \
- int actual_w, actual_h; \
- PIXMAP_PRIV_GET_ACTUAL_SIZE(priv, actual_w, actual_h); \
- wh[0] = (float)priv->base.fbo->width / actual_w; \
- wh[1] = (float)priv->base.fbo->height / actual_h; \
- wh[2] = 1.0 / priv->base.fbo->width; \
- wh[3] = 1.0 / priv->base.fbo->height; \
- } while(0)
-
-#define pixmap_priv_get_fbo_off(_priv_, _xoff_, _yoff_) \
- do { \
- if (unlikely(_priv_ && (_priv_)->type \
- == GLAMOR_TEXTURE_LARGE)) { \
- *(_xoff_) = - (_priv_)->large.box.x1; \
- *(_yoff_) = - (_priv_)->large.box.y1; \
- } else { \
- *(_xoff_) = 0; \
- *(_yoff_) = 0; \
- } \
- } while(0)
-
-#define xFixedToFloat(_val_) ((float)xFixedToInt(_val_) \
- + ((float)xFixedFrac(_val_) / 65536.0))
-
-#define glamor_picture_get_matrixf(_picture_, _matrix_) \
- do { \
- int _i_; \
- if ((_picture_)->transform) \
- { \
- for(_i_ = 0; _i_ < 3; _i_++) \
- { \
- (_matrix_)[_i_ * 3 + 0] = \
- xFixedToFloat((_picture_)->transform->matrix[_i_][0]); \
- (_matrix_)[_i_ * 3 + 1] = \
- xFixedToFloat((_picture_)->transform->matrix[_i_][1]); \
- (_matrix_)[_i_ * 3 + 2] = \
- xFixedToFloat((_picture_)->transform->matrix[_i_][2]); \
- } \
- } \
- } while(0)
-
-#define fmod(x, w) (x - w * floor((float)x/w))
-
-#define fmodulus(x, w, c) do {c = fmod(x, w); \
- c = c >= 0 ? c : c + w;} \
- while(0)
-/* @x: is current coord
- * @x2: is the right/bottom edge
- * @w: is current width or height
- * @odd: is output value, 0 means we are in an even region, 1 means we are in a
- * odd region.
- * @c: is output value, equal to x mod w. */
-#define fodd_repeat_mod(x, x2, w, odd, c) \
- do { \
- float shift; \
- fmodulus((x), w, c); \
- shift = fabs((x) - (c)); \
- shift = floor(fabs(round(shift)) / w); \
- odd = (int)shift & 1; \
- if (odd && (((x2 % w) == 0) && \
- round(fabs(x)) == x2)) \
- odd = 0; \
- } while(0)
-
-/* @txy: output value, is the corrected coords.
- * @xy: input coords to be fixed up.
- * @cd: xy mod wh, is a input value.
- * @wh: current width or height.
- * @bxy1,bxy2: current box edge's x1/x2 or y1/y2
- *
- * case 1:
- * ----------
- * | * |
- * | |
- * ----------
- * tx = (c - x1) mod w
- *
- * case 2:
- * ---------
- * * | |
- * | |
- * ---------
- * tx = - (c - (x1 mod w))
- *
- * case 3:
- *
- * ----------
- * | | *
- * | |
- * ----------
- * tx = ((x2 mod x) - c) + (x2 - x1)
- **/
-#define __glamor_repeat_reflect_fixup(txy, xy, \
- cd, wh, bxy1, bxy2) \
- do { \
- cd = wh - cd; \
- if ( xy >= bxy1 && xy < bxy2) { \
- cd = cd - bxy1; \
- fmodulus(cd, wh, txy); \
- } else if (xy < bxy1) { \
- float bxy1_mod; \
- fmodulus(bxy1, wh, bxy1_mod); \
- txy = -(cd - bxy1_mod); \
- } \
- else if (xy >= bxy2) { \
- float bxy2_mod; \
- fmodulus(bxy2, wh, bxy2_mod); \
- if (bxy2_mod == 0) \
- bxy2_mod = wh; \
- txy = (bxy2_mod - cd) + bxy2 - bxy1; \
- } else {assert(0); txy = 0;} \
- } while(0)
-
-#define _glamor_repeat_reflect_fixup(txy, xy, cd, odd, \
- wh, bxy1, bxy2) \
- do { \
- if (odd) { \
- __glamor_repeat_reflect_fixup(txy, xy, \
- cd, wh, bxy1, bxy2); \
- } else \
- txy = xy - bxy1; \
- } while(0)
-
-#define _glamor_get_reflect_transform_coords(priv, repeat_type, \
- tx1, ty1, \
- _x1_, _y1_) \
- do { \
- int odd_x, odd_y; \
- float c, d; \
- fodd_repeat_mod(_x1_,priv->box.x2, \
- priv->base.pixmap->drawable.width, \
- odd_x, c); \
- fodd_repeat_mod(_y1_, priv->box.y2, \
- priv->base.pixmap->drawable.height, \
- odd_y, d); \
- DEBUGF("c %f d %f oddx %d oddy %d \n", \
- c, d, odd_x, odd_y); \
- DEBUGF("x2 %d x1 %d fbo->width %d \n", priv->box.x2, \
- priv->box.x1, priv->base.fbo->width); \
- DEBUGF("y2 %d y1 %d fbo->height %d \n", priv->box.y2, \
- priv->box.y1, priv->base.fbo->height); \
- _glamor_repeat_reflect_fixup(tx1, _x1_, c, odd_x, \
- priv->base.pixmap->drawable.width, \
- priv->box.x1, priv->box.x2); \
- _glamor_repeat_reflect_fixup(ty1, _y1_, d, odd_y, \
- priv->base.pixmap->drawable.height, \
- priv->box.y1, priv->box.y2); \
- } while(0)
-
-#define _glamor_get_repeat_coords(priv, repeat_type, tx1, \
- ty1, tx2, ty2, \
- _x1_, _y1_, _x2_, \
- _y2_, c, d, odd_x, odd_y) \
- do { \
- if (repeat_type == RepeatReflect) { \
- DEBUGF("x1 y1 %d %d\n", \
- _x1_, _y1_ ); \
- DEBUGF("width %d box.x1 %d \n", \
- (priv)->base.pixmap->drawable.width, \
- priv->box.x1); \
- if (odd_x) { \
- c = (priv)->base.pixmap->drawable.width \
- - c; \
- tx1 = c - priv->box.x1; \
- tx2 = tx1 - ((_x2_) - (_x1_)); \
- } else { \
- tx1 = c - priv->box.x1; \
- tx2 = tx1 + ((_x2_) - (_x1_)); \
- } \
- if (odd_y){ \
- d = (priv)->base.pixmap->drawable.height\
- - d; \
- ty1 = d - priv->box.y1; \
- ty2 = ty1 - ((_y2_) - (_y1_)); \
- } else { \
- ty1 = d - priv->box.y1; \
- ty2 = ty1 + ((_y2_) - (_y1_)); \
- } \
- } else { /* RepeatNormal*/ \
- tx1 = (c - priv->box.x1); \
- ty1 = (d - priv->box.y1); \
- tx2 = tx1 + ((_x2_) - (_x1_)); \
- ty2 = ty1 + ((_y2_) - (_y1_)); \
- } \
- } while(0)
-
-
-/* _x1_ ... _y2_ may has fractional. */
-#define glamor_get_repeat_transform_coords(priv, repeat_type, tx1, \
- ty1, _x1_, _y1_) \
- do { \
- DEBUGF("width %d box.x1 %d x2 %d y1 %d y2 %d\n", \
- (priv)->base.pixmap->drawable.width, \
- priv->box.x1, priv->box.x2, priv->box.y1, \
- priv->box.y2); \
- DEBUGF("x1 %f y1 %f \n", _x1_, _y1_); \
- if (repeat_type != RepeatReflect) { \
- tx1 = _x1_ - priv->box.x1; \
- ty1 = _y1_ - priv->box.y1; \
- } else \
- _glamor_get_reflect_transform_coords(priv, repeat_type, \
- tx1, ty1, \
- _x1_, _y1_); \
- DEBUGF("tx1 %f ty1 %f \n", tx1, ty1); \
- } while(0)
-
-/* _x1_ ... _y2_ must be integer. */
-#define glamor_get_repeat_coords(priv, repeat_type, tx1, \
- ty1, tx2, ty2, _x1_, _y1_, _x2_, \
- _y2_) \
- do { \
- int c, d; \
- int odd_x = 0, odd_y = 0; \
- DEBUGF("width %d box.x1 %d x2 %d y1 %d y2 %d\n", \
- (priv)->base.pixmap->drawable.width, \
- priv->box.x1, priv->box.x2, \
- priv->box.y1, priv->box.y2); \
- modulus((_x1_), (priv)->base.pixmap->drawable.width, c); \
- modulus((_y1_), (priv)->base.pixmap->drawable.height, d); \
- DEBUGF("c %d d %d \n", c, d); \
- if (repeat_type == RepeatReflect) { \
- odd_x = abs((_x1_ - c) \
- / (priv->base.pixmap->drawable.width)) & 1; \
- odd_y = abs((_y1_ - d) \
- / (priv->base.pixmap->drawable.height)) & 1; \
- } \
- _glamor_get_repeat_coords(priv, repeat_type, tx1, ty1, tx2, ty2,\
- _x1_, _y1_, _x2_, _y2_, c, d, \
- odd_x, odd_y); \
- } while(0)
-
-#define glamor_transform_point(matrix, tx, ty, x, y) \
- do { \
- int _i_; \
- float _result_[4]; \
- for (_i_ = 0; _i_ < 3; _i_++) { \
- _result_[_i_] = (matrix)[_i_ * 3] * (x) + (matrix)[_i_ * 3 + 1] * (y) \
- + (matrix)[_i_ * 3 + 2]; \
- } \
- tx = _result_[0] / _result_[2]; \
- ty = _result_[1] / _result_[2]; \
- } while(0)
-
-#define _glamor_set_normalize_tpoint(xscale, yscale, _tx_, _ty_, \
- texcoord, yInverted) \
- do { \
- (texcoord)[0] = t_from_x_coord_x(xscale, _tx_); \
- if (likely(yInverted)) \
- (texcoord)[1] = t_from_x_coord_y_inverted(yscale, _ty_);\
- else \
- (texcoord)[1] = t_from_x_coord_y(yscale, _ty_); \
- DEBUGF("normalized point tx %f ty %f \n", (texcoord)[0], \
- (texcoord)[1]); \
- } while(0)
-
-#define glamor_set_transformed_point(priv, matrix, xscale, \
- yscale, texcoord, \
- x, y, \
- yInverted) \
- do { \
- float tx, ty; \
- int fbo_x_off, fbo_y_off; \
- pixmap_priv_get_fbo_off(priv, &fbo_x_off, &fbo_y_off); \
- glamor_transform_point(matrix, tx, ty, x, y); \
- DEBUGF("tx %f ty %f fbooff %d %d \n", \
- tx, ty, fbo_x_off, fbo_y_off); \
- \
- tx += fbo_x_off; \
- ty += fbo_y_off; \
- (texcoord)[0] = t_from_x_coord_x(xscale, tx); \
- if (likely(yInverted)) \
- (texcoord)[1] = t_from_x_coord_y_inverted(yscale, ty); \
- else \
- (texcoord)[1] = t_from_x_coord_y(yscale, ty); \
- DEBUGF("normalized tx %f ty %f \n", (texcoord)[0], (texcoord)[1]); \
- } while(0)
-
-#define glamor_set_transformed_normalize_tri_tcoords(priv, \
- matrix, \
- xscale, \
- yscale, \
- vtx, \
- yInverted, \
- texcoords) \
- do { \
- glamor_set_transformed_point(priv, matrix, xscale, yscale, \
- texcoords, (vtx)[0], (vtx)[1], \
- yInverted); \
- glamor_set_transformed_point(priv, matrix, xscale, yscale, \
- texcoords+2, (vtx)[2], (vtx)[3], \
- yInverted); \
- glamor_set_transformed_point(priv, matrix, xscale, yscale, \
- texcoords+4, (vtx)[4], (vtx)[5], \
- yInverted); \
- } while (0)
-
-#define glamor_set_transformed_normalize_tcoords_ext( priv, \
- matrix, \
- xscale, \
- yscale, \
- tx1, ty1, tx2, ty2, \
- yInverted, texcoords, \
- stride) \
- do { \
- glamor_set_transformed_point(priv, matrix, xscale, yscale, \
- texcoords, tx1, ty1, \
- yInverted); \
- glamor_set_transformed_point(priv, matrix, xscale, yscale, \
- texcoords + 1 * stride, tx2, ty1, \
- yInverted); \
- glamor_set_transformed_point(priv, matrix, xscale, yscale, \
- texcoords + 2 * stride, tx2, ty2, \
- yInverted); \
- glamor_set_transformed_point(priv, matrix, xscale, yscale, \
- texcoords + 3 * stride, tx1, ty2, \
- yInverted); \
- } while (0)
-
-#define glamor_set_transformed_normalize_tcoords( priv, \
- matrix, \
- xscale, \
- yscale, \
- tx1, ty1, tx2, ty2, \
- yInverted, texcoords) \
- do { \
- glamor_set_transformed_normalize_tcoords_ext( priv, \
- matrix, \
- xscale, \
- yscale, \
- tx1, ty1, tx2, ty2, \
- yInverted, texcoords, \
- 2); \
- } while (0)
-
-
-
-#define glamor_set_normalize_tri_tcoords(xscale, \
- yscale, \
- vtx, \
- yInverted, \
- texcoords) \
- do { \
- _glamor_set_normalize_tpoint(xscale, yscale, \
- (vtx)[0], (vtx)[1], \
- texcoords, \
- yInverted); \
- _glamor_set_normalize_tpoint(xscale, yscale, \
- (vtx)[2], (vtx)[3], \
- texcoords+2, \
- yInverted); \
- _glamor_set_normalize_tpoint(xscale, yscale, \
- (vtx)[4], (vtx)[5], \
- texcoords+4, \
- yInverted); \
- } while (0)
-
-#define glamor_set_repeat_transformed_normalize_tcoords_ext( priv, \
- repeat_type, \
- matrix, \
- xscale, \
- yscale, \
- _x1_, _y1_, \
- _x2_, _y2_, \
- yInverted, \
- texcoords, \
- stride) \
- do { \
- if (likely(priv->type != GLAMOR_TEXTURE_LARGE)) { \
- glamor_set_transformed_normalize_tcoords_ext(priv, matrix, xscale, \
- yscale, _x1_, _y1_, \
- _x2_, _y2_, yInverted, \
- texcoords, stride); \
- } else { \
- float tx1, ty1, tx2, ty2, tx3, ty3, tx4, ty4; \
- float ttx1, tty1, ttx2, tty2, ttx3, tty3, ttx4, tty4; \
- DEBUGF("original coords %d %d %d %d\n", _x1_, _y1_, _x2_, _y2_); \
- glamor_transform_point(matrix, tx1, ty1, _x1_, _y1_); \
- glamor_transform_point(matrix, tx2, ty2, _x2_, _y1_); \
- glamor_transform_point(matrix, tx3, ty3, _x2_, _y2_); \
- glamor_transform_point(matrix, tx4, ty4, _x1_, _y2_); \
- DEBUGF("transformed %f %f %f %f %f %f %f %f\n", \
- tx1, ty1, tx2, ty2, tx3, ty3, tx4, ty4); \
- glamor_get_repeat_transform_coords((&priv->large), repeat_type, \
- ttx1, tty1, \
- tx1, ty1); \
- glamor_get_repeat_transform_coords((&priv->large), repeat_type, \
- ttx2, tty2, \
- tx2, ty2); \
- glamor_get_repeat_transform_coords((&priv->large), repeat_type, \
- ttx3, tty3, \
- tx3, ty3); \
- glamor_get_repeat_transform_coords((&priv->large), repeat_type, \
- ttx4, tty4, \
- tx4, ty4); \
- DEBUGF("repeat transformed %f %f %f %f %f %f %f %f\n", ttx1, tty1, \
- ttx2, tty2, ttx3, tty3, ttx4, tty4); \
- _glamor_set_normalize_tpoint(xscale, yscale, ttx1, tty1, \
- texcoords, yInverted); \
- _glamor_set_normalize_tpoint(xscale, yscale, ttx2, tty2, \
- texcoords + 1 * stride, yInverted); \
- _glamor_set_normalize_tpoint(xscale, yscale, ttx3, tty3, \
- texcoords + 2 * stride, yInverted); \
- _glamor_set_normalize_tpoint(xscale, yscale, ttx4, tty4, \
- texcoords + 3 * stride, yInverted); \
- } \
- } while (0)
-
-
-#define glamor_set_repeat_transformed_normalize_tcoords( priv, \
- repeat_type, \
- matrix, \
- xscale, \
- yscale, \
- _x1_, _y1_, \
- _x2_, _y2_, \
- yInverted, \
- texcoords) \
- do { \
- glamor_set_repeat_transformed_normalize_tcoords_ext( priv, \
- repeat_type, \
- matrix, \
- xscale, \
- yscale, \
- _x1_, _y1_, \
- _x2_, _y2_, \
- yInverted, \
- texcoords, \
- 2); \
- } while (0)
-
-#define _glamor_set_normalize_tcoords(xscale, yscale, tx1, \
- ty1, tx2, ty2, \
- yInverted, vertices, stride) \
- do { \
- /* vertices may be write-only, so we use following \
- * temporary variable. */ \
- float _t0_, _t1_, _t2_, _t5_; \
- (vertices)[0] = _t0_ = t_from_x_coord_x(xscale, tx1); \
- (vertices)[1 * stride] = _t2_ = t_from_x_coord_x(xscale, tx2); \
- (vertices)[2 * stride] = _t2_; \
- (vertices)[3 * stride] = _t0_; \
- if (likely(yInverted)) { \
- (vertices)[1] = _t1_ = t_from_x_coord_y_inverted(yscale, ty1); \
- (vertices)[2 * stride + 1] = _t5_ = t_from_x_coord_y_inverted(yscale, ty2);\
- } \
- else { \
- (vertices)[1] = _t1_ = t_from_x_coord_y(yscale, ty1); \
- (vertices)[2 * stride + 1] = _t5_ = t_from_x_coord_y(yscale, ty2);\
- } \
- (vertices)[1 * stride + 1] = _t1_; \
- (vertices)[3 * stride + 1] = _t5_; \
- } while(0)
-
-#define glamor_set_normalize_tcoords_ext(priv, xscale, yscale, \
- x1, y1, x2, y2, \
- yInverted, vertices, stride) \
- do { \
- if (unlikely(priv->type == GLAMOR_TEXTURE_LARGE)) { \
- float tx1, tx2, ty1, ty2; \
- int fbo_x_off, fbo_y_off; \
- pixmap_priv_get_fbo_off(priv, &fbo_x_off, &fbo_y_off); \
- tx1 = x1 + fbo_x_off; \
- tx2 = x2 + fbo_x_off; \
- ty1 = y1 + fbo_y_off; \
- ty2 = y2 + fbo_y_off; \
- _glamor_set_normalize_tcoords(xscale, yscale, tx1, ty1, \
- tx2, ty2, yInverted, vertices, \
- stride); \
- } else \
- _glamor_set_normalize_tcoords(xscale, yscale, x1, y1, \
- x2, y2, yInverted, vertices, stride);\
- } while(0)
-
-
-#define glamor_set_normalize_tcoords(priv, xscale, yscale, \
- x1, y1, x2, y2, \
- yInverted, vertices) \
- do { \
- glamor_set_normalize_tcoords_ext(priv, xscale, yscale, \
- x1, y1, x2, y2, \
- yInverted, vertices, 2); \
- } while(0)
-
-#define glamor_set_repeat_normalize_tcoords_ext(priv, repeat_type, \
- xscale, yscale, \
- _x1_, _y1_, _x2_, _y2_, \
- yInverted, vertices, stride)\
- do { \
- if (unlikely(priv->type == GLAMOR_TEXTURE_LARGE)) { \
- float tx1, tx2, ty1, ty2; \
- if (repeat_type == RepeatPad) { \
- tx1 = _x1_ - priv->large.box.x1; \
- ty1 = _y1_ - priv->large.box.y1; \
- tx2 = tx1 + ((_x2_) - (_x1_)); \
- ty2 = ty1 + ((_y2_) - (_y1_)); \
- } else { \
- glamor_get_repeat_coords((&priv->large), repeat_type, \
- tx1, ty1, tx2, ty2, \
- _x1_, _y1_, _x2_, _y2_); \
- } \
- _glamor_set_normalize_tcoords(xscale, yscale, tx1, ty1, \
- tx2, ty2, yInverted, vertices, \
- stride); \
- } else \
- _glamor_set_normalize_tcoords(xscale, yscale, _x1_, _y1_, \
- _x2_, _y2_, yInverted, vertices, \
- stride); \
- } while(0)
-
-
-#define glamor_set_repeat_normalize_tcoords(priv, repeat_type, \
- xscale, yscale, \
- _x1_, _y1_, _x2_, _y2_, \
- yInverted, vertices) \
- do { \
- glamor_set_repeat_normalize_tcoords_ext(priv, repeat_type, \
- xscale, yscale, \
- _x1_, _y1_, _x2_, _y2_, \
- yInverted, vertices, 2); \
- } while(0)
-
-#define glamor_set_normalize_tcoords_tri_stripe(xscale, yscale, \
- x1, y1, x2, y2, \
- yInverted, vertices) \
- do { \
- (vertices)[0] = t_from_x_coord_x(xscale, x1); \
- (vertices)[2] = t_from_x_coord_x(xscale, x2); \
- (vertices)[6] = (vertices)[2]; \
- (vertices)[4] = (vertices)[0]; \
- if (likely(yInverted)) { \
- (vertices)[1] = t_from_x_coord_y_inverted(yscale, y1); \
- (vertices)[7] = t_from_x_coord_y_inverted(yscale, y2); \
- } \
- else { \
- (vertices)[1] = t_from_x_coord_y(yscale, y1); \
- (vertices)[7] = t_from_x_coord_y(yscale, y2); \
- } \
- (vertices)[3] = (vertices)[1]; \
- (vertices)[5] = (vertices)[7]; \
- } while(0)
-
-#define glamor_set_tcoords(width, height, x1, y1, x2, y2, \
- yInverted, vertices) \
- do { \
- (vertices)[0] = (x1); \
- (vertices)[2] = (x2); \
- (vertices)[4] = (vertices)[2]; \
- (vertices)[6] = (vertices)[0]; \
- if (likely(yInverted)) { \
- (vertices)[1] = (y1); \
- (vertices)[5] = (y2); \
- } \
- else { \
- (vertices)[1] = height - (y2); \
- (vertices)[5] = height - (y1); \
- } \
- (vertices)[3] = (vertices)[1]; \
- (vertices)[7] = (vertices)[5]; \
- } while(0)
-
-#define glamor_set_tcoords_ext(width, height, x1, y1, x2, y2, \
- yInverted, vertices, stride) \
- do { \
- (vertices)[0] = (x1); \
- (vertices)[1*stride] = (x2); \
- (vertices)[2*stride] = (vertices)[1*stride]; \
- (vertices)[3*stride] = (vertices)[0]; \
- if (likely(yInverted)) { \
- (vertices)[1] = (y1); \
- (vertices)[2*stride + 1] = (y2); \
- } \
- else { \
- (vertices)[1] = height - (y2); \
- (vertices)[2*stride + 1] = height - (y1); \
- } \
- (vertices)[1*stride + 1] = (vertices)[1]; \
- (vertices)[3*stride + 1] = (vertices)[2*stride + 1]; \
- } while(0)
-
-#define glamor_set_normalize_one_vcoord(xscale, yscale, x, y, \
- yInverted, vertices) \
- do { \
- (vertices)[0] = v_from_x_coord_x(xscale, x); \
- if (likely(yInverted)) { \
- (vertices)[1] = v_from_x_coord_y_inverted(yscale, y); \
- } else { \
- (vertices)[1] = v_from_x_coord_y(yscale, y); \
- } \
- } while(0)
-
-#define glamor_set_normalize_tri_vcoords(xscale, yscale, vtx, \
- yInverted, vertices) \
- do { \
- glamor_set_normalize_one_vcoord(xscale, yscale, \
- (vtx)[0], (vtx)[1], \
- yInverted, vertices); \
- glamor_set_normalize_one_vcoord(xscale, yscale, \
- (vtx)[2], (vtx)[3], \
- yInverted, vertices+2); \
- glamor_set_normalize_one_vcoord(xscale, yscale, \
- (vtx)[4], (vtx)[5], \
- yInverted, vertices+4); \
- } while(0)
-
-#define glamor_set_tcoords_tri_strip(width, height, x1, y1, x2, y2, \
- yInverted, vertices) \
- do { \
- (vertices)[0] = (x1); \
- (vertices)[2] = (x2); \
- (vertices)[6] = (vertices)[2]; \
- (vertices)[4] = (vertices)[0]; \
- if (likely(yInverted)) { \
- (vertices)[1] = (y1); \
- (vertices)[7] = (y2); \
- } \
- else { \
- (vertices)[1] = height - (y2); \
- (vertices)[7] = height - (y1); \
- } \
- (vertices)[3] = (vertices)[1]; \
- (vertices)[5] = (vertices)[7]; \
- } while(0)
-
-#define glamor_set_normalize_vcoords_ext(priv, xscale, yscale, \
- x1, y1, x2, y2, \
- yInverted, vertices, stride) \
- do { \
- int fbo_x_off, fbo_y_off; \
- /* vertices may be write-only, so we use following \
- * temporary variable. */ \
- float _t0_, _t1_, _t2_, _t5_; \
- pixmap_priv_get_fbo_off(priv, &fbo_x_off, &fbo_y_off); \
- (vertices)[0] = _t0_ = v_from_x_coord_x(xscale, x1 + fbo_x_off); \
- (vertices)[1 * stride] = _t2_ = v_from_x_coord_x(xscale, \
- x2 + fbo_x_off); \
- (vertices)[2 * stride] = _t2_; \
- (vertices)[3 * stride] = _t0_; \
- if (likely(yInverted)) { \
- (vertices)[1] = _t1_ = v_from_x_coord_y_inverted(yscale, \
- y1 + fbo_y_off); \
- (vertices)[2 * stride + 1] = _t5_ = \
- v_from_x_coord_y_inverted(yscale, \
- y2 + fbo_y_off); \
- } \
- else { \
- (vertices)[1] = _t1_ = v_from_x_coord_y(yscale, y1 + fbo_y_off); \
- (vertices)[2 * stride + 1] = _t5_ = v_from_x_coord_y(yscale, \
- y2 + fbo_y_off); \
- } \
- (vertices)[1 * stride + 1] = _t1_; \
- (vertices)[3 * stride + 1] = _t5_; \
- } while(0)
-
-
-#define glamor_set_normalize_vcoords(priv, xscale, yscale, \
- x1, y1, x2, y2, \
- yInverted, vertices) \
- do { \
- glamor_set_normalize_vcoords_ext(priv, xscale, yscale, \
- x1, y1, x2, y2, \
- yInverted, vertices, 2); \
- } while(0)
-
-#define glamor_set_const_ext(params, nparam, vertices, nverts, stride) \
- do { \
- int _i_ = 0, _j_ = 0; \
- for(; _i_ < nverts; _i_++) { \
- for(_j_ = 0; _j_ < nparam; _j_++) { \
- vertices[stride*_i_ + _j_] = params[_j_]; \
- } \
- } \
- } while(0)
-
-#define glamor_set_normalize_vcoords_tri_strip(xscale, yscale, \
- x1, y1, x2, y2, \
- yInverted, vertices) \
- do { \
- (vertices)[0] = v_from_x_coord_x(xscale, x1); \
- (vertices)[2] = v_from_x_coord_x(xscale, x2); \
- (vertices)[6] = (vertices)[2]; \
- (vertices)[4] = (vertices)[0]; \
- if (likely(yInverted)) { \
- (vertices)[1] = v_from_x_coord_y_inverted(yscale, y1); \
- (vertices)[7] = v_from_x_coord_y_inverted(yscale, y2); \
- } \
- else { \
- (vertices)[1] = v_from_x_coord_y(yscale, y1); \
- (vertices)[7] = v_from_x_coord_y(yscale, y2); \
- } \
- (vertices)[3] = (vertices)[1]; \
- (vertices)[5] = (vertices)[7]; \
- } while(0)
-
-#define glamor_set_normalize_pt(xscale, yscale, x, y, \
- yInverted, pt) \
- do { \
- (pt)[0] = t_from_x_coord_x(xscale, x); \
- if (likely(yInverted)) { \
- (pt)[1] = t_from_x_coord_y_inverted(yscale, y); \
- } else { \
- (pt)[1] = t_from_x_coord_y(yscale, y); \
- } \
- } while(0)
-
-#define glamor_set_circle_centre(width, height, x, y, \
- yInverted, c) \
- do { \
- (c)[0] = (float)x; \
- if (likely(yInverted)) { \
- (c)[1] = (float)y; \
- } else { \
- (c)[1] = (float)height - (float)y; \
- } \
- } while(0)
-
-inline static void
-glamor_calculate_boxes_bound(BoxPtr bound, BoxPtr boxes, int nbox)
-{
- int x_min, y_min;
- int x_max, y_max;
- int i;
- x_min = y_min = MAXSHORT;
- x_max = y_max = MINSHORT;
- for (i = 0; i < nbox; i++) {
- if (x_min > boxes[i].x1)
- x_min = boxes[i].x1;
- if (y_min > boxes[i].y1)
- y_min = boxes[i].y1;
-
- if (x_max < boxes[i].x2)
- x_max = boxes[i].x2;
- if (y_max < boxes[i].y2)
- y_max = boxes[i].y2;
- }
- bound->x1 = x_min;
- bound->y1 = y_min;
- bound->x2 = x_max;
- bound->y2 = y_max;
-}
-
-inline static void
-glamor_translate_boxes(BoxPtr boxes, int nbox, int dx, int dy)
-{
- int i;
- for (i = 0; i < nbox; i++) {
- boxes[i].x1 += dx;
- boxes[i].y1 += dy;
- boxes[i].x2 += dx;
- boxes[i].y2 += dy;
- }
-}
-
-static inline Bool
-region_is_empty(pixman_region16_t *region)
-{
- return region->data && region->data->numRects == 0;
-}
-
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
-#endif
-
-#define ALIGN(i,m) (((i) + (m) - 1) & ~((m) - 1))
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
-#define MAX(a,b) ((a) > (b) ? (a) : (b))
-
-#define glamor_check_fbo_size(_glamor_,_w_, _h_) ((_w_) > 0 && (_h_) > 0 \
- && (_w_) <= _glamor_->max_fbo_size \
- && (_h_) <= _glamor_->max_fbo_size)
-
-/* For 1bpp pixmap, we don't store it as texture. */
-#define glamor_check_pixmap_fbo_depth(_depth_) ( \
- _depth_ == 8 \
- || _depth_ == 15 \
- || _depth_ == 16 \
- || _depth_ == 24 \
- || _depth_ == 30 \
- || _depth_ == 32)
-
-#define GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv) (pixmap_priv && pixmap_priv->base.is_picture == 1)
-#define GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv) (pixmap_priv && pixmap_priv->base.gl_fbo == GLAMOR_FBO_NORMAL)
-#define GLAMOR_PIXMAP_PRIV_HAS_FBO_DOWNLOADED(pixmap_priv) (pixmap_priv && (pixmap_priv->base.gl_fbo == GLAMOR_FBO_DOWNLOADED))
-
-/**
- * Borrow from uxa.
- */
-static inline CARD32
-format_for_depth(int depth)
-{
- switch (depth) {
- case 1:
- return PICT_a1;
- case 4:
- return PICT_a4;
- case 8:
- return PICT_a8;
- case 15:
- return PICT_x1r5g5b5;
- case 16:
- return PICT_r5g6b5;
- default:
- case 24:
- return PICT_x8r8g8b8;
-#if XORG_VERSION_CURRENT >= 10699900
- case 30:
- return PICT_x2r10g10b10;
-#endif
- case 32:
- return PICT_a8r8g8b8;
- }
-}
-
-static inline void
-gl_iformat_for_depth(int depth, GLenum * format)
-{
- switch (depth) {
-#ifndef GLAMOR_GLES2
- case 1:
- case 8:
- *format = GL_ALPHA;
- break;
-#endif
- default:
- *format = GL_RGBA;
- break;
- }
-}
-
-static inline CARD32
-format_for_pixmap(PixmapPtr pixmap)
-{
- glamor_pixmap_private *pixmap_priv;
- PictFormatShort pict_format;
-
- pixmap_priv = glamor_get_pixmap_private(pixmap);
- if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv))
- pict_format = pixmap_priv->base.picture->format;
- else
- pict_format = format_for_depth(pixmap->drawable.depth);
-
- return pict_format;
-}
-
-#define REVERT_NONE 0
-#define REVERT_NORMAL 1
-#define REVERT_DOWNLOADING_A1 2
-#define REVERT_UPLOADING_A1 3
-#define REVERT_DOWNLOADING_2_10_10_10 4
-#define REVERT_UPLOADING_2_10_10_10 5
-#define REVERT_DOWNLOADING_1_5_5_5 7
-#define REVERT_UPLOADING_1_5_5_5 8
-#define REVERT_DOWNLOADING_10_10_10_2 9
-#define REVERT_UPLOADING_10_10_10_2 10
-
-#define SWAP_NONE_DOWNLOADING 0
-#define SWAP_DOWNLOADING 1
-#define SWAP_UPLOADING 2
-#define SWAP_NONE_UPLOADING 3
-
-/*
- * Map picture's format to the correct gl texture format and type.
- * no_alpha is used to indicate whehter we need to wire alpha to 1.
- *
- * Although opengl support A1/GL_BITMAP, we still don't use it
- * here, it seems that mesa has bugs when uploading a A1 bitmap.
- *
- * Return 0 if find a matched texture type. Otherwise return -1.
- **/
-#ifndef GLAMOR_GLES2
-static inline int
-glamor_get_tex_format_type_from_pictformat(PictFormatShort format,
- GLenum * tex_format,
- GLenum * tex_type,
- int *no_alpha,
- int *revert,
- int *swap_rb,
- int is_upload)
-
-{
- *no_alpha = 0;
- *revert = REVERT_NONE;
- *swap_rb = is_upload ? SWAP_NONE_UPLOADING : SWAP_NONE_DOWNLOADING;
- switch (format) {
- case PICT_a1:
- *tex_format = GL_ALPHA;
- *tex_type = GL_UNSIGNED_BYTE;
- *revert = is_upload ? REVERT_UPLOADING_A1 : REVERT_DOWNLOADING_A1;
- break;
- case PICT_b8g8r8x8:
- *no_alpha = 1;
- case PICT_b8g8r8a8:
- *tex_format = GL_BGRA;
- *tex_type = GL_UNSIGNED_INT_8_8_8_8;
- break;
-
- case PICT_x8r8g8b8:
- *no_alpha = 1;
- case PICT_a8r8g8b8:
- *tex_format = GL_BGRA;
- *tex_type = GL_UNSIGNED_INT_8_8_8_8_REV;
- break;
- case PICT_x8b8g8r8:
- *no_alpha = 1;
- case PICT_a8b8g8r8:
- *tex_format = GL_RGBA;
- *tex_type = GL_UNSIGNED_INT_8_8_8_8_REV;
- break;
- case PICT_x2r10g10b10:
- *no_alpha = 1;
- case PICT_a2r10g10b10:
- *tex_format = GL_BGRA;
- *tex_type = GL_UNSIGNED_INT_2_10_10_10_REV;
- break;
- case PICT_x2b10g10r10:
- *no_alpha = 1;
- case PICT_a2b10g10r10:
- *tex_format = GL_RGBA;
- *tex_type = GL_UNSIGNED_INT_2_10_10_10_REV;
- break;
-
- case PICT_r5g6b5:
- *tex_format = GL_RGB;
- *tex_type = GL_UNSIGNED_SHORT_5_6_5;
- break;
- case PICT_b5g6r5:
- *tex_format = GL_RGB;
- *tex_type = GL_UNSIGNED_SHORT_5_6_5_REV;
- break;
- case PICT_x1b5g5r5:
- *no_alpha = 1;
- case PICT_a1b5g5r5:
- *tex_format = GL_RGBA;
- *tex_type = GL_UNSIGNED_SHORT_1_5_5_5_REV;
- break;
-
- case PICT_x1r5g5b5:
- *no_alpha = 1;
- case PICT_a1r5g5b5:
- *tex_format = GL_BGRA;
- *tex_type = GL_UNSIGNED_SHORT_1_5_5_5_REV;
- break;
- case PICT_a8:
- *tex_format = GL_ALPHA;
- *tex_type = GL_UNSIGNED_BYTE;
- break;
- case PICT_x4r4g4b4:
- *no_alpha = 1;
- case PICT_a4r4g4b4:
- *tex_format = GL_BGRA;
- *tex_type = GL_UNSIGNED_SHORT_4_4_4_4_REV;
- break;
-
- case PICT_x4b4g4r4:
- *no_alpha = 1;
- case PICT_a4b4g4r4:
- *tex_format = GL_RGBA;
- *tex_type = GL_UNSIGNED_SHORT_4_4_4_4_REV;
- break;
-
- default:
- LogMessageVerb(X_INFO, 0,
- "fail to get matched format for %x \n",
- format);
- return -1;
- }
- return 0;
-}
-
-/* Currently, we use RGBA to represent all formats. */
-inline static int cache_format(GLenum format)
-{
- switch (format) {
- case GL_ALPHA:
- return 1;
- case GL_RGBA:
- return 0;
- default:
- return -1;
- }
-}
-
-#else
-#define IS_LITTLE_ENDIAN (IMAGE_BYTE_ORDER == LSBFirst)
-
-static inline int
-glamor_get_tex_format_type_from_pictformat(PictFormatShort format,
- GLenum * tex_format,
- GLenum * tex_type,
- int *no_alpha,
- int *revert,
- int *swap_rb,
- int is_upload)
-{
- int need_swap_rb = 0;
-
- *no_alpha = 0;
- *revert = IS_LITTLE_ENDIAN ? REVERT_NONE : REVERT_NORMAL;
-
- switch (format) {
- case PICT_b8g8r8x8:
- *no_alpha = 1;
- case PICT_b8g8r8a8:
- *tex_format = GL_RGBA;
- *tex_type = GL_UNSIGNED_BYTE;
- need_swap_rb = 1;
- *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE;
- break;
-
- case PICT_x8r8g8b8:
- *no_alpha = 1;
- case PICT_a8r8g8b8:
- *tex_format = GL_RGBA;
- *tex_type = GL_UNSIGNED_BYTE;
- need_swap_rb = 1;
- break;
-
- case PICT_x8b8g8r8:
- *no_alpha = 1;
- case PICT_a8b8g8r8:
- *tex_format = GL_RGBA;
- *tex_type = GL_UNSIGNED_BYTE;
- break;
-
- case PICT_x2r10g10b10:
- *no_alpha = 1;
- case PICT_a2r10g10b10:
- *tex_format = GL_RGBA;
- /* glReadPixmap doesn't support GL_UNSIGNED_INT_10_10_10_2.
- * we have to use GL_UNSIGNED_BYTE and do the conversion in
- * shader latter.*/
- *tex_type = GL_UNSIGNED_BYTE;
- if (is_upload == 1) {
- if (!IS_LITTLE_ENDIAN)
- *revert = REVERT_UPLOADING_10_10_10_2;
- else
- *revert = REVERT_UPLOADING_2_10_10_10;
- }
- else {
- if (!IS_LITTLE_ENDIAN) {
- *revert = REVERT_DOWNLOADING_10_10_10_2;
- }
- else {
- *revert = REVERT_DOWNLOADING_2_10_10_10;
- }
- }
- need_swap_rb = 1;
-
- break;
-
- case PICT_x2b10g10r10:
- *no_alpha = 1;
- case PICT_a2b10g10r10:
- *tex_format = GL_RGBA;
- *tex_type = GL_UNSIGNED_BYTE;
- if (is_upload == 1) {
- if (!IS_LITTLE_ENDIAN)
- *revert = REVERT_UPLOADING_10_10_10_2;
- else
- *revert = REVERT_UPLOADING_2_10_10_10;
- }
- else {
- if (!IS_LITTLE_ENDIAN) {
- *revert = REVERT_DOWNLOADING_10_10_10_2;
- }
- else {
- *revert = REVERT_DOWNLOADING_2_10_10_10;
- }
- }
- break;
-
- case PICT_r5g6b5:
- *tex_format = GL_RGB;
- *tex_type = GL_UNSIGNED_SHORT_5_6_5;
- *revert = IS_LITTLE_ENDIAN ? REVERT_NONE : REVERT_NORMAL;
-
- break;
-
- case PICT_b5g6r5:
- *tex_format = GL_RGB;
- *tex_type = GL_UNSIGNED_SHORT_5_6_5;
- need_swap_rb = IS_LITTLE_ENDIAN ? 1 : 0;;
- break;
-
- case PICT_x1b5g5r5:
- *no_alpha = 1;
- case PICT_a1b5g5r5:
- *tex_format = GL_RGBA;
- *tex_type = GL_UNSIGNED_SHORT_5_5_5_1;
- if (IS_LITTLE_ENDIAN) {
- *revert = is_upload ? REVERT_UPLOADING_1_5_5_5 : REVERT_DOWNLOADING_1_5_5_5;
- } else
- *revert = REVERT_NONE;
- break;
-
- case PICT_x1r5g5b5:
- *no_alpha = 1;
- case PICT_a1r5g5b5:
- *tex_format = GL_RGBA;
- *tex_type = GL_UNSIGNED_SHORT_5_5_5_1;
- if (IS_LITTLE_ENDIAN) {
- *revert = is_upload ? REVERT_UPLOADING_1_5_5_5 : REVERT_DOWNLOADING_1_5_5_5;
- } else
- *revert = REVERT_NONE;
- need_swap_rb = 1;
- break;
-
- case PICT_a1:
- *tex_format = GL_ALPHA;
- *tex_type = GL_UNSIGNED_BYTE;
- *revert = is_upload ? REVERT_UPLOADING_A1 : REVERT_DOWNLOADING_A1;
- break;
-
- case PICT_a8:
- *tex_format = GL_ALPHA;
- *tex_type = GL_UNSIGNED_BYTE;
- *revert = REVERT_NONE;
- break;
-
- case PICT_x4r4g4b4:
- *no_alpha = 1;
- case PICT_a4r4g4b4:
- *tex_format = GL_RGBA;
- *tex_type = GL_UNSIGNED_SHORT_4_4_4_4;
- *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE;
- need_swap_rb = 1;
- break;
-
- case PICT_x4b4g4r4:
- *no_alpha = 1;
- case PICT_a4b4g4r4:
- *tex_format = GL_RGBA;
- *tex_type = GL_UNSIGNED_SHORT_4_4_4_4;
- *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE;
- break;
-
- default:
- LogMessageVerb(X_INFO, 0,
- "fail to get matched format for %x \n",
- format);
- return -1;
- }
-
- if (need_swap_rb)
- *swap_rb = is_upload ? SWAP_UPLOADING : SWAP_DOWNLOADING;
- else
- *swap_rb = is_upload ? SWAP_NONE_UPLOADING : SWAP_NONE_DOWNLOADING;
- return 0;
-}
-
-inline static int cache_format(GLenum format)
-{
- switch (format) {
- case GL_ALPHA:
- return 2;
- case GL_RGB:
- return 1;
- case GL_RGBA:
- return 0;
- default:
- return -1;
- }
-}
-
-#endif
-
-
-static inline int
-glamor_get_tex_format_type_from_pixmap(PixmapPtr pixmap,
- GLenum * format,
- GLenum * type,
- int *no_alpha,
- int *revert,
- int *swap_rb,
- int is_upload)
-{
- glamor_pixmap_private *pixmap_priv;
- PictFormatShort pict_format;
-
- pixmap_priv = glamor_get_pixmap_private(pixmap);
- if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv))
- pict_format = pixmap_priv->base.picture->format;
- else
- pict_format = format_for_depth(pixmap->drawable.depth);
-
- return glamor_get_tex_format_type_from_pictformat(pict_format,
- format, type,
- no_alpha,
- revert,
- swap_rb,
- is_upload);
-}
-
-
-/* borrowed from uxa */
-static inline Bool
-glamor_get_rgba_from_pixel(CARD32 pixel,
- float *red,
- float *green,
- float *blue, float *alpha, CARD32 format)
-{
- int rbits, bbits, gbits, abits;
- int rshift, bshift, gshift, ashift;
-
- rbits = PICT_FORMAT_R(format);
- gbits = PICT_FORMAT_G(format);
- bbits = PICT_FORMAT_B(format);
- abits = PICT_FORMAT_A(format);
-
- if (PICT_FORMAT_TYPE(format) == PICT_TYPE_A) {
- rshift = gshift = bshift = ashift = 0;
- } else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ARGB) {
- bshift = 0;
- gshift = bbits;
- rshift = gshift + gbits;
- ashift = rshift + rbits;
- } else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ABGR) {
- rshift = 0;
- gshift = rbits;
- bshift = gshift + gbits;
- ashift = bshift + bbits;
-#if XORG_VERSION_CURRENT >= 10699900
- } else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_BGRA) {
- ashift = 0;
- rshift = abits;
- if (abits == 0)
- rshift = PICT_FORMAT_BPP(format) - (rbits + gbits +
- bbits);
- gshift = rshift + rbits;
- bshift = gshift + gbits;
-#endif
- } else {
- return FALSE;
- }
-#define COLOR_INT_TO_FLOAT(_fc_, _p_, _s_, _bits_) \
- *_fc_ = (((_p_) >> (_s_)) & (( 1 << (_bits_)) - 1)) \
- / (float)((1<<(_bits_)) - 1)
-
- if (rbits)
- COLOR_INT_TO_FLOAT(red, pixel, rshift, rbits);
- else
- *red = 0;
-
- if (gbits)
- COLOR_INT_TO_FLOAT(green, pixel, gshift, gbits);
- else
- *green = 0;
-
- if (bbits)
- COLOR_INT_TO_FLOAT(blue, pixel, bshift, bbits);
- else
- *blue = 0;
-
- if (abits)
- COLOR_INT_TO_FLOAT(alpha, pixel, ashift, abits);
- else
- *alpha = 1;
-
- return TRUE;
-}
-
-inline static Bool glamor_pict_format_is_compatible(PictFormatShort pict_format, int depth)
-{
- GLenum iformat;
-
- gl_iformat_for_depth(depth, &iformat);
- switch (iformat) {
- case GL_RGBA:
- return (pict_format == PICT_a8r8g8b8 || pict_format == PICT_x8r8g8b8);
- case GL_ALPHA:
- return (pict_format == PICT_a8);
- default:
- return FALSE;
- }
-}
-
-/* return TRUE if we can access this pixmap at DDX driver. */
-inline static Bool glamor_ddx_fallback_check_pixmap(DrawablePtr drawable)
-{
- PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable);
- glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
- return (!pixmap_priv
- || (pixmap_priv->type == GLAMOR_TEXTURE_DRM
- || pixmap_priv->type == GLAMOR_MEMORY
- || pixmap_priv->type == GLAMOR_DRM_ONLY));
-}
-
-inline static Bool glamor_ddx_fallback_check_gc(GCPtr gc)
-{
- PixmapPtr pixmap;
- if (!gc)
- return TRUE;
- switch (gc->fillStyle) {
- case FillStippled:
- case FillOpaqueStippled:
- pixmap = gc->stipple;
- break;
- case FillTiled:
- pixmap = gc->tile.pixmap;
- break;
- default:
- pixmap = NULL;
- }
- return (!pixmap || glamor_ddx_fallback_check_pixmap(&pixmap->drawable));
-}
-inline static Bool glamor_is_large_pixmap(PixmapPtr pixmap)
-{
- glamor_pixmap_private *priv;
-
- priv = glamor_get_pixmap_private(pixmap);
- return (priv->type == GLAMOR_TEXTURE_LARGE);
-}
-
-inline static Bool glamor_is_large_picture(PicturePtr picture)
-{
- PixmapPtr pixmap;
-
- if (picture->pDrawable) {
- pixmap = glamor_get_drawable_pixmap(picture->pDrawable);
- return glamor_is_large_pixmap(pixmap);
- }
- return FALSE;
-}
-
-inline static Bool glamor_tex_format_is_readable(GLenum format)
-{
- return ((format == GL_RGBA || format == GL_RGB || format == GL_ALPHA));
-
-}
-
-static inline void _glamor_dump_pixmap_bits(PixmapPtr pixmap, int x, int y, int w, int h)
-{
- int i,j;
- unsigned char * p = pixmap->devPrivate.ptr;
- int stride = pixmap->devKind;
-
- p = p + y * stride + x;
-
- for (i = 0; i < h; i++)
- {
- ErrorF("line %3d: ", i);
- for(j = 0; j < w; j++)
- ErrorF("%2d ", (p[j/8] & (1 << (j%8)))>>(j%8));
- p += stride;
- ErrorF("\n");
- }
-}
-
-static inline void _glamor_dump_pixmap_byte(PixmapPtr pixmap, int x, int y, int w, int h)
-{
- int i,j;
- unsigned char * p = pixmap->devPrivate.ptr;
- int stride = pixmap->devKind;
-
- p = p + y * stride + x;
-
- for (i = 0; i < h; i++)
- {
- ErrorF("line %3d: ", i);
- for(j = 0; j < w; j++)
- ErrorF("%2x ", p[j]);
- p += stride;
- ErrorF("\n");
- }
-}
-
-static inline void _glamor_dump_pixmap_sword(PixmapPtr pixmap, int x, int y, int w, int h)
-{
- int i,j;
- unsigned short * p = pixmap->devPrivate.ptr;
- int stride = pixmap->devKind / 2;
-
- p = p + y * stride + x;
-
- for (i = 0; i < h; i++)
- {
- ErrorF("line %3d: ", i);
- for(j = 0; j < w; j++)
- ErrorF("%2x ", p[j]);
- p += stride;
- ErrorF("\n");
- }
-}
-
-static inline void _glamor_dump_pixmap_word(PixmapPtr pixmap, int x, int y, int w, int h)
-{
- int i,j;
- unsigned int * p = pixmap->devPrivate.ptr;
- int stride = pixmap->devKind / 4;
-
- p = p + y * stride + x;
-
- for (i = 0; i < h; i++)
- {
- ErrorF("line %3d: ", i);
- for(j = 0; j < w; j++)
- ErrorF("%2x ", p[j]);
- p += stride;
- ErrorF("\n");
- }
-}
-
-static inline void glamor_dump_pixmap(PixmapPtr pixmap, int x, int y, int w, int h)
-{
- w = ((x + w) > pixmap->drawable.width) ? (pixmap->drawable.width - x) : w;
- h = ((y + h) > pixmap->drawable.height) ? (pixmap->drawable.height - y) : h;
-
- glamor_prepare_access(&pixmap->drawable, GLAMOR_ACCESS_RO);
- switch (pixmap->drawable.depth) {
- case 8:
- _glamor_dump_pixmap_byte(pixmap, x, y, w, h);
- break;
- case 15:
- case 16:
- _glamor_dump_pixmap_sword(pixmap, x, y, w, h);
- break;
-
- case 24:
- case 32:
- _glamor_dump_pixmap_word(pixmap, x, y, w, h);
- break;
- case 1:
- _glamor_dump_pixmap_bits(pixmap, x, y, w, h);
- break;
- default:
- ErrorF("dump depth %d, not implemented.\n", pixmap->drawable.depth);
- }
- glamor_finish_access(&pixmap->drawable, GLAMOR_ACCESS_RO);
-}
-
-static inline void _glamor_compare_pixmaps(PixmapPtr pixmap1, PixmapPtr pixmap2,
- int x, int y, int w, int h,
- PictFormatShort short_format,
- int all, int diffs)
-{
- int i, j;
- unsigned char * p1 = pixmap1->devPrivate.ptr;
- unsigned char * p2 = pixmap2->devPrivate.ptr;
- int line_need_printed = 0;
- int test_code = 0xAABBCCDD;
- int little_endian = 0;
- unsigned char *p_test;
- int bpp = pixmap1->drawable.depth == 8 ? 1 : 4;
- int stride = pixmap1->devKind;
-
- assert(pixmap1->devKind == pixmap2->devKind);
-
- ErrorF("stride:%d, width:%d, height:%d\n", stride, w, h);
-
- p1 = p1 + y * stride + x;
- p2 = p2 + y * stride + x;
-
- if (all) {
- for (i = 0; i < h; i++) {
- ErrorF("line %3d: ", i);
-
- for (j = 0; j < stride; j++) {
- if (j % bpp == 0)
- ErrorF("[%d]%2x:%2x ", j / bpp, p1[j], p2[j]);
- else
- ErrorF("%2x:%2x ", p1[j], p2[j]);
- }
-
- p1 += stride;
- p2 += stride;
- ErrorF("\n");
- }
- } else {
- if (short_format == PICT_a8r8g8b8) {
- p_test = (unsigned char *) & test_code;
- little_endian = (*p_test == 0xDD);
- bpp = 4;
-
- for (i = 0; i < h; i++) {
- line_need_printed = 0;
-
- for (j = 0; j < stride; j++) {
- if (p1[j] != p2[j] && (p1[j] - p2[j] > diffs || p2[j] - p1[j] > diffs)) {
- if (line_need_printed) {
- if (little_endian) {
- switch (j % 4) {
- case 2:
- ErrorF("[%d]RED:%2x:%2x ", j / bpp, p1[j], p2[j]);
- break;
- case 1:
- ErrorF("[%d]GREEN:%2x:%2x ", j / bpp, p1[j], p2[j]);
- break;
- case 0:
- ErrorF("[%d]BLUE:%2x:%2x ", j / bpp, p1[j], p2[j]);
- break;
- case 3:
- ErrorF("[%d]Alpha:%2x:%2x ", j / bpp, p1[j], p2[j]);
- break;
- }
- } else {
- switch (j % 4) {
- case 1:
- ErrorF("[%d]RED:%2x:%2x ", j / bpp, p1[j], p2[j]);
- break;
- case 2:
- ErrorF("[%d]GREEN:%2x:%2x ", j / bpp, p1[j], p2[j]);
- break;
- case 3:
- ErrorF("[%d]BLUE:%2x:%2x ", j / bpp, p1[j], p2[j]);
- break;
- case 0:
- ErrorF("[%d]Alpha:%2x:%2x ", j / bpp, p1[j], p2[j]);
- break;
- }
- }
- } else {
- line_need_printed = 1;
- j = -1;
- ErrorF("line %3d: ", i);
- continue;
- }
- }
- }
-
- p1 += stride;
- p2 += stride;
- ErrorF("\n");
- }
- } //more format can be added here.
- else { // the default format, just print.
- for (i = 0; i < h; i++) {
- line_need_printed = 0;
-
- for (j = 0; j < stride; j++) {
- if (p1[j] != p2[j]) {
- if (line_need_printed) {
- ErrorF("[%d]%2x:%2x ", j / bpp, p1[j], p2[j]);
- } else {
- line_need_printed = 1;
- j = -1;
- ErrorF("line %3d: ", i);
- continue;
- }
- }
- }
-
- p1 += stride;
- p2 += stride;
- ErrorF("\n");
- }
- }
- }
-}
-
-static inline void glamor_compare_pixmaps(PixmapPtr pixmap1, PixmapPtr pixmap2,
- int x, int y, int w, int h, int all, int diffs)
-{
- assert(pixmap1->drawable.depth == pixmap2->drawable.depth);
-
- glamor_prepare_access(&pixmap1->drawable, GLAMOR_ACCESS_RO);
- glamor_prepare_access(&pixmap2->drawable, GLAMOR_ACCESS_RO);
-
- _glamor_compare_pixmaps(pixmap1, pixmap2, x, y, w, h, -1, all, diffs);
-
- glamor_finish_access(&pixmap1->drawable, GLAMOR_ACCESS_RO);
- glamor_finish_access(&pixmap2->drawable, GLAMOR_ACCESS_RO);
-}
-
-/* This function is used to compare two pictures.
- If the picture has no drawable, we use fb functions to generate it. */
-static inline void glamor_compare_pictures( ScreenPtr screen,
- PicturePtr fst_picture,
- PicturePtr snd_picture,
- int x_source, int y_source,
- int width, int height,
- int all, int diffs)
-{
- PixmapPtr fst_pixmap;
- PixmapPtr snd_pixmap;
- int fst_generated, snd_generated;
- int error;
- int fst_type = -1;
- int snd_type = -1; // -1 represent has drawable.
-
- if (fst_picture->format != snd_picture->format) {
- ErrorF("Different picture format can not compare!\n");
- return;
- }
-
- if (!fst_picture->pDrawable) {
- fst_type = fst_picture->pSourcePict->type;
- }
-
- if (!snd_picture->pDrawable) {
- snd_type = snd_picture->pSourcePict->type;
- }
-
- if ((fst_type != -1) && (snd_type != -1) && (fst_type != snd_type)) {
- ErrorF("Different picture type will never be same!\n");
- return;
- }
-
- fst_generated = snd_generated = 0;
-
- if (!fst_picture->pDrawable) {
- PicturePtr pixman_pic;
- PixmapPtr pixmap = NULL;
- PictFormatShort format;
-
- format = fst_picture->format;
-
- pixmap = glamor_create_pixmap(screen,
- width, height,
- PIXMAN_FORMAT_DEPTH(format),
- GLAMOR_CREATE_PIXMAP_CPU);
-
- pixman_pic = CreatePicture(0,
- &pixmap->drawable,
- PictureMatchFormat(screen,
- PIXMAN_FORMAT_DEPTH(format), format),
- 0, 0, serverClient, &error);
-
- fbComposite(PictOpSrc, fst_picture, NULL, pixman_pic,
- x_source, y_source,
- 0, 0,
- 0, 0,
- width, height);
-
- glamor_destroy_pixmap(pixmap);
-
- fst_picture = pixman_pic;
- fst_generated = 1;
- }
-
- if (!snd_picture->pDrawable) {
- PicturePtr pixman_pic;
- PixmapPtr pixmap = NULL;
- PictFormatShort format;
-
- format = snd_picture->format;
-
- pixmap = glamor_create_pixmap(screen,
- width, height,
- PIXMAN_FORMAT_DEPTH(format),
- GLAMOR_CREATE_PIXMAP_CPU);
-
- pixman_pic = CreatePicture(0,
- &pixmap->drawable,
- PictureMatchFormat(screen,
- PIXMAN_FORMAT_DEPTH(format), format),
- 0, 0, serverClient, &error);
-
- fbComposite(PictOpSrc, snd_picture, NULL, pixman_pic,
- x_source, y_source,
- 0, 0,
- 0, 0,
- width, height);
-
- glamor_destroy_pixmap(pixmap);
-
- snd_picture = pixman_pic;
- snd_generated = 1;
- }
-
- fst_pixmap = glamor_get_drawable_pixmap(fst_picture->pDrawable);
- snd_pixmap = glamor_get_drawable_pixmap(snd_picture->pDrawable);
-
- if (fst_pixmap->drawable.depth != snd_pixmap->drawable.depth) {
- if (fst_generated)
- glamor_destroy_picture(fst_picture);
- if (snd_generated)
- glamor_destroy_picture(snd_picture);
-
- ErrorF("Different pixmap depth can not compare!\n");
- return;
- }
-
- glamor_prepare_access(&fst_pixmap->drawable, GLAMOR_ACCESS_RO);
- glamor_prepare_access(&snd_pixmap->drawable, GLAMOR_ACCESS_RO);
-
- if ((fst_type == SourcePictTypeLinear) ||
- (fst_type == SourcePictTypeRadial) ||
- (fst_type == SourcePictTypeConical) ||
- (snd_type == SourcePictTypeLinear) ||
- (snd_type == SourcePictTypeRadial) ||
- (snd_type == SourcePictTypeConical)) {
- x_source = y_source = 0;
- }
-
- _glamor_compare_pixmaps(fst_pixmap, snd_pixmap,
- x_source, y_source,
- width, height,
- fst_picture->format, all, diffs);
-
- glamor_finish_access(&fst_pixmap->drawable, GLAMOR_ACCESS_RO);
- glamor_finish_access(&snd_pixmap->drawable, GLAMOR_ACCESS_RO);
-
- if (fst_generated)
- glamor_destroy_picture(fst_picture);
- if (snd_generated)
- glamor_destroy_picture(snd_picture);
-
- return;
-}
-
-#ifdef __i386__
-static inline unsigned long __fls(unsigned long x)
-{
- asm("bsr %1,%0"
- : "=r" (x)
- : "rm" (x));
- return x;
-}
-#else
-static inline unsigned long __fls(unsigned long x)
-{
- int n;
-
- if (x == 0) return(0);
- n = 0;
- if (x <= 0x0000FFFF) {n = n +16; x = x <<16;}
- if (x <= 0x00FFFFFF) {n = n + 8; x = x << 8;}
- if (x <= 0x0FFFFFFF) {n = n + 4; x = x << 4;}
- if (x <= 0x3FFFFFFF) {n = n + 2; x = x << 2;}
- if (x <= 0x7FFFFFFF) {n = n + 1;}
- return 31 - n;
-}
-#endif
-
-static inline void glamor_make_current(ScreenPtr screen)
-{
- glamor_egl_make_current(screen);
-}
-
-static inline void glamor_restore_current(ScreenPtr screen)
-{
- glamor_egl_restore_context(screen);
-}
-
-#ifdef GLX_USE_SHARED_DISPATCH
-static inline glamor_gl_dispatch *
-glamor_get_dispatch(glamor_screen_private *glamor_priv)
-{
- if (glamor_priv->flags & GLAMOR_USE_EGL_SCREEN)
- glamor_make_current(glamor_priv->screen);
-
- return &glamor_priv->_dispatch;
-}
-
-static inline void
-glamor_put_dispatch(glamor_screen_private *glamor_priv)
-{
- if (glamor_priv->flags & GLAMOR_USE_EGL_SCREEN)
- glamor_restore_current(glamor_priv->screen);
-}
-#else
-#warning "Indirect GLX may be broken, need to implement context switch."
-static inline glamor_gl_dispatch *
-glamor_get_dispatch(glamor_screen_private *glamor_priv)
-{
- return &glamor_priv->_dispatch;
-}
-
-static inline void
-glamor_put_dispatch(glamor_screen_private *glamor_priv)
-{
-}
-
-#endif
-
-#endif
diff --git a/extra/glamor-egl/glapi.h b/extra/glamor-egl/glapi.h
deleted file mode 100644
index d510dac1d..000000000
--- a/extra/glamor-egl/glapi.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version: 7.1
- *
- * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-/**
- * \mainpage Mesa GL API Module
- *
- * \section GLAPIIntroduction Introduction
- *
- * The Mesa GL API module is responsible for dispatching all the
- * gl*() functions. All GL functions are dispatched by jumping through
- * the current dispatch table (basically a struct full of function
- * pointers.)
- *
- * A per-thread current dispatch table and per-thread current context
- * pointer are managed by this module too.
- *
- * This module is intended to be non-Mesa-specific so it can be used
- * with the X/DRI libGL also.
- */
-
-#ifndef _GLAPI_H
-#define _GLAPI_H
-
-#define GL_GLEXT_PROTOTYPES
-
-#if GLAMOR_GLES2
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
-#else
-#include <GL/gl.h>
-#include "GL/glext.h"
-#endif
-
-/* Is this needed? It is incomplete anyway. */
-#ifdef USE_MGL_NAMESPACE
-#define _glapi_set_dispatch _mglapi_set_dispatch
-#define _glapi_get_dispatch _mglapi_get_dispatch
-#define _glapi_set_context _mglapi_set_context
-#define _glapi_get_context _mglapi_get_context
-#define _glapi_Dispatch _mglapi_Dispatch
-#define _glapi_Context _mglapi_Context
-#endif
-
-typedef void (*_glapi_proc)(void);
-struct _glapi_table;
-
-
-#if defined (GLX_USE_TLS)
-
-extern __thread struct _glapi_table * _glapi_tls_Dispatch
- __attribute__((tls_model("initial-exec")));
-
-extern __thread void * _glapi_tls_Context
- __attribute__((tls_model("initial-exec")));
-
-extern const struct _glapi_table *_glapi_Dispatch;
-extern const void *_glapi_Context;
-
-# define GET_DISPATCH() _glapi_tls_Dispatch
-# define GET_CURRENT_CONTEXT(C) C = (typeof(C)) _glapi_tls_Context
-# define SET_CURRENT_CONTEXT(C) _glapi_tls_Context = (void*)C
-
-#else
-
-extern struct _glapi_table *_glapi_Dispatch;
-extern void *_glapi_Context;
-
-# ifdef THREADS
-
-# define GET_DISPATCH() \
- (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch())
-
-# define GET_CURRENT_CONTEXT(C) C = (typeof(C)) \
- (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context())
-
-
-# define SET_CURRENT_CONTEXT(C) do { if (likely(_glapi_Context)) \
- _glapi_Context = (void*)C; \
- else \
- _glapi_set_context(C); } while(0)
-
-# else
-
-# define GET_DISPATCH() _glapi_Dispatch
-# define GET_CURRENT_CONTEXT(C) C = (typeof(C)) _glapi_Context
-# define SET_CURRENT_CONTEXT(C) _glapi_Context = (void*)C
-
-# endif
-
-#endif /* defined (GLX_USE_TLS) */
-
-
-extern void
-_glapi_set_context(void *context);
-
-extern void *
-_glapi_get_context(void);
-
-#endif