[Mesa-dev] [PATCH 2/2] glsl: allow linking ES shaders with desktop shaders in desktop GL
Timothy Arceri
tarceri at itsqueeze.com
Thu May 17 03:59:09 UTC 2018
On 17/05/18 10:55, Ilia Mirkin wrote:
> ES has all kinds of additional linking rules. I suspect they'll break
> down if some of the shaders are ES and some are not-ES.
Hmm looking closer there are indeed assumptions in the linker that all
shaders are either ES or desktop. But I'm not sure that this change is
an less valid. The shaders do seem to link successfully in the case I'm
seeing at least.
>
> This all does sound very odd -- what did you see in practice?
In practice I see the app request an OpenGL 3.2 compat profile then at
least once link a GLSL ES 1.00 shader with a GLSL 1.10 shader.
Besides this issue and the issue in patch 1. There is also GLSL 1.10
shaders that do the following:
const float t1 = 0.001;
const float y1 = 0.4;
const float t2 = 0.25;
const float y2 = 0.01;
const float b = log(y1 / y2) / (t2 - t1);
const float a = y2 / exp(-b * t2);
But using builtins when initialising constants werent allowed by the
spec until 1.20. There seems to be other non shader issues with the app
too so I'm loosing confidence in this app fast :(
>
> On Wed, May 16, 2018 at 3:04 AM, Timothy Arceri <tarceri at itsqueeze.com> wrote:
>> In GLES shader versions must match but there is nothing
>> in the ARB_ES*_compatibility specs that say they must match.
>>
>> This fixes some compilation errors in Google Earth VR.
>> ---
>> src/compiler/glsl/linker.cpp | 6 ++++--
>> 1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
>> index f060c5316fa..2b7ee0ad5a6 100644
>> --- a/src/compiler/glsl/linker.cpp
>> +++ b/src/compiler/glsl/linker.cpp
>> @@ -83,6 +83,7 @@
>> #include "builtin_functions.h"
>> #include "shader_cache.h"
>>
>> +#include "main/context.h"
>> #include "main/imports.h"
>> #include "main/shaderobj.h"
>> #include "main/enums.h"
>> @@ -4799,7 +4800,8 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
>> min_version = MIN2(min_version, prog->Shaders[i]->Version);
>> max_version = MAX2(max_version, prog->Shaders[i]->Version);
>>
>> - if (prog->Shaders[i]->IsES != prog->Shaders[0]->IsES) {
>> + if (!_mesa_is_desktop_gl(ctx) &&
>> + prog->Shaders[i]->IsES != prog->Shaders[0]->IsES) {
>> linker_error(prog, "all shaders must use same shading "
>> "language version\n");
>> goto done;
>> @@ -4817,7 +4819,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
>> /* In desktop GLSL, different shader versions may be linked together. In
>> * GLSL ES, all shader versions must be the same.
>> */
>> - if (prog->Shaders[0]->IsES && min_version != max_version) {
>> + if (!_mesa_is_desktop_gl(ctx) && min_version != max_version) {
>> linker_error(prog, "all shaders must use same shading "
>> "language version\n");
>> goto done;
>> --
>> 2.17.0
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list