mesa.inc: enable texture float for gallium
v3 cover mesa.inc: enable texture float for gallium
changes for v3:
- add Upstream-Status patch header
- fix typo in commit message from v2
- add links pointing to where the patch was obtained
- change commit subject line to remove "potentially"
changes for v2:
- copy the solution from Fedora
- the original solution (to enable or disable texture float at ./configure time) was rejected in favour of Fedora's approach to always enable the feature, but then edit the code to enable or disable the feature at run time
Trevor Woerner (1):
mesa.inc: potentially enable texture float for gallium
.../mesa/files/0002-hardware-gloat.patch | 51 ++++++++++++++++++++++ meta/recipes-graphics/mesa/mesa.inc | 2 +- meta/recipes-graphics/mesa/mesa_17.1.1.bb | 1 + 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 meta/recipes-graphics/mesa/files/0002-hardware-gloat.patch
Signature · 1 line
2.13.0
PATCH v3 1/1 mesa.inc: enable texture float for gallium
Following the lead from Fedora (as suggested by Rob Clark) always enable --enable-texture-float for all gallium drivers, but then modify the code to not enable it, at runtime, where the implementation isn't backed by hardware.
The patch comes from unpacking fedora-25's mesa-17.0.5-3.fc25.src.rpm from
https://dl.fedoraproject.org/pub/fedora/linux/updates/25/SRPMS/m/
Somewhere along the path from OpenGL ES 2.0 to OpenGL ES 3.0 are some algorithms that are encumbered by patents. These algorithms are enabled with mesa's --enable-texture-float configure flag. However, if hardware acceleration is being used and the hardware supports --enable-texture-float, it means the hardware vendor has paid for the patents.
Note that with this solution, non-hardware gallium drivers (e.g. swrast) can't --enable-texture-float, which might cause issues with some piglit tests.
This solution was discussed and agreed-to on the mailing list:
http://lists.openembedded.org/pipermail/openembedded-core/2017-May/137233.html
--- .../mesa/files/0002-hardware-gloat.patch | 51 ++++++++++++++++++++++ meta/recipes-graphics/mesa/mesa.inc | 2 +- meta/recipes-graphics/mesa/mesa_17.1.1.bb | 1 + 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 meta/recipes-graphics/mesa/files/0002-hardware-gloat.patch
meta/recipes-graphics/mesa/files/0002-hardware-gloat.patch new file +51 -0
@@ -0,0 +1,51 @@ +From 00bcd599310dc7fce4fe336ffd85902429051a0c Mon Sep 17 00:00:00 2001 +From: Igor Gnatenko <[email protected]> +Date: Sun, 20 Mar 2016 13:27:04 +0100 +Subject: [PATCH 2/4] hardware gloat + +Upstream-Status: Inappropriate [not author] +Signed-off-by: Igor Gnatenko <[email protected]> +--- + 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 +
meta/recipes-graphics/mesa/mesa.inc +1 -1
@@ -64,7 +64,7 @@ GALLIUMDRIVERS_LLVM = "r300,svga,nouveau${@',${GALLIUMDRIVERS_LLVM33}' if ${GALL GALLIUMDRIVERS_append_x86 = "${@bb.utils.contains('PACKAGECONFIG', 'gallium-llvm', ',${GALLIUMDRIVERS_LLVM}', '', d)}" GALLIUMDRIVERS_append_x86-64 = "${@bb.utils.contains('PACKAGECONFIG', 'gallium-llvm', ',${GALLIUMDRIVERS_LLVM}', '', d)}" # keep --with-gallium-drivers separate, because when only one of gallium versions is enabled, other 2 were adding --without-gallium-drivers -PACKAGECONFIG[gallium] = "--with-gallium-drivers=${GALLIUMDRIVERS}, --without-gallium-drivers" +PACKAGECONFIG[gallium] = "--enable-texture-float --with-gallium-drivers=${GALLIUMDRIVERS}, --without-gallium-drivers" MESA_LLVM_RELEASE ?= "3.3" PACKAGECONFIG[gallium-llvm] = "--enable-gallium-llvm --enable-llvm-shared-libs, --disable-gallium-llvm, llvm${MESA_LLVM_RELEASE} \ ${@'elfutils' if ${GALLIUMDRIVERS_LLVM33_ENABLED} else ''}"
meta/recipes-graphics/mesa/mesa_17.1.1.bb +1 -0
@@ -5,6 +5,7 @@ SRC_URI = "ftp://ftp.freedesktop.org/pub/mesa/mesa-${PV}.tar.xz \ file://disable-asm-on-non-gcc.patch \ file://0001-Use-wayland-scanner-in-the-path.patch \ file://0001-util-rand_xor-add-missing-include-statements.patch \ + file://0002-hardware-gloat.patch \ " SRC_URI[md5sum] = "a4844bc6052578574f9629458bcbb749"
Signature · 1 line
2.13.0