Compare commits
20 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
b72aa83670 | ||
|
4e283e4f9e | ||
|
20431644c6 | ||
|
f6bfa3f73e | ||
|
956bc1d0e3 | ||
|
c53f6ecbd3 | ||
|
823bbd2280 | ||
|
e00118db05 | ||
|
d27513d070 | ||
|
99164bf932 | ||
|
7eb9118390 | ||
|
e9ab3825d5 | ||
|
ab7cedf46f | ||
|
001b730a94 | ||
|
def8a86451 | ||
|
9b664a4970 | ||
|
758fa20491 | ||
|
cc3a6bcd48 | ||
|
082a187a5c | ||
|
6651ada7db |
3
.gitignore
vendored
3
.gitignore
vendored
@ -3,6 +3,3 @@
|
|||||||
.build*
|
.build*
|
||||||
/mesa-*.tar.bz2
|
/mesa-*.tar.bz2
|
||||||
/mesa-*.tar.xz
|
/mesa-*.tar.xz
|
||||||
x86_64/
|
|
||||||
results_mesa/
|
|
||||||
mesa-*/
|
|
||||||
|
3952
0001-EGL-Implement-the-libglvnd-interface-for-EGL-v2.patch
Normal file
3952
0001-EGL-Implement-the-libglvnd-interface-for-EGL-v2.patch
Normal file
File diff suppressed because it is too large
Load Diff
26
0001-Fix-linkage-against-shared-glapi.patch
Normal file
26
0001-Fix-linkage-against-shared-glapi.patch
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
From 1b5a187c3c31513ae39cd2a917a3234c2c5f87fc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Adam Jackson <ajax@redhat.com>
|
||||||
|
Date: Wed, 12 Oct 2016 13:41:33 -0400
|
||||||
|
Subject: [PATCH] Fix linkage against shared glapi
|
||||||
|
|
||||||
|
Signed-off-by: Adam Jackson <ajax@redhat.com>
|
||||||
|
---
|
||||||
|
src/gallium/targets/osmesa/Makefile.am | 2 +-
|
||||||
|
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/gallium/targets/osmesa/Makefile.am b/src/gallium/targets/osmesa/Makefile.am
|
||||||
|
index 5d39486..04add87 100644
|
||||||
|
--- a/src/gallium/targets/osmesa/Makefile.am
|
||||||
|
+++ b/src/gallium/targets/osmesa/Makefile.am
|
||||||
|
@@ -63,7 +63,7 @@ lib@OSMESA_LIB@_la_LIBADD = \
|
||||||
|
$(top_builddir)/src/gallium/drivers/trace/libtrace.la \
|
||||||
|
$(top_builddir)/src/gallium/drivers/softpipe/libsoftpipe.la \
|
||||||
|
$(top_builddir)/src/gallium/state_trackers/osmesa/libosmesa.la \
|
||||||
|
- $(top_builddir)/src/mapi/glapi/libglapi.la \
|
||||||
|
+ $(top_builddir)/src/mapi/shared-glapi/libglapi.la \
|
||||||
|
$(SHARED_GLAPI_LIB) \
|
||||||
|
$(OSMESA_LIB_DEPS) \
|
||||||
|
$(CLOCK_LIB)
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
@ -1,37 +0,0 @@
|
|||||||
From c9987fca1fa611e48f85644493edd8d5a30cf403 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tom Stellard <tstellar@redhat.com>
|
|
||||||
Date: Fri, 13 Dec 2019 17:42:17 +0000
|
|
||||||
Subject: [PATCH] Link with libclang-cpp
|
|
||||||
|
|
||||||
---
|
|
||||||
src/gallium/targets/opencl/meson.build | 14 +-------------
|
|
||||||
1 file changed, 1 insertion(+), 13 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/gallium/targets/opencl/meson.build b/src/gallium/targets/opencl/meson.build
|
|
||||||
index 907cc74337d..031d35b9716 100644
|
|
||||||
--- a/src/gallium/targets/opencl/meson.build
|
|
||||||
+++ b/src/gallium/targets/opencl/meson.build
|
|
||||||
@@ -43,19 +43,7 @@ libopencl = shared_library(
|
|
||||||
dependencies : [
|
|
||||||
idep_mesautil,
|
|
||||||
dep_clock, dep_dl, dep_unwind, dep_elf,
|
|
||||||
- cpp.find_library('clangCodeGen', dirs : llvm_libdir),
|
|
||||||
- cpp.find_library('clangFrontendTool', dirs : llvm_libdir),
|
|
||||||
- cpp.find_library('clangFrontend', dirs : llvm_libdir),
|
|
||||||
- cpp.find_library('clangDriver', dirs : llvm_libdir),
|
|
||||||
- cpp.find_library('clangSerialization', dirs : llvm_libdir),
|
|
||||||
- cpp.find_library('clangParse', dirs : llvm_libdir),
|
|
||||||
- cpp.find_library('clangSema', dirs : llvm_libdir),
|
|
||||||
- cpp.find_library('clangAnalysis', dirs : llvm_libdir),
|
|
||||||
- cpp.find_library('clangAST', dirs : llvm_libdir),
|
|
||||||
- cpp.find_library('clangASTMatchers', dirs : llvm_libdir),
|
|
||||||
- cpp.find_library('clangEdit', dirs : llvm_libdir),
|
|
||||||
- cpp.find_library('clangLex', dirs : llvm_libdir),
|
|
||||||
- cpp.find_library('clangBasic', dirs : llvm_libdir),
|
|
||||||
+ cpp.find_library('clang-cpp', dirs : llvm_libdir),
|
|
||||||
],
|
|
||||||
version : '@0@.0.0'.format(opencl_version),
|
|
||||||
install : true,
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
140
0001-gallium-radeon-add-support-for-sharing-textures-with.patch
Normal file
140
0001-gallium-radeon-add-support-for-sharing-textures-with.patch
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
From 095803a37aa67361fc68604e81f858f31ae59b1b Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com>
|
||||||
|
Date: Thu, 2 Jun 2016 23:36:43 +0200
|
||||||
|
Subject: [PATCH] gallium/radeon: add support for sharing textures with DCC
|
||||||
|
between processes
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
v2: use a function for calculating WORD1 of bo metadata
|
||||||
|
|
||||||
|
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
|
||||||
|
---
|
||||||
|
src/gallium/drivers/radeon/r600_pipe_common.h | 4 +++
|
||||||
|
src/gallium/drivers/radeon/r600_texture.c | 16 +++++++++---
|
||||||
|
src/gallium/drivers/radeonsi/si_state.c | 35 ++++++++++++++++++++++++++-
|
||||||
|
3 files changed, 51 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h
|
||||||
|
index 2d60da4..fd658b6 100644
|
||||||
|
--- a/src/gallium/drivers/radeon/r600_pipe_common.h
|
||||||
|
+++ b/src/gallium/drivers/radeon/r600_pipe_common.h
|
||||||
|
@@ -379,6 +379,10 @@ struct r600_common_screen {
|
||||||
|
void (*query_opaque_metadata)(struct r600_common_screen *rscreen,
|
||||||
|
struct r600_texture *rtex,
|
||||||
|
struct radeon_bo_metadata *md);
|
||||||
|
+
|
||||||
|
+ void (*apply_opaque_metadata)(struct r600_common_screen *rscreen,
|
||||||
|
+ struct r600_texture *rtex,
|
||||||
|
+ struct radeon_bo_metadata *md);
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This encapsulates a state or an operation which can emitted into the GPU
|
||||||
|
diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c
|
||||||
|
index 0f5c08f..920cc21 100644
|
||||||
|
--- a/src/gallium/drivers/radeon/r600_texture.c
|
||||||
|
+++ b/src/gallium/drivers/radeon/r600_texture.c
|
||||||
|
@@ -1035,8 +1035,12 @@ r600_texture_create_object(struct pipe_screen *screen,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (!buf && rtex->surface.dcc_size &&
|
||||||
|
- !(rscreen->debug_flags & DBG_NO_DCC)) {
|
||||||
|
+ /* Shared textures must always set up DCC here.
|
||||||
|
+ * If it's not present, it will be disabled by
|
||||||
|
+ * apply_opaque_metadata later.
|
||||||
|
+ */
|
||||||
|
+ if (rtex->surface.dcc_size &&
|
||||||
|
+ (buf || !(rscreen->debug_flags & DBG_NO_DCC))) {
|
||||||
|
/* Reserve space for the DCC buffer. */
|
||||||
|
rtex->dcc_offset = align64(rtex->size, rtex->surface.dcc_alignment);
|
||||||
|
rtex->size = rtex->dcc_offset + rtex->surface.dcc_size;
|
||||||
|
@@ -1063,7 +1067,9 @@ r600_texture_create_object(struct pipe_screen *screen,
|
||||||
|
rtex->cmask.offset, rtex->cmask.size,
|
||||||
|
0xCCCCCCCC, R600_COHERENCY_NONE);
|
||||||
|
}
|
||||||
|
- if (rtex->dcc_offset) {
|
||||||
|
+
|
||||||
|
+ /* Initialize DCC only if the texture is not being imported. */
|
||||||
|
+ if (!buf && rtex->dcc_offset) {
|
||||||
|
r600_screen_clear_buffer(rscreen, &rtex->resource.b.b,
|
||||||
|
rtex->dcc_offset,
|
||||||
|
rtex->surface.dcc_size,
|
||||||
|
@@ -1229,6 +1235,10 @@ static struct pipe_resource *r600_texture_from_handle(struct pipe_screen *screen
|
||||||
|
|
||||||
|
rtex->resource.is_shared = true;
|
||||||
|
rtex->resource.external_usage = usage;
|
||||||
|
+
|
||||||
|
+ if (rscreen->apply_opaque_metadata)
|
||||||
|
+ rscreen->apply_opaque_metadata(rscreen, rtex, &metadata);
|
||||||
|
+
|
||||||
|
return &rtex->resource.b.b;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
|
||||||
|
index 14520ca..e506ec9 100644
|
||||||
|
--- a/src/gallium/drivers/radeonsi/si_state.c
|
||||||
|
+++ b/src/gallium/drivers/radeonsi/si_state.c
|
||||||
|
@@ -3398,6 +3398,11 @@ void si_init_state_functions(struct si_context *sctx)
|
||||||
|
si_init_config(sctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static uint32_t si_get_bo_metadata_word1(struct r600_common_screen *rscreen)
|
||||||
|
+{
|
||||||
|
+ return (ATI_VENDOR_ID << 16) | rscreen->info.pci_id;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void si_query_opaque_metadata(struct r600_common_screen *rscreen,
|
||||||
|
struct r600_texture *rtex,
|
||||||
|
struct radeon_bo_metadata *md)
|
||||||
|
@@ -3432,7 +3437,7 @@ static void si_query_opaque_metadata(struct r600_common_screen *rscreen,
|
||||||
|
md->metadata[0] = 1; /* metadata image format version 1 */
|
||||||
|
|
||||||
|
/* TILE_MODE_INDEX is ambiguous without a PCI ID. */
|
||||||
|
- md->metadata[1] = (ATI_VENDOR_ID << 16) | rscreen->info.pci_id;
|
||||||
|
+ md->metadata[1] = si_get_bo_metadata_word1(rscreen);
|
||||||
|
|
||||||
|
si_make_texture_descriptor(sscreen, rtex, true,
|
||||||
|
res->target, res->format,
|
||||||
|
@@ -3459,9 +3464,37 @@ static void si_query_opaque_metadata(struct r600_common_screen *rscreen,
|
||||||
|
md->size_metadata = (11 + res->last_level) * 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void si_apply_opaque_metadata(struct r600_common_screen *rscreen,
|
||||||
|
+ struct r600_texture *rtex,
|
||||||
|
+ struct radeon_bo_metadata *md)
|
||||||
|
+{
|
||||||
|
+ uint32_t *desc = &md->metadata[2];
|
||||||
|
+
|
||||||
|
+ if (rscreen->chip_class < VI)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ /* Return if DCC is enabled. The texture should be set up with it
|
||||||
|
+ * already.
|
||||||
|
+ */
|
||||||
|
+ if (md->size_metadata >= 11 * 4 &&
|
||||||
|
+ md->metadata[0] != 0 &&
|
||||||
|
+ md->metadata[1] == si_get_bo_metadata_word1(rscreen) &&
|
||||||
|
+ G_008F28_COMPRESSION_EN(desc[6])) {
|
||||||
|
+ assert(rtex->dcc_offset == ((uint64_t)desc[7] << 8));
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Disable DCC. These are always set by texture_from_handle and must
|
||||||
|
+ * be cleared here.
|
||||||
|
+ */
|
||||||
|
+ rtex->dcc_offset = 0;
|
||||||
|
+ rtex->cb_color_info &= ~VI_S_028C70_DCC_ENABLE(1);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void si_init_screen_state_functions(struct si_screen *sscreen)
|
||||||
|
{
|
||||||
|
sscreen->b.query_opaque_metadata = si_query_opaque_metadata;
|
||||||
|
+ sscreen->b.apply_opaque_metadata = si_apply_opaque_metadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
82
0001-glapi-Link-with-glapi-when-built-shared.patch
Normal file
82
0001-glapi-Link-with-glapi-when-built-shared.patch
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
From 16875ea5b9170f2213fd486d763f27a9d6dfc1b5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nicolas Chauvet <kwizart@gmail.com>
|
||||||
|
Date: Tue, 25 Oct 2016 09:35:13 +0200
|
||||||
|
Subject: [PATCH 1/3] glapi: Link with glapi when built shared
|
||||||
|
|
||||||
|
This patch explicitly links to libglapi when built shared.
|
||||||
|
This was specially needed to avoid undefined non-weak-symbol as shown
|
||||||
|
with:
|
||||||
|
|
||||||
|
ldd -r /usr/lib64/dri/i915_dri.so
|
||||||
|
linux-vdso.so.1 (0x00007fff821f4000)
|
||||||
|
libdrm_intel.so.1 => /lib64/libdrm_intel.so.1 (0x00007f6adf2c7000)
|
||||||
|
libdrm_nouveau.so.2 => /lib64/libdrm_nouveau.so.2 (0x00007f6adf0be000)
|
||||||
|
libdrm_radeon.so.1 => /lib64/libdrm_radeon.so.1 (0x00007f6adeeb2000)
|
||||||
|
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f6adec8b000)
|
||||||
|
libdrm.so.2 => /lib64/libdrm.so.2 (0x00007f6adea7c000)
|
||||||
|
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f6ade84f000)
|
||||||
|
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6ade633000)
|
||||||
|
libdl.so.2 => /lib64/libdl.so.2 (0x00007f6ade42f000)
|
||||||
|
libm.so.6 => /lib64/libm.so.6 (0x00007f6ade125000)
|
||||||
|
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f6addf0e000)
|
||||||
|
libc.so.6 => /lib64/libc.so.6 (0x00007f6addb4c000)
|
||||||
|
/lib64/ld-linux-x86-64.so.2 (0x000056274e913000)
|
||||||
|
libpciaccess.so.0 => /lib64/libpciaccess.so.0 (0x00007f6add941000)
|
||||||
|
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f6add6ce000)
|
||||||
|
undefined symbol: _glapi_get_dispatch_table_size (/usr/lib64/dri/i915_dri.so)
|
||||||
|
undefined symbol: _glapi_get_context (/usr/lib64/dri/i915_dri.so)
|
||||||
|
undefined symbol: _glapi_add_dispatch (/usr/lib64/dri/i915_dri.so)
|
||||||
|
undefined symbol: _glapi_check_multithread (/usr/lib64/dri/i915_dri.so)
|
||||||
|
undefined symbol: _glapi_tls_Context (/usr/lib64/dri/i915_dri.so)
|
||||||
|
undefined symbol: _glapi_set_context (/usr/lib64/dri/i915_dri.so)
|
||||||
|
undefined symbol: _glapi_set_dispatch (/usr/lib64/dri/i915_dri.so)
|
||||||
|
undefined symbol: _glapi_tls_Dispatch (/usr/lib64/dri/i915_dri.so)
|
||||||
|
|
||||||
|
v3: Add gallium counterpart for radeon cases
|
||||||
|
Reported-by: Jonathan Dieter <jdieter@lesbg.com>
|
||||||
|
|
||||||
|
v2: Add Bugzilla and Signed-off
|
||||||
|
|
||||||
|
Fixes: 0cbc90c57c ("mesa: dri: Add shared glapi to LIBADD on Android")
|
||||||
|
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98428
|
||||||
|
Signed-off-by: Nicolas Chauvet <kwizart@gmail.com>
|
||||||
|
---
|
||||||
|
src/gallium/targets/dri/Makefile.am | 2 --
|
||||||
|
src/mesa/drivers/dri/Makefile.am | 3 ---
|
||||||
|
2 files changed, 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/gallium/targets/dri/Makefile.am b/src/gallium/targets/dri/Makefile.am
|
||||||
|
index bca747f..05f6c8c 100644
|
||||||
|
--- a/src/gallium/targets/dri/Makefile.am
|
||||||
|
+++ b/src/gallium/targets/dri/Makefile.am
|
||||||
|
@@ -1,10 +1,8 @@
|
||||||
|
include $(top_srcdir)/src/gallium/Automake.inc
|
||||||
|
|
||||||
|
-if HAVE_ANDROID
|
||||||
|
if HAVE_SHARED_GLAPI
|
||||||
|
SHARED_GLAPI_LIB = $(top_builddir)/src/mapi/shared-glapi/libglapi.la
|
||||||
|
endif
|
||||||
|
-endif
|
||||||
|
|
||||||
|
AM_CFLAGS = \
|
||||||
|
-I$(top_srcdir)/src/mapi \
|
||||||
|
diff --git a/src/mesa/drivers/dri/Makefile.am b/src/mesa/drivers/dri/Makefile.am
|
||||||
|
index 1c6dd08..8e68fc0 100644
|
||||||
|
--- a/src/mesa/drivers/dri/Makefile.am
|
||||||
|
+++ b/src/mesa/drivers/dri/Makefile.am
|
||||||
|
@@ -6,12 +6,9 @@ MEGADRIVERS_DEPS =
|
||||||
|
|
||||||
|
SUBDIRS+=common
|
||||||
|
|
||||||
|
-# On Android, we need to explicitly link to libglapi.so.
|
||||||
|
-if HAVE_ANDROID
|
||||||
|
if HAVE_SHARED_GLAPI
|
||||||
|
SHARED_GLAPI_LIB = $(top_builddir)/src/mapi/shared-glapi/libglapi.la
|
||||||
|
endif
|
||||||
|
-endif
|
||||||
|
|
||||||
|
if HAVE_I915_DRI
|
||||||
|
SUBDIRS += i915
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
66
0001-glx-glvnd-Fix-GLXdispatchIndex-sorting.patch
Normal file
66
0001-glx-glvnd-Fix-GLXdispatchIndex-sorting.patch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
From d77692b73964b2dc81937a1d6ba2e927e1d548cc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
Date: Mon, 6 Feb 2017 12:13:17 +0100
|
||||||
|
Subject: [PATCH] glx/glvnd: Fix GLXdispatchIndex sorting
|
||||||
|
|
||||||
|
Commit 8bca8d89ef3b ("glx/glvnd: Fix dispatch function names and indices")
|
||||||
|
fixed the sorting of the array initializers in g_glxglvnddispatchfuncs.c
|
||||||
|
because FindGLXFunction's binary search needs these to be sorted
|
||||||
|
alphabetically.
|
||||||
|
|
||||||
|
That commit also mostly fixed the sorting of the DI_foo defines in
|
||||||
|
g_glxglvnddispatchindices.h, which is what actually matters as the
|
||||||
|
arrays are initialized using "[DI_foo] = glXfoo," but a small error
|
||||||
|
crept in which at least causes glXGetVisualFromFBConfigSGIX to not
|
||||||
|
resolve, breaking games such as "The Binding of Isaac: Rebirth" and
|
||||||
|
"Crypt of the NecroDancer" from Steam not working and possible causes
|
||||||
|
other problems too.
|
||||||
|
|
||||||
|
This commit fixes the last of the sorting errors, fixing these mentioned
|
||||||
|
games not working.
|
||||||
|
|
||||||
|
Fixes: 8bca8d89ef3b ("glx/glvnd: Fix dispatch function names and indices")
|
||||||
|
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
|
||||||
|
Cc: "17.0" <mesa-stable@lists.freedesktop.org>
|
||||||
|
Cc: Adam Jackson <ajax@redhat.com>
|
||||||
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
---
|
||||||
|
src/glx/g_glxglvnddispatchindices.h | 8 ++++----
|
||||||
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/glx/g_glxglvnddispatchindices.h b/src/glx/g_glxglvnddispatchindices.h
|
||||||
|
index 0891654..05a2c8c 100644
|
||||||
|
--- a/src/glx/g_glxglvnddispatchindices.h
|
||||||
|
+++ b/src/glx/g_glxglvnddispatchindices.h
|
||||||
|
@@ -46,14 +46,14 @@ typedef enum __GLXdispatchIndex {
|
||||||
|
DI_GetMscRateOML,
|
||||||
|
// GetProcAddress implemented by libglvnd
|
||||||
|
// GetProcAddressARB implemented by libglvnd
|
||||||
|
+ DI_GetScreenDriver,
|
||||||
|
// GetSelectedEvent implemented by libglvnd
|
||||||
|
DI_GetSelectedEventSGIX,
|
||||||
|
+ DI_GetSwapIntervalMESA,
|
||||||
|
+ DI_GetSyncValuesOML,
|
||||||
|
DI_GetVideoSyncSGI,
|
||||||
|
// GetVisualFromFBConfig implemented by libglvnd
|
||||||
|
DI_GetVisualFromFBConfigSGIX,
|
||||||
|
- DI_GetScreenDriver,
|
||||||
|
- DI_GetSwapIntervalMESA,
|
||||||
|
- DI_GetSyncValuesOML,
|
||||||
|
// ImportContextEXT implemented by libglvnd
|
||||||
|
// IsDirect implemented by libglvnd
|
||||||
|
DI_JoinSwapGroupSGIX,
|
||||||
|
@@ -81,9 +81,9 @@ typedef enum __GLXdispatchIndex {
|
||||||
|
DI_SwapIntervalMESA,
|
||||||
|
DI_SwapIntervalSGI,
|
||||||
|
// UseXFont implemented by libglvnd
|
||||||
|
- // WaitGL implemented by libglvnd
|
||||||
|
DI_WaitForMscOML,
|
||||||
|
DI_WaitForSbcOML,
|
||||||
|
+ // WaitGL implemented by libglvnd
|
||||||
|
DI_WaitVideoSyncSGI,
|
||||||
|
// WaitX implemented by libglvnd
|
||||||
|
DI_LAST_INDEX
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
@ -0,0 +1,88 @@
|
|||||||
|
From efa4f2ebc1e788c3f1cfcf3842058cf838171653 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
Date: Mon, 20 Mar 2017 08:41:26 +0100
|
||||||
|
Subject: [PATCH] glxglvnddispatch: Add missing dispatch for GetDriverConfig
|
||||||
|
|
||||||
|
Together with some fixes to xdriinfo this fixes xdriinfo not working
|
||||||
|
with glvnd.
|
||||||
|
|
||||||
|
Since apps (xdriinfo) expect GetDriverConfig to work without going to
|
||||||
|
need through the dance to setup a glxcontext (which is a reasonable
|
||||||
|
expectation IMHO), the dispatch for this ends up significantly different
|
||||||
|
then any other dispatch function.
|
||||||
|
|
||||||
|
This patch gets the job done, but I'm not really happy with how this
|
||||||
|
patch turned out, suggestions for a better fix are welcome.
|
||||||
|
|
||||||
|
Cc: Kyle Brenneman <kbrenneman@nvidia.com>
|
||||||
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
---
|
||||||
|
src/glx/g_glxglvnddispatchfuncs.c | 18 ++++++++++++++++++
|
||||||
|
src/glx/g_glxglvnddispatchindices.h | 1 +
|
||||||
|
2 files changed, 19 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/glx/g_glxglvnddispatchfuncs.c b/src/glx/g_glxglvnddispatchfuncs.c
|
||||||
|
index b5e3398..040cdf8 100644
|
||||||
|
--- a/src/glx/g_glxglvnddispatchfuncs.c
|
||||||
|
+++ b/src/glx/g_glxglvnddispatchfuncs.c
|
||||||
|
@@ -4,6 +4,7 @@
|
||||||
|
*/
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
+#include "glxclient.h"
|
||||||
|
#include "glxglvnd.h"
|
||||||
|
#include "glxglvnddispatchfuncs.h"
|
||||||
|
#include "g_glxglvnddispatchindices.h"
|
||||||
|
@@ -50,6 +51,7 @@ const char * const __glXDispatchTableStrings[DI_LAST_INDEX] = {
|
||||||
|
__ATTRIB(GetCurrentDisplayEXT),
|
||||||
|
// glXGetCurrentDrawable implemented by libglvnd
|
||||||
|
// glXGetCurrentReadDrawable implemented by libglvnd
|
||||||
|
+ __ATTRIB(GetDriverConfig),
|
||||||
|
// glXGetFBConfigAttrib implemented by libglvnd
|
||||||
|
__ATTRIB(GetFBConfigAttribSGIX),
|
||||||
|
__ATTRIB(GetFBConfigFromVisualSGIX),
|
||||||
|
@@ -334,6 +336,21 @@ static Display *dispatch_GetCurrentDisplayEXT(void)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
+static const char *dispatch_GetDriverConfig(const char *driverName)
|
||||||
|
+{
|
||||||
|
+ /*
|
||||||
|
+ * The options are constant for a given driverName, so we do not need
|
||||||
|
+ * a context (and apps expect to be able to call this without one).
|
||||||
|
+ */
|
||||||
|
+#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
|
||||||
|
+ return glXGetDriverConfig(driverName);
|
||||||
|
+#else
|
||||||
|
+ return NULL;
|
||||||
|
+#endif
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
static int dispatch_GetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config,
|
||||||
|
int attribute, int *value_return)
|
||||||
|
{
|
||||||
|
@@ -939,6 +956,7 @@ const void * const __glXDispatchFunctions[DI_LAST_INDEX + 1] = {
|
||||||
|
__ATTRIB(DestroyGLXPbufferSGIX),
|
||||||
|
__ATTRIB(GetContextIDEXT),
|
||||||
|
__ATTRIB(GetCurrentDisplayEXT),
|
||||||
|
+ __ATTRIB(GetDriverConfig),
|
||||||
|
__ATTRIB(GetFBConfigAttribSGIX),
|
||||||
|
__ATTRIB(GetFBConfigFromVisualSGIX),
|
||||||
|
__ATTRIB(GetMscRateOML),
|
||||||
|
diff --git a/src/glx/g_glxglvnddispatchindices.h b/src/glx/g_glxglvnddispatchindices.h
|
||||||
|
index 05a2c8c..3ba50a7 100644
|
||||||
|
--- a/src/glx/g_glxglvnddispatchindices.h
|
||||||
|
+++ b/src/glx/g_glxglvnddispatchindices.h
|
||||||
|
@@ -39,6 +39,7 @@ typedef enum __GLXdispatchIndex {
|
||||||
|
DI_GetCurrentDisplayEXT,
|
||||||
|
// GetCurrentDrawable implemented by libglvnd
|
||||||
|
// GetCurrentReadDrawable implemented by libglvnd
|
||||||
|
+ DI_GetDriverConfig,
|
||||||
|
// GetFBConfigAttrib implemented by libglvnd
|
||||||
|
DI_GetFBConfigAttribSGIX,
|
||||||
|
DI_GetFBConfigFromVisualSGIX,
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
26
0001-llvm-SONAME-without-version.patch
Normal file
26
0001-llvm-SONAME-without-version.patch
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
From c2b4d93a5e4796ca53361c61d7e31edc24241932 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Igor Gnatenko <i.gnatenko.brain@gmail.com>
|
||||||
|
Date: Sun, 20 Mar 2016 13:26:25 +0100
|
||||||
|
Subject: [PATCH 1/4] llvm SONAME without version
|
||||||
|
|
||||||
|
Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
|
||||||
|
---
|
||||||
|
configure.ac | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 5f75c60..d77f907 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -2387,7 +2387,7 @@ if test "x$MESA_LLVM" != x0; then
|
||||||
|
dnl (See https://llvm.org/bugs/show_bug.cgi?id=6823)
|
||||||
|
if test "x$enable_llvm_shared_libs" = xyes; then
|
||||||
|
dnl We can't use $LLVM_VERSION because it has 'svn' stripped out,
|
||||||
|
- LLVM_SO_NAME=LLVM-`$LLVM_CONFIG --version`
|
||||||
|
+ LLVM_SO_NAME=LLVM
|
||||||
|
AS_IF([test -f "$LLVM_LIBDIR/lib$LLVM_SO_NAME.$IMP_LIB_EXT"], [llvm_have_one_so=yes])
|
||||||
|
|
||||||
|
if test "x$llvm_have_one_so" = xyes; then
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
50
0001-nvc0-Disable-BGRA8-images-on-Fermi.patch
Normal file
50
0001-nvc0-Disable-BGRA8-images-on-Fermi.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
From 14a5478a27ccd58855d49d227b0762287fd2cbc2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lyude <lyude@redhat.com>
|
||||||
|
Date: Fri, 2 Jun 2017 20:27:07 -0400
|
||||||
|
Subject: [PATCH] nvc0: Disable BGRA8 images on Fermi
|
||||||
|
|
||||||
|
For unknown reasons, using BGRA8 images on Fermi results in breaking
|
||||||
|
reads from PBOs, such that they always return 0x0. Discovered this
|
||||||
|
through a glamor bug, and confirmed it does indeed break a good number
|
||||||
|
of piglit tests such as spec/arb_pixel_buffer_object/pbo-read-argb8888
|
||||||
|
|
||||||
|
Until we have a proper fix, just disable this functionality on Fermi.
|
||||||
|
|
||||||
|
Signed-off-by: Lyude <lyude@redhat.com>
|
||||||
|
---
|
||||||
|
src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 19 ++++++++++++++-----
|
||||||
|
1 file changed, 14 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
|
||||||
|
index c636926..f6c5c72 100644
|
||||||
|
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
|
||||||
|
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
|
||||||
|
@@ -87,11 +87,20 @@ nvc0_screen_is_format_supported(struct pipe_screen *pscreen,
|
||||||
|
bindings &= ~(PIPE_BIND_LINEAR |
|
||||||
|
PIPE_BIND_SHARED);
|
||||||
|
|
||||||
|
- if (bindings & PIPE_BIND_SHADER_IMAGE && sample_count > 1 &&
|
||||||
|
- nouveau_screen(pscreen)->class_3d >= GM107_3D_CLASS) {
|
||||||
|
- /* MS images are currently unsupported on Maxwell because they have to
|
||||||
|
- * be handled explicitly. */
|
||||||
|
- return false;
|
||||||
|
+ if (bindings & PIPE_BIND_SHADER_IMAGE) {
|
||||||
|
+ if (sample_count > 1 &&
|
||||||
|
+ nouveau_screen(pscreen)->class_3d >= GM107_3D_CLASS) {
|
||||||
|
+ /* MS images are currently unsupported on Maxwell because they have to
|
||||||
|
+ * be handled explicitly. */
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (format == PIPE_FORMAT_B8G8R8A8_UNORM &&
|
||||||
|
+ nouveau_screen(pscreen)->class_3d < NVE4_3D_CLASS) {
|
||||||
|
+ /* This should work on Fermi, but for currently unknown reasons it
|
||||||
|
+ * does not and results in breaking reads from pbos. */
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
return (( nvc0_format_table[format].usage |
|
||||||
|
--
|
||||||
|
2.9.4
|
||||||
|
|
@ -0,0 +1,33 @@
|
|||||||
|
From 2d4094c2caad6cef2f5544b3966fcc37ceb32036 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kyle Brenneman <kbrenneman@nvidia.com>
|
||||||
|
Date: Thu, 5 Jan 2017 14:29:47 -0700
|
||||||
|
Subject: [PATCH 2/2] fixup! EGL: Implement the libglvnd interface for EGL (v2)
|
||||||
|
|
||||||
|
---
|
||||||
|
src/egl/generate/eglFunctionList.py | 6 ++++--
|
||||||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/egl/generate/eglFunctionList.py b/src/egl/generate/eglFunctionList.py
|
||||||
|
index b19b5f7193..80cb83437c 100644
|
||||||
|
--- a/src/egl/generate/eglFunctionList.py
|
||||||
|
+++ b/src/egl/generate/eglFunctionList.py
|
||||||
|
@@ -53,12 +53,14 @@ method values:
|
||||||
|
Select the vendor that owns the current context.
|
||||||
|
"""
|
||||||
|
|
||||||
|
-def _eglFunc(name, method, static=False, public=False, inheader=None, prefix="", extension=None, retval=None):
|
||||||
|
+def _eglFunc(name, method, static=None, public=False, inheader=None, prefix="dispatch_", extension=None, retval=None):
|
||||||
|
"""
|
||||||
|
A convenience function to define an entry in the EGL function list.
|
||||||
|
"""
|
||||||
|
+ if static is None:
|
||||||
|
+ static = (not public and method != "custom")
|
||||||
|
if inheader is None:
|
||||||
|
- inheader = (not public)
|
||||||
|
+ inheader = (not static)
|
||||||
|
values = {
|
||||||
|
"method" : method,
|
||||||
|
"prefix" : prefix,
|
||||||
|
--
|
||||||
|
2.11.0
|
||||||
|
|
50
0002-hardware-gloat.patch
Normal file
50
0002-hardware-gloat.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
From 00bcd599310dc7fce4fe336ffd85902429051a0c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Igor Gnatenko <i.gnatenko.brain@gmail.com>
|
||||||
|
Date: Sun, 20 Mar 2016 13:27:04 +0100
|
||||||
|
Subject: [PATCH 2/4] hardware gloat
|
||||||
|
|
||||||
|
Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
|
||||||
|
---
|
||||||
|
src/gallium/drivers/llvmpipe/lp_screen.c | 7 +++++++
|
||||||
|
src/gallium/drivers/softpipe/sp_screen.c | 7 +++++++
|
||||||
|
2 files changed, 14 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c
|
||||||
|
index 4f61de8..3b0ec77 100644
|
||||||
|
--- a/src/gallium/drivers/llvmpipe/lp_screen.c
|
||||||
|
+++ b/src/gallium/drivers/llvmpipe/lp_screen.c
|
||||||
|
@@ -411,6 +411,13 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen,
|
||||||
|
if (!format_desc)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
+ if ((bind & PIPE_BIND_RENDER_TARGET) &&
|
||||||
|
+ format != PIPE_FORMAT_R9G9B9E5_FLOAT &&
|
||||||
|
+ format != PIPE_FORMAT_R11G11B10_FLOAT &&
|
||||||
|
+ util_format_is_float(format)) {
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
assert(target == PIPE_BUFFER ||
|
||||||
|
target == PIPE_TEXTURE_1D ||
|
||||||
|
target == PIPE_TEXTURE_1D_ARRAY ||
|
||||||
|
diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c
|
||||||
|
index 031602b..c279120 100644
|
||||||
|
--- a/src/gallium/drivers/softpipe/sp_screen.c
|
||||||
|
+++ b/src/gallium/drivers/softpipe/sp_screen.c
|
||||||
|
@@ -358,6 +358,13 @@ softpipe_is_format_supported( struct pipe_screen *screen,
|
||||||
|
if (!format_desc)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
+ if ((bind & PIPE_BIND_RENDER_TARGET) &&
|
||||||
|
+ format != PIPE_FORMAT_R9G9B9E5_FLOAT &&
|
||||||
|
+ format != PIPE_FORMAT_R11G11B10_FLOAT &&
|
||||||
|
+ util_format_is_float(format)) {
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (sample_count > 1)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
27
0004-bigendian-assert.patch
Normal file
27
0004-bigendian-assert.patch
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
From 6ccae713acc457d7df6ab15e124a7d77c5093213 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Igor Gnatenko <i.gnatenko.brain@gmail.com>
|
||||||
|
Date: Sun, 20 Mar 2016 13:28:07 +0100
|
||||||
|
Subject: [PATCH 4/4] bigendian assert
|
||||||
|
|
||||||
|
Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
|
||||||
|
---
|
||||||
|
src/gallium/auxiliary/util/u_math.h | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/gallium/auxiliary/util/u_math.h b/src/gallium/auxiliary/util/u_math.h
|
||||||
|
index ecb1d63..90ada14 100644
|
||||||
|
--- a/src/gallium/auxiliary/util/u_math.h
|
||||||
|
+++ b/src/gallium/auxiliary/util/u_math.h
|
||||||
|
@@ -59,6 +59,9 @@
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#ifdef PIPE_ARCH_BIG_ENDIAN
|
||||||
|
+#include <assert.h>
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#ifndef M_SQRT2
|
||||||
|
#define M_SQRT2 1.41421356237309504880
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
12
glvnd-fix-gl-dot-pc.patch
Normal file
12
glvnd-fix-gl-dot-pc.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
diff -up mesa-12.0.3/src/mesa/gl.pc.in.jx mesa-12.0.3/src/mesa/gl.pc.in
|
||||||
|
--- mesa-12.0.3/src/mesa/gl.pc.in.jx 2016-01-18 02:39:26.000000000 -0500
|
||||||
|
+++ mesa-12.0.3/src/mesa/gl.pc.in 2016-10-25 13:06:44.013159358 -0400
|
||||||
|
@@ -7,7 +7,7 @@ Name: gl
|
||||||
|
Description: Mesa OpenGL library
|
||||||
|
Requires.private: @GL_PC_REQ_PRIV@
|
||||||
|
Version: @PACKAGE_VERSION@
|
||||||
|
-Libs: -L${libdir} -l@GL_LIB@
|
||||||
|
+Libs: -L${libdir} -lGL
|
||||||
|
Libs.private: @GL_PC_LIB_PRIV@
|
||||||
|
Cflags: -I${includedir} @GL_PC_CFLAGS@
|
||||||
|
glx_tls: @GLX_TLS@
|
304
mesa_glinterop.h
Normal file
304
mesa_glinterop.h
Normal file
@ -0,0 +1,304 @@
|
|||||||
|
/*
|
||||||
|
* Mesa 3-D graphics library
|
||||||
|
*
|
||||||
|
* Copyright 2016 Advanced Micro Devices, 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 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Mesa OpenGL inter-driver interoperability interface designed for but not
|
||||||
|
* limited to OpenCL.
|
||||||
|
*
|
||||||
|
* This is a driver-agnostic, backward-compatible interface. The structures
|
||||||
|
* are only allowed to grow. They can never shrink and their members can
|
||||||
|
* never be removed, renamed, or redefined.
|
||||||
|
*
|
||||||
|
* The interface doesn't return a lot of static texture parameters like
|
||||||
|
* width, height, etc. It mainly returns mutable buffer and texture view
|
||||||
|
* parameters that can't be part of the texture allocation (because they are
|
||||||
|
* mutable). If drivers want to return more data or want to return static
|
||||||
|
* allocation parameters, they can do it in one of these two ways:
|
||||||
|
* - attaching the data to the DMABUF handle in a driver-specific way
|
||||||
|
* - passing the data via "out_driver_data" in the "in" structure.
|
||||||
|
*
|
||||||
|
* Mesa is expected to do a lot of error checking on behalf of OpenCL, such
|
||||||
|
* as checking the target, miplevel, and texture completeness.
|
||||||
|
*
|
||||||
|
* OpenCL, on the other hand, needs to check if the display+context combo
|
||||||
|
* is compatible with the OpenCL driver by querying the device information.
|
||||||
|
* It also needs to check if the texture internal format and channel ordering
|
||||||
|
* (returned in a driver-specific way) is supported by OpenCL, among other
|
||||||
|
* things.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MESA_GLINTEROP_H
|
||||||
|
#define MESA_GLINTEROP_H
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Forward declarations to avoid inclusion of GL/glx.h */
|
||||||
|
struct _XDisplay;
|
||||||
|
struct __GLXcontextRec;
|
||||||
|
|
||||||
|
/* Forward declarations to avoid inclusion of EGL/egl.h */
|
||||||
|
typedef void *EGLDisplay;
|
||||||
|
typedef void *EGLContext;
|
||||||
|
|
||||||
|
/** Returned error codes. */
|
||||||
|
enum {
|
||||||
|
MESA_GLINTEROP_SUCCESS = 0,
|
||||||
|
MESA_GLINTEROP_OUT_OF_RESOURCES,
|
||||||
|
MESA_GLINTEROP_OUT_OF_HOST_MEMORY,
|
||||||
|
MESA_GLINTEROP_INVALID_OPERATION,
|
||||||
|
MESA_GLINTEROP_INVALID_VERSION,
|
||||||
|
MESA_GLINTEROP_INVALID_DISPLAY,
|
||||||
|
MESA_GLINTEROP_INVALID_CONTEXT,
|
||||||
|
MESA_GLINTEROP_INVALID_TARGET,
|
||||||
|
MESA_GLINTEROP_INVALID_OBJECT,
|
||||||
|
MESA_GLINTEROP_INVALID_MIP_LEVEL,
|
||||||
|
MESA_GLINTEROP_UNSUPPORTED
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Access flags. */
|
||||||
|
enum {
|
||||||
|
MESA_GLINTEROP_ACCESS_READ_WRITE = 0,
|
||||||
|
MESA_GLINTEROP_ACCESS_READ_ONLY,
|
||||||
|
MESA_GLINTEROP_ACCESS_WRITE_ONLY
|
||||||
|
};
|
||||||
|
|
||||||
|
#define MESA_GLINTEROP_DEVICE_INFO_VERSION 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Device information returned by Mesa.
|
||||||
|
*/
|
||||||
|
struct mesa_glinterop_device_info {
|
||||||
|
/* The caller should set this to the version of the struct they support */
|
||||||
|
/* The callee will overwrite it if it supports a lower version.
|
||||||
|
*
|
||||||
|
* The caller should check the value and access up-to the version supported
|
||||||
|
* by the the callee.
|
||||||
|
*/
|
||||||
|
/* NOTE: Do not use the MESA_GLINTEROP_DEVICE_INFO_VERSION macro */
|
||||||
|
uint32_t version;
|
||||||
|
|
||||||
|
/* PCI location */
|
||||||
|
uint32_t pci_segment_group;
|
||||||
|
uint32_t pci_bus;
|
||||||
|
uint32_t pci_device;
|
||||||
|
uint32_t pci_function;
|
||||||
|
|
||||||
|
/* Device identification */
|
||||||
|
uint32_t vendor_id;
|
||||||
|
uint32_t device_id;
|
||||||
|
|
||||||
|
/* Structure version 1 ends here. */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define MESA_GLINTEROP_EXPORT_IN_VERSION 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Input parameters to Mesa interop export functions.
|
||||||
|
*/
|
||||||
|
struct mesa_glinterop_export_in {
|
||||||
|
/* The caller should set this to the version of the struct they support */
|
||||||
|
/* The callee will overwrite it if it supports a lower version.
|
||||||
|
*
|
||||||
|
* The caller should check the value and access up-to the version supported
|
||||||
|
* by the the callee.
|
||||||
|
*/
|
||||||
|
/* NOTE: Do not use the MESA_GLINTEROP_EXPORT_IN_VERSION macro */
|
||||||
|
uint32_t version;
|
||||||
|
|
||||||
|
/* One of the following:
|
||||||
|
* - GL_TEXTURE_BUFFER
|
||||||
|
* - GL_TEXTURE_1D
|
||||||
|
* - GL_TEXTURE_2D
|
||||||
|
* - GL_TEXTURE_3D
|
||||||
|
* - GL_TEXTURE_RECTANGLE
|
||||||
|
* - GL_TEXTURE_1D_ARRAY
|
||||||
|
* - GL_TEXTURE_2D_ARRAY
|
||||||
|
* - GL_TEXTURE_CUBE_MAP_ARRAY
|
||||||
|
* - GL_TEXTURE_CUBE_MAP
|
||||||
|
* - GL_TEXTURE_CUBE_MAP_POSITIVE_X
|
||||||
|
* - GL_TEXTURE_CUBE_MAP_NEGATIVE_X
|
||||||
|
* - GL_TEXTURE_CUBE_MAP_POSITIVE_Y
|
||||||
|
* - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
|
||||||
|
* - GL_TEXTURE_CUBE_MAP_POSITIVE_Z
|
||||||
|
* - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
|
||||||
|
* - GL_TEXTURE_2D_MULTISAMPLE
|
||||||
|
* - GL_TEXTURE_2D_MULTISAMPLE_ARRAY
|
||||||
|
* - GL_TEXTURE_EXTERNAL_OES
|
||||||
|
* - GL_RENDERBUFFER
|
||||||
|
* - GL_ARRAY_BUFFER
|
||||||
|
*/
|
||||||
|
unsigned target;
|
||||||
|
|
||||||
|
/* If target is GL_ARRAY_BUFFER, it's a buffer object.
|
||||||
|
* If target is GL_RENDERBUFFER, it's a renderbuffer object.
|
||||||
|
* If target is GL_TEXTURE_*, it's a texture object.
|
||||||
|
*/
|
||||||
|
unsigned obj;
|
||||||
|
|
||||||
|
/* Mipmap level. Ignored for non-texture objects. */
|
||||||
|
unsigned miplevel;
|
||||||
|
|
||||||
|
/* One of MESA_GLINTEROP_ACCESS_* flags. This describes how the exported
|
||||||
|
* object is going to be used.
|
||||||
|
*/
|
||||||
|
uint32_t access;
|
||||||
|
|
||||||
|
/* Size of memory pointed to by out_driver_data. */
|
||||||
|
uint32_t out_driver_data_size;
|
||||||
|
|
||||||
|
/* If the caller wants to query driver-specific data about the OpenGL
|
||||||
|
* object, this should point to the memory where that data will be stored.
|
||||||
|
* This is expected to be a temporary staging memory. The pointer is not
|
||||||
|
* allowed to be saved for later use by Mesa.
|
||||||
|
*/
|
||||||
|
void *out_driver_data;
|
||||||
|
/* Structure version 1 ends here. */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define MESA_GLINTEROP_EXPORT_OUT_VERSION 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Outputs of Mesa interop export functions.
|
||||||
|
*/
|
||||||
|
struct mesa_glinterop_export_out {
|
||||||
|
/* The caller should set this to the version of the struct they support */
|
||||||
|
/* The callee will overwrite it if it supports a lower version.
|
||||||
|
*
|
||||||
|
* The caller should check the value and access up-to the version supported
|
||||||
|
* by the the callee.
|
||||||
|
*/
|
||||||
|
/* NOTE: Do not use the MESA_GLINTEROP_EXPORT_OUT_VERSION macro */
|
||||||
|
uint32_t version;
|
||||||
|
|
||||||
|
/* The DMABUF handle. It must be closed by the caller using the POSIX
|
||||||
|
* close() function when it's not needed anymore. Mesa is not responsible
|
||||||
|
* for closing the handle.
|
||||||
|
*
|
||||||
|
* Not closing the handle by the caller will lead to a resource leak,
|
||||||
|
* will prevent releasing the GPU buffer, and may prevent creating new
|
||||||
|
* DMABUF handles within the process.
|
||||||
|
*/
|
||||||
|
int dmabuf_fd;
|
||||||
|
|
||||||
|
/* The mutable OpenGL internal format specified by glTextureView or
|
||||||
|
* glTexBuffer. If the object is not one of those, the original internal
|
||||||
|
* format specified by glTexStorage, glTexImage, or glRenderbufferStorage
|
||||||
|
* will be returned.
|
||||||
|
*/
|
||||||
|
unsigned internal_format;
|
||||||
|
|
||||||
|
/* Buffer offset and size for GL_ARRAY_BUFFER and GL_TEXTURE_BUFFER.
|
||||||
|
* This allows interop with suballocations (a buffer allocated within
|
||||||
|
* a larger buffer).
|
||||||
|
*
|
||||||
|
* Parameters specified by glTexBufferRange for GL_TEXTURE_BUFFER are
|
||||||
|
* applied to these and can shrink the range further.
|
||||||
|
*/
|
||||||
|
ptrdiff_t buf_offset;
|
||||||
|
ptrdiff_t buf_size;
|
||||||
|
|
||||||
|
/* Parameters specified by glTextureView. If the object is not a texture
|
||||||
|
* view, default parameters covering the whole texture will be returned.
|
||||||
|
*/
|
||||||
|
unsigned view_minlevel;
|
||||||
|
unsigned view_numlevels;
|
||||||
|
unsigned view_minlayer;
|
||||||
|
unsigned view_numlayers;
|
||||||
|
|
||||||
|
/* The number of bytes written to out_driver_data. */
|
||||||
|
uint32_t out_driver_data_written;
|
||||||
|
/* Structure version 1 ends here. */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query device information.
|
||||||
|
*
|
||||||
|
* \param dpy GLX display
|
||||||
|
* \param context GLX context
|
||||||
|
* \param out where to return the information
|
||||||
|
*
|
||||||
|
* \return MESA_GLINTEROP_SUCCESS or MESA_GLINTEROP_* != 0 on error
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
MesaGLInteropGLXQueryDeviceInfo(struct _XDisplay *dpy, struct __GLXcontextRec *context,
|
||||||
|
struct mesa_glinterop_device_info *out);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Same as MesaGLInteropGLXQueryDeviceInfo except that it accepts EGLDisplay
|
||||||
|
* and EGLContext.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
MesaGLInteropEGLQueryDeviceInfo(EGLDisplay dpy, EGLContext context,
|
||||||
|
struct mesa_glinterop_device_info *out);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create and return a DMABUF handle corresponding to the given OpenGL
|
||||||
|
* object, and return other parameters about the OpenGL object.
|
||||||
|
*
|
||||||
|
* \param dpy GLX display
|
||||||
|
* \param context GLX context
|
||||||
|
* \param in input parameters
|
||||||
|
* \param out return values
|
||||||
|
*
|
||||||
|
* \return MESA_GLINTEROP_SUCCESS or MESA_GLINTEROP_* != 0 on error
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
MesaGLInteropGLXExportObject(struct _XDisplay *dpy, struct __GLXcontextRec *context,
|
||||||
|
struct mesa_glinterop_export_in *in,
|
||||||
|
struct mesa_glinterop_export_out *out);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Same as MesaGLInteropGLXExportObject except that it accepts
|
||||||
|
* EGLDisplay and EGLContext.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
MesaGLInteropEGLExportObject(EGLDisplay dpy, EGLContext context,
|
||||||
|
struct mesa_glinterop_export_in *in,
|
||||||
|
struct mesa_glinterop_export_out *out);
|
||||||
|
|
||||||
|
|
||||||
|
typedef int (PFNMESAGLINTEROPGLXQUERYDEVICEINFOPROC)(struct _XDisplay *dpy, struct __GLXcontextRec *context,
|
||||||
|
struct mesa_glinterop_device_info *out);
|
||||||
|
typedef int (PFNMESAGLINTEROPEGLQUERYDEVICEINFOPROC)(EGLDisplay dpy, EGLContext context,
|
||||||
|
struct mesa_glinterop_device_info *out);
|
||||||
|
typedef int (PFNMESAGLINTEROPGLXEXPORTOBJECTPROC)(struct _XDisplay *dpy, struct __GLXcontextRec *context,
|
||||||
|
struct mesa_glinterop_export_in *in,
|
||||||
|
struct mesa_glinterop_export_out *out);
|
||||||
|
typedef int (PFNMESAGLINTEROPEGLEXPORTOBJECTPROC)(EGLDisplay dpy, EGLContext context,
|
||||||
|
struct mesa_glinterop_export_in *in,
|
||||||
|
struct mesa_glinterop_export_out *out);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* MESA_GLINTEROP_H */
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (mesa-20.0.2.tar.xz) = d6ffc29bbc5b908cb0f08fa1b5a83e029b76c7b697c488a73e6bb60990a55beeb3ecdba1745868f6885ee2f660975f5debf7d2c9418e0a96e2f7049e83fd89ab
|
SHA512 (mesa-17.0.5.tar.xz) = 942fa62c9098bcd030856cd622696eae418f292addb912e1d558cf27d396f25c3f2000dae97a12d1ff233f1ea157497259442082005035bb27b9bafb2cfc33c3
|
||||||
|
85
vc4-avoid-texture-load.patch
Normal file
85
vc4-avoid-texture-load.patch
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
From 99d790538de2e7d7d489a8638b13c5aa069c27c3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eric Anholt <eric@anholt.net>
|
||||||
|
Date: Thu, 13 Oct 2016 12:37:59 -0700
|
||||||
|
Subject: vc4: Avoid loading from the texture during non-utile-aligned
|
||||||
|
glTexImage().
|
||||||
|
|
||||||
|
Previously, the plan was "if the width/height we have to load/store isn't
|
||||||
|
the size the user is planning on writing, then we need to load the old
|
||||||
|
contents out beforehand to prevent writing back undefined".
|
||||||
|
|
||||||
|
However, when we're doing glTexImage() we often end up aligning the
|
||||||
|
width/height into the padding of the texture, and we don't actually
|
||||||
|
need to read out that padding.
|
||||||
|
|
||||||
|
Improves x11perf -aatrapezoid100 performance from ~460/sec to
|
||||||
|
~700/sec.
|
||||||
|
|
||||||
|
diff --git a/src/gallium/drivers/vc4/vc4_resource.c b/src/gallium/drivers/vc4/vc4_resource.c
|
||||||
|
index 4168079..704cd71 100644
|
||||||
|
--- a/src/gallium/drivers/vc4/vc4_resource.c
|
||||||
|
+++ b/src/gallium/drivers/vc4/vc4_resource.c
|
||||||
|
@@ -284,26 +284,48 @@ vc4_resource_transfer_map(struct pipe_context *pctx,
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* We need to align the box to utile boundaries, since that's
|
||||||
|
- * what load/store operate on.
|
||||||
|
+ * what load/store operates on. This may cause us to need to
|
||||||
|
+ * read out the original contents in that border area. Right
|
||||||
|
+ * now we just read out the entire contents, including the
|
||||||
|
+ * middle area that will just get overwritten.
|
||||||
|
*/
|
||||||
|
- uint32_t orig_width = ptrans->box.width;
|
||||||
|
- uint32_t orig_height = ptrans->box.height;
|
||||||
|
uint32_t box_start_x = ptrans->box.x & (utile_w - 1);
|
||||||
|
uint32_t box_start_y = ptrans->box.y & (utile_h - 1);
|
||||||
|
- ptrans->box.width += box_start_x;
|
||||||
|
- ptrans->box.x -= box_start_x;
|
||||||
|
- ptrans->box.height += box_start_y;
|
||||||
|
- ptrans->box.y -= box_start_y;
|
||||||
|
- ptrans->box.width = align(ptrans->box.width, utile_w);
|
||||||
|
- ptrans->box.height = align(ptrans->box.height, utile_h);
|
||||||
|
+ bool needs_load = (usage & PIPE_TRANSFER_READ) != 0;
|
||||||
|
+
|
||||||
|
+ if (box_start_x) {
|
||||||
|
+ ptrans->box.width += box_start_x;
|
||||||
|
+ ptrans->box.x -= box_start_x;
|
||||||
|
+ needs_load = true;
|
||||||
|
+ }
|
||||||
|
+ if (box_start_y) {
|
||||||
|
+ ptrans->box.height += box_start_y;
|
||||||
|
+ ptrans->box.y -= box_start_y;
|
||||||
|
+ needs_load = true;
|
||||||
|
+ }
|
||||||
|
+ if (ptrans->box.width & (utile_w - 1)) {
|
||||||
|
+ /* We only need to force a load if our border region
|
||||||
|
+ * we're extending into is actually part of the
|
||||||
|
+ * texture.
|
||||||
|
+ */
|
||||||
|
+ uint32_t slice_width = u_minify(prsc->width0, level);
|
||||||
|
+ if (ptrans->box.x + ptrans->box.width != slice_width)
|
||||||
|
+ needs_load = true;
|
||||||
|
+ ptrans->box.width = align(ptrans->box.width, utile_w);
|
||||||
|
+ }
|
||||||
|
+ if (ptrans->box.height & (utile_h - 1)) {
|
||||||
|
+ uint32_t slice_height = u_minify(prsc->height0, level);
|
||||||
|
+ if (ptrans->box.y + ptrans->box.height != slice_height)
|
||||||
|
+ needs_load = true;
|
||||||
|
+ ptrans->box.height = align(ptrans->box.height, utile_h);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
ptrans->stride = ptrans->box.width * rsc->cpp;
|
||||||
|
ptrans->layer_stride = ptrans->stride * ptrans->box.height;
|
||||||
|
|
||||||
|
trans->map = malloc(ptrans->layer_stride * ptrans->box.depth);
|
||||||
|
- if (usage & PIPE_TRANSFER_READ ||
|
||||||
|
- ptrans->box.width != orig_width ||
|
||||||
|
- ptrans->box.height != orig_height) {
|
||||||
|
+
|
||||||
|
+ if (needs_load) {
|
||||||
|
vc4_load_tiled_image(trans->map, ptrans->stride,
|
||||||
|
buf + slice->offset +
|
||||||
|
ptrans->box.z * rsc->cube_map_stride,
|
||||||
|
--
|
||||||
|
cgit v0.10.2
|
||||||
|
|
20
vl_decoder.c
Normal file
20
vl_decoder.c
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#include "vl_decoder.h"
|
||||||
|
bool
|
||||||
|
vl_profile_supported(struct pipe_screen *screen, enum pipe_video_profile profile,
|
||||||
|
enum pipe_video_entrypoint entrypoint)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
vl_level_supported(struct pipe_screen *screen, enum pipe_video_profile profile)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct pipe_video_codec *
|
||||||
|
vl_create_decoder(struct pipe_context *pipe,
|
||||||
|
const struct pipe_video_codec *templat)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
7
vl_mpeg12_decoder.c
Normal file
7
vl_mpeg12_decoder.c
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include "vl_mpeg12_decoder.h"
|
||||||
|
struct pipe_video_codec *
|
||||||
|
vl_create_mpeg12_decoder(struct pipe_context *context,
|
||||||
|
const struct pipe_video_codec *templat)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user