@gdrewb-valve: I think this is something that would better handled in the application. If the s3tc extensions are not detected, then the application could warn the user.
Doesn't the steam application sometimes install dependencies on debian based distros? Is this package not in that set?
In general applications attempt to do something and it's the graphics driver's responsibility to do it or not depending on whether it can. As only the graphics driver knows what it needs to implement particular functionality it's the component that's responsible for making sure what it needs is available. That will vary between every graphics driver.
There are many more details that may come into play and certain situations might be better handled by the application but these things usually start with the graphics driver.
Put another way, if the graphics driver needs extra support for a particular texture format, does it make more sense for the driver to manage that dependency or is it better for every single application that may run on that graphics driver to do it? To me it seems like the graphics driver is the right place.
@gdrewb-valve: What action could Mesa take to improve this? The application can probe for the extension, and notify the user if it is missing. It does seem like Valve considers this OpenGL extension a hard dependency of most Valve applications, so it does seem warranted for the Valve applications to refuse to run if the extension is not preset. (Hopefully in the future Valve will be able to move to a less problematic texture compression type.)
Anyway, we don't consider this a hard dependency of the driver. Distros can install it as a dependency of mesa. I thought debian based distros did mark it as a dependency, so I wonder why Mint would differ.
$ apt-cache showpkg libgl1-mesa-dri:i386|grep -B 1 libtxc
Dependencies:
10.2.6-1 - libc6:i386 (2 2.17) libdrm-intel1:i386 (2 2.4.48) libdrm-nouveau2:i386 (2 2.4.38) libdrm-radeon1:i386 (2 2.4.31) libdrm2:i386 (2 2.4.38) libelf1:i386 (2 0.142) libexpat1:i386 (2 2.0.1) libffi6:i386 (2 3.0.4) libgcc1:i386 (2 1:4.7) libllvm3.4:i386 (0 (null)) libstdc++6:i386 (2 4.9) libtinfo5:i386 (0 (null)) multiarch-support:i386 (0 (null)) libglide3:i386 (0 (null)) libtxc-dxtn-s2tc0:i386 (16 (null)) libtxc-dxtn0:i386 (0 (null)) xlibmesa-dri (3 1:7.0.0) xlibmesa-dri:i386 (3 1:7.0.0) libgl1-mesa-dri-experimental (3 7.11.1) libgl1-mesa-dri-experimental:i386 (3 7.11.1) libgl1-mesa-glx (3 7.10.2-4) libgl1-mesa-glx:i386 (3 7.10.2-4) libgl1-mesa-glx-no-multiarch (0 (null)) libgl1-mesa-glx-no-multiarch:i386 (0 (null)) xserver-xorg-core (3 2:1.14.3-5) xserver-xorg-core:i386 (3 2:1.14.3-5) xserver-xorg-core-no-multiarch (0 (null)) xserver-xorg-core-no-multiarch:i386 (0 (null)) libgl1-mesa-dri-experimental (3 7.11.1) libgl1-mesa-dri-experimental:i386 (3 7.11.1) xlibmesa-dri (3 1:7.0.0) xlibmesa-dri:i386 (3 1:7.0.0) libgl1-mesa-dri (3 10.2.6-1) libgl1-mesa-dri (6 10.2.6-1)
I agree with you on the extension part. If you're sure that the driver is not advertising support for s3tc then it's an app bug and the app should fail to run just as you suggest.
If the driver advertises the support then it should make sure the necessary packages are there.
The user is the one who loses, since in the case they haven't installed the s3tc support the game may not work and they don't know why. The game can't know exactly how to configure every possible graphics driver so it just has to fail saying "the driver doesn't have xxx support", which wouldn't mean much to most users.
If there are a lot of games using the support I'd say the driver should just include it. If it's something with patent coverage and the like it's not that simple and then there probably isn't a great answer.
@gdrewb-valve: Another bit of info. There are 2 S3TC extensions: GL_EXT_texture_compression_s3tc & GL_S3_s3tc.
We always advertise support for GL_S3_s3tc, regardless of the presence of the library. I believe this extension allows compressed textures to be used (decompressed).
I think the other extension is needed for compressing using S3TC, and for that we only enable it under certain conditions. (For example, if the library is installed.)
If the Valve applications aren't compressing textures at runtime, then maybe they only need to check for GL_S3_s3tc?
Then again, looking at the extension spec, GL_S3_s3tc seems to be considered deprecated:
https://www.opengl.org/registry/specs/S3/s3tc.txt
(But, if it is present, it still might be a good enough indicator that the applications can use the compressed textures.)
We'll see what the apps devs say.
I agree with you on the extension part. If you're sure that the driver is not advertising support for s3tc then it's an app bug and the app should fail to run just as you suggest.
Hmm, I think we shouldn't be advertising GL_EXT_texture_compression_s3tc if the library is not installed. Let me know if this is not the case, because that would be a driver bug. (I'll check it out too.)
A quick check seems to show this for Intel:
Hi, I have the same issue on Gentoo.
Is there something I can do about it?
@toaster On gentoo, the s3tc useflag, required by VIDEO_CARDS="intel / nouveau / radeon" useflag on games-util/steam-games-meta pulls this dependency for you. Please stop into #steamlug or #gentoo-gamerlay on freenode irc if you need additional help.
@Tele42 Thanks for the help. The s3tc useflag was not included since I did not have the steamgames_source_engine useflag set.
Now everything works.
The s3tc patent expired and this functionality is fully integrated into mesa 17.3.0 and newer.
Nothing extracted yet.
Hey,
I'm on a fresh install on linux mint 17 (Qiana) - 64Bit Cinnamon and installed all updates.
My Graphics card is an Intel HD 4000.
In Counter-Strike:Source I have graphic problems: Dialogs are missing the edges, the background image in the menu is black and maps are completely black or at least very dark.
After a lot of searching I've found the solution: install the package "libtxc-dxtn-s2tc0:i386".
Unfortunately there is no useful output in the logs which makes it easy to find this solution, so please either install it together with CS:S or at least output something in the case its missing.
Thank you, Mattis