Because we have a good group of motivated OpenGL testers here, thought I'd hijack this thread to provide an update on recent fs2open renderer refactoring that I've been looking at.
Branch for code here (no binaries as yet):
https://github.com/Echelon9/fs2open.github.com/tree/fix/SHADER_MODEL-concept-removalBackgroundOn reviewing the OpenGL GLSL setup code in fs2open, it was apparent we use the 'Use_GLSL' variable to encapsulate three different concepts. This is a mess.
At present, depending on the value, this variable is used for:
- Zero: Implies all GLSL shaders are disabled.
- One: Implies a deliberately partial GLSL shader support, as set by -disable_glsl_model command line option.
- Two+: Implies a "Shader Model" level, which is a DirectX concept and not relevant to OpenGL.
The last bullet point is important, as the code readability is improved by removing legacy references to DirectX-only concepts. A broad mapping between DirectX Shader Model versions and GLSL versions can be found here:
https://www.opengl.org/wiki/Detecting_the_Shader_Model.
Implementation: Refactoring 'Use_GLSL' variableSo, in order to do something about this, I've refactored the 'Use_GLSL' global variable to properly encapsulate only one concept. The branch does this by splitting the concept of (a) the GLSL version reported by the driver, and (b) whether a command line option has been used to disable GLSL shaders all together.
The third option, -disable_glsl_model appears less relevant today than when it was added. Today, most driver and GPU combinations will happily support > OpenGL GLSL 3.30 (cf. Steam Hardware Survey). There are a small number of users on older hardware that won't support GLSL shaders at all. There are significantly less in between, with partially working driver implementations. So I've taken this opportunity to remove a little used command line option.
The #version directive, which is required for standards conformance, is added in a
dynamic manner. Am hoping this works across implementations, but I don't have all the hardware to test.
I'd be keen to see how users with a variety of GPUs and drivers handle this branch. Please test away.
Particularly keen to see if errors along the lines of "varying no longer support", or "global variable gl_TexCoord is removed after version 140".
Mesa open source driversImportantly, this branch was developed on an Intel GPU using the Linux Mesa open source drivers. The tooling and infrastructure is frankly fantastic. I want to be clear that the support and ability to see how the driver is internally handling the shaders is very helpful, and hopefully dispel some long-held, but now unsupported negative views on recent Intel GPUs.
I'll have a follow-up post that includes performance figures benchmarking the fs2open engine shaders through various Mesa versions and their shader-db tool, to see how they have improved of late.