libglvnd: Install libGLESv1_CM.

GLES v1 support was initially disabled as it was a belief among some of
the editors and contributors that GLES v1, being an older API, was not
required by any packages or games, or if games needed it, Steam would
provide GLES v1. This commit serves as prove that the contradiction is
correct. As for packages, pretty much all GLES packages use GLES v2/v3.
Games on the other hand can use GLES v1. Steam does not supply GLES v1
and this can be confirmed via a find command in ~/.local/share/Steam.
There is the bootstrap tarball which actually does contain libGLESv1_CM
in /libglvnd-1.7.0/build/DESTDIR/usr/lib. The Steam runtimes (normal
client runtime: steamrt64; Soldier and Sniper) don't package GLES v1 in
any way besides what is provided by Wine as DLLs. So if a Linux native
game needs GLES v1, it's up to the system to provide the capabilities.

Thanks @renodr for bringing this to my attention.
This commit is contained in:
Zeckmathederg
2026-01-01 20:04:11 -07:00
parent d36aa021cf
commit ee664ee92f
9 changed files with 99 additions and 21 deletions

View File

@ -9,6 +9,7 @@ NVVM70_VERSION="4"
MANDATORY_64=1 MANDATORY_32=1
X11_64=1 X11_32=1
EGL_64=1 EGL_32=1
GLESV1_64=1 GLESV1_32=1
GLESV2_64=1 GLESV2_32=1
VULKAN=1 VULKAN_EGL=0
OPENCL_64=1 OPENCL_32=1
@ -29,6 +30,8 @@ while [ $# -gt 0 ]; do
--no-x11-lib32 ) X11_32=0 ;;
--no-egl-64bit ) EGL_64=0 ;;
--no-egl-lib32 ) EGL_32=0 ;;
--no-glesv1-64bit ) GLESV1_64=0 ;;
--no-glesv1-lib32 ) GLESV1_32=0 ;;
--no-glesv2-64bit ) GLESV2_64=0 ;;
--no-glesv2-lib32 ) GLESV2_32=0 ;;
--no-vulkan ) VULKAN=0 ;;
@ -137,7 +140,7 @@ if [ $MANIFEST_FILE_VERSION != $MANIFEST_VERSION ]; then
fi
manifest_uninstall() {
for type in {mandatory-64,mandatory-32,x11-64,x11-32,egl-64,egl-32,glesv2-64,glesv2-32,opencl-64,opencl-32,cuda-64,cuda-32,ngx,rt,settings}; do
for type in {mandatory-64,mandatory-32,x11-64,x11-32,egl-64,egl-32,glesv1-64,glesv1-32,glesv2-64,glesv2-32,opencl-64,opencl-32,cuda-64,cuda-32,ngx,rt,settings}; do
for bin in $(cat $NV_MANIFEST | grep $type | cut -d':' -f2-); do
find $LIBDIR $LIB32 $BINDIR -name "$bin.so*" -exec $RM_BIN {} \;
find $LIBDIR $LIB32 $BINDIR -name "$bin" -exec $RM_BIN {} \;
@ -253,6 +256,21 @@ if [ $EGL_32 = 1 ]; then
done
fi
if [ $GLESV1_64 = 1 ]; then
echo "Installing 64-bit GLESv1 libraries..."
mkdir -pv $LIBDIR
for lib in $(cat $NV_MANIFEST | grep glesv1-64: | cut -d':' -f2-); do
$INSTALL_LIB $NV_X_RUN_DIR/$lib.so.$NVIDIA_VERSION $LIBDIR
done
fi
if [ $GLESV1_32 = 1 ]; then
echo "Installing lib32 GLESv1 libraries..."
mkdir -pv $LIB32
for lib in $(cat $NV_MANIFEST | grep glesv1-32: | cut -d':' -f2-); do
$INSTALL_LIB $NV_X_RUN_DIR/32/$lib.so.$NVIDIA_VERSION $LIB32
done
fi
if [ $GLESV2_64 = 1 ]; then
echo "Installing 64-bit GLESv2 libraries..."
mkdir -pv $LIBDIR
@ -385,7 +403,7 @@ fi
echo "Writing to $SHAREDIR/nvidia/installed_files..."
mkdir -pv $SHAREDIR/nvidia
for type in {mandatory-64,mandatory-32,x11-64,x11-32,egl-64,egl-32,glesv2-64,glesv2-32,opencl-64,opencl-32,cuda-64,cuda-32,ngx,rt,settings}; do
for type in {mandatory-64,mandatory-32,x11-64,x11-32,egl-64,egl-32,glesv1-64,glesv1-32,glesv2-64,glesv2-32,opencl-64,opencl-32,cuda-64,cuda-32,ngx,rt,settings}; do
for bin in $(cat $NV_MANIFEST | grep $type | cut -d':' -f2-); do
find $LIBDIR $LIB32 $BINDIR -name "$bin.so*" >> $SHAREDIR/nvidia/installed_files1
find $LIBDIR $LIB32 $BINDIR -name "$bin" >> $SHAREDIR/nvidia/installed_files1

View File

@ -9,6 +9,7 @@ NVVM70_VERSION="4"
MANDATORY_64=1 MANDATORY_32=1
X11_64=1 X11_32=1
EGL_64=1 EGL_32=1
GLESV1_64=1 GLESV1_32=1
GLESV2_64=1 GLESV2_32=1
VULKAN=1 VULKAN_EGL=0
OPENCL_64=1 OPENCL_32=1
@ -29,6 +30,8 @@ while [ $# -gt 0 ]; do
--no-x11-lib32 ) X11_32=0 ;;
--no-egl-64bit ) EGL_64=0 ;;
--no-egl-lib32 ) EGL_32=0 ;;
--no-glesv1-64bit ) GLESV1_64=0 ;;
--no-glesv1-lib32 ) GLESV1_32=0 ;;
--no-glesv2-64bit ) GLESV2_64=0 ;;
--no-glesv2-lib32 ) GLESV2_32=0 ;;
--no-vulkan ) VULKAN=0 ;;
@ -137,7 +140,7 @@ if [ $MANIFEST_FILE_VERSION != $MANIFEST_VERSION ]; then
fi
manifest_uninstall() {
for type in {mandatory-64,mandatory-32,x11-64,x11-32,egl-64,egl-32,glesv2-64,glesv2-32,opencl-64,opencl-32,cuda-64,cuda-32,ngx,rt,settings}; do
for type in {mandatory-64,mandatory-32,x11-64,x11-32,egl-64,egl-32,glesv1-64,glesv1-32,glesv2-64,glesv2-32,opencl-64,opencl-32,cuda-64,cuda-32,ngx,rt,settings}; do
for bin in $(cat $NV_MANIFEST | grep $type | cut -d':' -f2-); do
find $LIBDIR $LIB32 $BINDIR -name "$bin.so*" -exec $RM_BIN {} \;
find $LIBDIR $LIB32 $BINDIR -name "$bin" -exec $RM_BIN {} \;
@ -253,6 +256,21 @@ if [ $EGL_32 = 1 ]; then
done
fi
if [ $GLESV1_64 = 1 ]; then
echo "Installing 64-bit GLESv1 libraries..."
mkdir -pv $LIBDIR
for lib in $(cat $NV_MANIFEST | grep glesv1-64: | cut -d':' -f2-); do
$INSTALL_LIB $NV_X_RUN_DIR/$lib.so.$NVIDIA_VERSION $LIBDIR
done
fi
if [ $GLESV1_32 = 1 ]; then
echo "Installing lib32 GLESv1 libraries..."
mkdir -pv $LIB32
for lib in $(cat $NV_MANIFEST | grep glesv1-32: | cut -d':' -f2-); do
$INSTALL_LIB $NV_X_RUN_DIR/32/$lib.so.$NVIDIA_VERSION $LIB32
done
fi
if [ $GLESV2_64 = 1 ]; then
echo "Installing 64-bit GLESv2 libraries..."
mkdir -pv $LIBDIR
@ -385,7 +403,7 @@ fi
echo "Writing to $SHAREDIR/nvidia/installed_files..."
mkdir -pv $SHAREDIR/nvidia
for type in {mandatory-64,mandatory-32,x11-64,x11-32,egl-64,egl-32,glesv2-64,glesv2-32,opencl-64,opencl-32,cuda-64,cuda-32,ngx,rt,settings}; do
for type in {mandatory-64,mandatory-32,x11-64,x11-32,egl-64,egl-32,glesv1-64,glesv1-32,glesv2-64,glesv2-32,opencl-64,opencl-32,cuda-64,cuda-32,ngx,rt,settings}; do
for bin in $(cat $NV_MANIFEST | grep $type | cut -d':' -f2-); do
find $LIBDIR $LIB32 $BINDIR -name "$bin.so*" >> $SHAREDIR/nvidia/installed_files1
find $LIBDIR $LIB32 $BINDIR -name "$bin" >> $SHAREDIR/nvidia/installed_files1

View File

@ -5,6 +5,8 @@ x11-64: libGLX_nvidia libnvidia-fbc
x11-32: libGLX_nvidia libnvidia-fbc
egl-64: libEGL_nvidia
egl-32: libEGL_nvidia
glesv1-64: libGLESv1_CM_nvidia
glesv1-32: libGLESv1_CM_nvidia
glesv2-64: libGLESv2_nvidia
glesv2-32: libGLESv2_nvidia
opencl-64: libOpenCL libnvidia-opencl

View File

@ -5,6 +5,8 @@ x11-64: libGLX_nvidia libnvidia-fbc
x11-32: libGLX_nvidia libnvidia-fbc
egl-64: libEGL_nvidia
egl-32: libEGL_nvidia
glesv1-64: libGLESv1_CM_nvidia
glesv1-32: libGLESv1_CM_nvidia
glesv2-64: libGLESv2_nvidia
glesv2-32: libGLESv2_nvidia
opencl-64: libOpenCL libnvidia-opencl

View File

@ -40,6 +40,15 @@
</listitem>
-->
<listitem>
<para>January 1st, 2025</para>
<itemizedlist>
<listitem>
<para>[zeckma] - libglvnd: Install libGLESv1_CM.</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>December 31st, 2025</para>
<itemizedlist>

View File

@ -29,8 +29,7 @@
<filename class="libraryfile">libEGL_mesa</filename> and <filename
class="libraryfile">libGLX_mesa</filename>. For NVIDIA,
it will provide <filename class="libraryfile">libEGL_nvidia</filename>,
<filename class="libraryfile">libGLESv2_nvidia</filename>, and
<filename class="libraryfile">libGLX_nvidia</filename>. Each
<filename class="libraryfile">libGLX_nvidia</filename>, and others. Each
implementation is specific to the driver it comes from. The benefit of
doing it this way is that a driver doesn't have to obey to the
architecture an OpenGL vendor uses, nor does it have to be absorbed by
@ -81,7 +80,6 @@ cd build &amp;&amp;
meson setup --prefix=/usr \
--buildtype=release \
-D gles1=false \
-D hgl=false \
.. &amp;&amp;
@ -108,7 +106,6 @@ PKG_CONFIG_PATH=/usr/lib32/pkgconfig \
meson setup --prefix=/usr \
--libdir=/usr/lib32 \
--buildtype=release \
-D gles1=false \
-D hgl=false \
.. &amp;&amp;
@ -133,13 +130,13 @@ ldconfig</userinput></screen>
&meson-buildtype-release;
<para>
<parameter>-D gles1=false</parameter>: This disables an obsolete version
of OpenGL ES.
<parameter>-D hgl=false</parameter>: This disables targeting Haiku by
default as this guide is for Linux, not Haiku.
</para>
<para>
<parameter>-D hgl=false</parameter>: This disables targeting Haiku by
default as this guide is for Linux, not Haiku.
<option>-D gles1=false</option>: If you don't need the older version of
OpenGL ES, use this option. Some games use GLESv1 still.
</para>
<para>
@ -162,13 +159,14 @@ ldconfig</userinput></screen>
<seg>
libEGL,
libGL,
libGLESv1_CM,
libGLESv2,
libGLX,
libGLdispatch, and
libOpenGL
</seg>
<seg>
/usr/include/{EGL,GL,GLES{2,3},glvnd,KHR}
/usr/include/{EGL,GL,GLES{,2,3},glvnd,KHR}
</seg>
</seglistitem>
</segmentedlist>
@ -204,12 +202,30 @@ ldconfig</userinput></screen>
</listitem>
</varlistentry>
<varlistentry id="glvnd-libGLESv1_CM">
<term><filename class="libraryfile">libGLESv1_CM</filename></term>
<listitem>
<para>
exposes the OpenGL ES 1.x common profile entrypoints;
wrapper library calling <filename
class="libraryfile">libGLdispatch</filename>
</para>
<indexterm zone="libglvnd glvnd-libGLESv1_CM">
<primary sortas="b-glvnd-libGLESv1_CM">libGLESv1_CM</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="glvnd-libGLESv2">
<term><filename class="libraryfile">libGLESv2</filename></term>
<listitem>
<para>
exposes OpenGL ES 2.x and 3.x entrypoints; wrapper library calling
<filename class="libraryfile">libGLdispatch</filename>
exposes OpenGL ES 2.x and 3.x entrypoints; v2 and up removed
profiles, which is why <filename
class="libraryfile">libGLESv1_CM</filename> contains
<literal>_CM</literal> but this library doesn't; wrapper library
calling <filename
class="libraryfile">libGLdispatch</filename>
</para>
<indexterm zone="libglvnd glvnd-libGLESv2">
<primary sortas="b-glvnd-libGLESv2">libGLESv2</primary>

View File

@ -174,7 +174,6 @@ meson setup --prefix=/usr \
-D platforms=x11,wayland \
-D gallium-drivers=auto \
-D vulkan-drivers=auto \
-D gles1=disabled \
-D video-codecs=all \
-D valgrind=disabled \
-D libunwind=disabled \
@ -215,7 +214,6 @@ meson setup --cross-file=lib32 \
-D platforms=x11,wayland \
-D gallium-drivers=auto \
-D vulkan-drivers=auto \
-D gles1=disabled \
-D video-codecs=all \
-D valgrind=disabled \
-D libunwind=disabled \
@ -435,9 +433,9 @@ ldconfig</userinput></screen>
</para>
<para>
<option>-D gles1=disabled</option>: This flag disables building a
deprecated spec of OpenGL ES if <parameter>-D glvnd=enabled</parameter>
was not passed.
<option>-D gles1=disabled</option>: If you didn't pass
<parameter>-D glvnd=enabled</parameter> and don't need GLESv1, use
this option. Some games still use GLESv1.
</para>
<para>

View File

@ -517,6 +517,7 @@ wget &mesa-raw-repo;/include/EGL/eglext_angle.h \
libcudadebugger,
libcuda,
libEGL_nvidia,
libGLESv1_CM_nvidia,
libGLESv2_nvidia,
libGLX_nvidia,
libglxserver_nvidia,

View File

@ -495,6 +495,7 @@ wget &mesa-raw-repo;/include/EGL/eglext_angle.h \
libcudadebugger,
libcuda,
libEGL_nvidia,
libGLESv1_CM_nvidia,
libGLESv2_nvidia,
libGLX_nvidia,
libglxserver_nvidia,
@ -662,12 +663,25 @@ wget &mesa-raw-repo;/include/EGL/eglext_angle.h \
</listitem>
</varlistentry>
<varlistentry id="libGLESv1_CM_nvidia">
<term><filename class="libraryfile">libGLESv1_CM_nvidia</filename></term>
<listitem>
<para>
provides the NVIDIA implementation
of the OpenGL ES v1 common profile
</para>
<indexterm zone="nvidia libGLESv1_CM_nvidia">
<primary sortas="c-libGLESv1_CM_nvidia">libGLESv1_CM_nvidia</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libGLESv2_nvidia">
<term><filename class="libraryfile">libGLESv2_nvidia</filename></term>
<listitem>
<para>
provides the NVIDIA implementation
of OpenGL ES v2
of OpenGL ES v2 and v3
</para>
<indexterm zone="nvidia libGLESv2_nvidia">
<primary sortas="c-libGLESv2_nvidia">libGLESv2_nvidia</primary>