Your message dated Fri, 08 Mar 2019 10:04:20 +0000
with message-id <e1h2cmw-000ckt...@fasolo.debian.org>
and subject line Bug#923226: fixed in ioquake3 1.36+u20181222.e5da13f~dfsg-2
has caused the Debian Bug report #923226,
regarding openarena: startup fails on Intel Ironlake Mobile: Couldn't compile 
shader
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
923226: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=923226
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: openarena
Version: 0.8.8+dfsg-2
Severity: grave

Hi,

openarena doesn't work anymore because it doesn't manage to compile its shaders.

jpuydt on irc.debian.org
ioq3 1.36+u20181222.e5da13f~dfsg-1/Debian linux-x86_64 Jan 14 2019
SSE instruction set enabled
----- FS_Startup -----
We are looking in the current search path:
/home/jpuydt/.openarena/baseoa
/usr/lib/openarena/baseoa
/usr/lib/openarena/baseoa/z_oacmp-volume1-v3.pk3 (370 files)
/usr/lib/openarena/baseoa/pak6-patch088.pk3 (711 files)
/usr/lib/openarena/baseoa/pak6-patch085.pk3 (559 files)
/usr/lib/openarena/baseoa/pak6-misc.pk3 (229 files)
/usr/lib/openarena/baseoa/pak5-TA.pk3 (139 files)
/usr/lib/openarena/baseoa/pak4-textures.pk3 (1753 files)
/usr/lib/openarena/baseoa/pak2-players.pk3 (669 files)
/usr/lib/openarena/baseoa/pak2-players-mature.pk3 (231 files)
/usr/lib/openarena/baseoa/pak1-maps.pk3 (100 files)
/usr/lib/openarena/baseoa/pak0.pk3 (1042 files)

----------------------
5803 files in pk3 files
execing default.cfg
couldn't exec q3config.cfg
couldn't exec autoexec.cfg
Hunk_Clear: reset the hunk ok
----- Client Initialization -----
Couldn't read q3history.
----- Initializing Renderer ----
Trying to load "renderer_opengl2_x86_64.so" from "/usr/lib/ioquake3"...
-------------------------------
QKEY found.
----- Client Initialization Complete -----
----- R_Init -----
SDL using driver "x11"
Initializing OpenGL display
Display aspect: 1.600
...setting mode 3: 640 480
Trying to get an OpenGL 3.2 core context
SDL_GL_CreateContext failed: Could not create GL context: GLXBadFBConfig
Reverting to default context
Using 24 color bits, 24 depth, 8 stencil display.
Available modes: '640x400 720x450 840x525 960x600 1280x800 800x512 700x450 
680x384 320x180 432x243 480x270 512x288 640x360 720x405 800x450 864x486 960x540 
1024x576 1280x720 360x202 684x384 320x240 400x300 512x384 576x432 640x480 
700x525 800x600 896x672 928x696 960x720 1024x768 640x512'
GL_RENDERER: Mesa DRI Intel(R) Ironlake Mobile 
Initializing OpenGL extensions
...ignoring GL_EXT_texture_compression_s3tc
...ignoring GL_S3_s3tc
...ignoring GL_EXT_texture_filter_anisotropic
...using GL_ARB_framebuffer_object
...using GL_ARB_vertex_array_object
...using GL_ARB_texture_float
...using GL_ARB_depth_clamp
...ignoring GL_ARB_seamless_cube_map
...using GLSL version 1.20
...GL_NVX_gpu_memory_info not found
...GL_ATI_meminfo not found
...ignoring GL_ARB_texture_compression_rgtc
...GL_ARB_texture_compression_bptc not found
...GL_EXT_direct_state_access not found
------- FBO_Init -------
------- GLSL_InitGPUShaders -------
Shader source:
#version 120
#define shadow2D(a,b) shadow2D(a,b).r 
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
#ifndef deformGen_t
#define deformGen_t
#define DGEN_WAVE_SIN 1
#define DGEN_WAVE_SQUARE 2
#define DGEN_WAVE_TRIANGLE 3
#define DGEN_WAVE_SAWTOOTH 4
#define DGEN_WAVE_INVERSE_SAWTOOTH 5
#define DGEN_BULGE 7
#define DGEN_MOVE 8
#endif
#ifndef tcGen_t
#define tcGen_t
#define TCGEN_LIGHTMAP 2
#define TCGEN_TEXTURE 3
#define TCGEN_ENVIRONMENT_MAPPED 4
#define TCGEN_FOG 5
#define TCGEN_VECTOR 6
#endif
#ifndef colorGen_t
#define colorGen_t
#define CGEN_LIGHTING_DIFFUSE 11
#endif
#ifndef alphaGen_t
#define alphaGen_t
#define AGEN_LIGHTING_SPECULAR 6
#define AGEN_PORTAL 8
#endif
#ifndef r_FBufScale
#define r_FBufScale vec2(0.001563, 0.002083)
#endif
#line 0
uniform sampler2D u_DiffuseMap;

#if defined(USE_LIGHTMAP)
uniform sampler2D u_LightMap;
#endif

#if defined(USE_NORMALMAP)
uniform sampler2D u_NormalMap;
#endif

#if defined(USE_DELUXEMAP)
uniform sampler2D u_DeluxeMap;
#endif

#if defined(USE_SPECULARMAP)
uniform sampler2D u_SpecularMap;
#endif

#if defined(USE_SHADOWMAP)
uniform sampler2D u_ShadowMap;
#endif

#if defined(USE_CUBEMAP)
uniform samplerCube u_CubeMap;
#endif

#if defined(USE_NORMALMAP) || defined(USE_DELUXEMAP) || 
defined(USE_SPECULARMAP) || defined(USE_CUBEMAP)
// y = deluxe, w = cube
uniform vec4      u_EnableTextures; 
#endif

#if defined(USE_PRIMARY_LIGHT) || defined(USE_SHADOWMAP)
uniform vec3  u_PrimaryLightColor;
uniform vec3  u_PrimaryLightAmbient;
#endif

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
uniform vec4      u_NormalScale;
uniform vec4      u_SpecularScale;
#endif

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
#if defined(USE_CUBEMAP)
uniform vec4      u_CubeMapInfo;
#endif
#endif

uniform int       u_AlphaTest;

varying vec4      var_TexCoords;

varying vec4      var_Color;
#if (defined(USE_LIGHT) && !defined(USE_FAST_LIGHT))
varying vec4      var_ColorAmbient;
#endif

#if (defined(USE_LIGHT) && !defined(USE_FAST_LIGHT))
varying vec4   var_Normal;
varying vec4   var_Tangent;
varying vec4   var_Bitangent;
#endif

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
varying vec4      var_LightDir;
#endif

#if defined(USE_PRIMARY_LIGHT) || defined(USE_SHADOWMAP)
varying vec4      var_PrimaryLightDir;
#endif


#define EPSILON 0.00000001

#if defined(USE_PARALLAXMAP)
float SampleDepth(sampler2D normalMap, vec2 t)
{
  #if defined(SWIZZLE_NORMALMAP)
        return 1.0 - texture2D(normalMap, t).r;
  #else
        return 1.0 - texture2D(normalMap, t).a;
  #endif
}

float RayIntersectDisplaceMap(vec2 dp, vec2 ds, sampler2D normalMap)
{
        const int linearSearchSteps = 16;
        const int binarySearchSteps = 6;

        // current size of search window
        float size = 1.0 / float(linearSearchSteps);

        // current depth position
        float depth = 0.0;

        // best match found (starts with last position 1.0)
        float bestDepth = 1.0;

        // texture depth at best depth
        float texDepth = 0.0;

        float prevT = SampleDepth(normalMap, dp);
        float prevTexDepth = prevT;

        // search front to back for first point inside object
        for(int i = 0; i < linearSearchSteps - 1; ++i)
        {
                depth += size;
                
                float t = SampleDepth(normalMap, dp + ds * depth);
                
                if(bestDepth > 0.996)           // if no depth found yet
                        if(depth >= t)
                        {
                                bestDepth = depth;      // store best depth
                                texDepth = t;
                                prevTexDepth = prevT;
                        }
                prevT = t;
        }

        depth = bestDepth;

#if !defined (USE_RELIEFMAP)
        float div = 1.0 / (1.0 + (prevTexDepth - texDepth) * 
float(linearSearchSteps));
        bestDepth -= (depth - size - prevTexDepth) * div;
#else
        // recurse around first point (depth) for closest match
        for(int i = 0; i < binarySearchSteps; ++i)
        {
                size *= 0.5;

                float t = SampleDepth(normalMap, dp + ds * depth);
                
                if(depth >= t)
                {
                        bestDepth = depth;
                        depth -= 2.0 * size;
                }

                depth += size;
        }
#endif

        return bestDepth;
}
#endif

vec3 CalcDiffuse(vec3 diffuseAlbedo, float NH, float EH, float roughness)
{
#if defined(USE_BURLEY)
        // modified from 
https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf
        float fd90 = -0.5 + EH * EH * roughness;
        float burley = 1.0 + fd90 * 0.04 / NH;
        burley *= burley;
        return diffuseAlbedo * burley;
#else
        return diffuseAlbedo;
#endif
}

vec3 EnvironmentBRDF(float roughness, float NE, vec3 specular)
{
        // from 
http://community.arm.com/servlet/JiveServlet/download/96891546-19496/siggraph2015-mmg-renaldas-slides.pdf
        float v = 1.0 - max(roughness, NE);
        v *= v * v;
        return vec3(v) + specular;
}

vec3 CalcSpecular(vec3 specular, float NH, float EH, float roughness)
{
        // from 
http://community.arm.com/servlet/JiveServlet/download/96891546-19496/siggraph2015-mmg-renaldas-slides.pdf
        float rr = roughness*roughness;
        float rrrr = rr*rr;
        float d = (NH * NH) * (rrrr - 1.0) + 1.0;
        float v = (EH * EH) * (roughness + 0.5);
        return specular * (rrrr / (4.0 * d * d * v));
}


float CalcLightAttenuation(float point, float normDist)
{
        // zero light at 1.0, approximating q3 style
        // also don't attenuate directional light
        float attenuation = (0.5 * normDist - 1.5) * point + 1.0;

        // clamp attenuation
        #if defined(NO_LIGHT_CLAMP)
        attenuation = max(attenuation, 0.0);
        #else
        attenuation = clamp(attenuation, 0.0, 1.0);
        #endif

        return attenuation;
}


vec4 hitCube(vec3 ray, vec3 pos, vec3 invSize, float lod, samplerCube tex)
{
        // find any hits on cubemap faces facing the camera
        vec3 scale = (sign(ray) - pos) / ray;

        // find the nearest hit
        float minScale = min(min(scale.x, scale.y), scale.z);

        // if the nearest hit is behind the camera, ignore
        // should not be necessary as long as pos is inside the cube
        //if (minScale < 0.0)
                //return vec4(0.0);

        // calculate the hit position, that's our texture coordinates
        vec3 tc = pos + ray * minScale;

        // if the texture coordinates are outside the cube, ignore
        // necessary since we're not fading out outside the cube
        if (any(greaterThan(abs(tc), vec3(1.00001))))
                return vec4(0.0);

        // fade out when approaching the cubemap edges
        //vec3 fade3 = abs(pos);
        //float fade = max(max(fade3.x, fade3.y), fade3.z);
        //fade = clamp(1.0 - fade, 0.0, 1.0);
                        
        //return vec4(textureCubeLod(tex, tc, lod).rgb * fade, fade);
        return vec4(textureCubeLod(tex, tc, lod).rgb, 1.0);
}

void main()
{
        vec3 viewDir, lightColor, ambientColor, reflectance;
        vec3 L, N, E, H;
        float NL, NH, NE, EH, attenuation;

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
        mat3 tangentToWorld = mat3(var_Tangent.xyz, var_Bitangent.xyz, 
var_Normal.xyz);
        viewDir = vec3(var_Normal.w, var_Tangent.w, var_Bitangent.w);
        E = normalize(viewDir);
#endif

        lightColor = var_Color.rgb;

#if defined(USE_LIGHTMAP)
        vec4 lightmapColor = texture2D(u_LightMap, var_TexCoords.zw);
  #if defined(RGBM_LIGHTMAP)
        lightmapColor.rgb *= lightmapColor.a;
  #endif
  #if defined(USE_PBR) && !defined(USE_FAST_LIGHT)
        lightmapColor.rgb *= lightmapColor.rgb;
  #endif
        lightColor *= lightmapColor.rgb;
#endif

        vec2 texCoords = var_TexCoords.xy;

#if defined(USE_PARALLAXMAP)
        vec3 offsetDir = viewDir * tangentToWorld;

        offsetDir.xy *= -u_NormalScale.a / offsetDir.z;

        texCoords += offsetDir.xy * RayIntersectDisplaceMap(texCoords, 
offsetDir.xy, u_NormalMap);
#endif

        vec4 diffuse = texture2D(u_DiffuseMap, texCoords);
        
        float alpha = diffuse.a * var_Color.a;
        if (u_AlphaTest == 1)
        {
                if (alpha == 0.0)
                        discard;
        }
        else if (u_AlphaTest == 2)
        {
                if (alpha >= 0.5)
                        discard;
        }
        else if (u_AlphaTest == 3)
        {
                if (alpha < 0.5)
                        discard;
        }

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
        L = var_LightDir.xyz;
  #if defined(USE_DELUXEMAP)
        L += (texture2D(u_DeluxeMap, var_TexCoords.zw).xyz - vec3(0.5)) * 
u_EnableTextures.y;
  #endif
        float sqrLightDist = dot(L, L);
        L /= sqrt(sqrLightDist);

  #if defined(USE_LIGHT_VECTOR)
        attenuation  = CalcLightAttenuation(float(var_LightDir.w > 0.0), 
var_LightDir.w / sqrLightDist);
  #else
        attenuation  = 1.0;
  #endif

  #if defined(USE_NORMALMAP)
    #if defined(SWIZZLE_NORMALMAP)
        N.xy = texture2D(u_NormalMap, texCoords).ag - vec2(0.5);
    #else
        N.xy = texture2D(u_NormalMap, texCoords).rg - vec2(0.5);
    #endif
        N.xy *= u_NormalScale.xy;
        N.z = sqrt(clamp((0.25 - N.x * N.x) - N.y * N.y, 0.0, 1.0));
        N = tangentToWorld * N;
  #else
        N = var_Normal.xyz;
  #endif

        N = normalize(N);

  #if defined(USE_SHADOWMAP) 
        vec2 shadowTex = gl_FragCoord.xy * r_FBufScale;
        float shadowValue = texture2D(u_ShadowMap, shadowTex).r;

        // surfaces not facing the light are always shadowed
        shadowValue *= clamp(dot(N, var_PrimaryLightDir.xyz), 0.0, 1.0);

    #if defined(SHADOWMAP_MODULATE)
        lightColor *= shadowValue * (1.0 - u_PrimaryLightAmbient.r) + 
u_PrimaryLightAmbient.r;
    #endif
  #endif

  #if !defined(USE_LIGHT_VECTOR)
        ambientColor = lightColor;
        float surfNL = clamp(dot(var_Normal.xyz, L), 0.0, 1.0);

        // reserve 25% ambient to avoid black areas on normalmaps
        lightColor *= 0.75;

        // Scale the incoming light to compensate for the baked-in light angle
        // attenuation.
        lightColor /= max(surfNL, 0.25);

        // Recover any unused light as ambient, in case attenuation is over 4x 
or
        // light is below the surface
        ambientColor = max(ambientColor - lightColor * surfNL, vec3(0.0));
  #else
        ambientColor = var_ColorAmbient.rgb;
  #endif

        NL = clamp(dot(N, L), 0.0, 1.0);
        NE = clamp(dot(N, E), 0.0, 1.0);
        H = normalize(L + E);
        EH = clamp(dot(E, H), 0.0, 1.0);
        NH = clamp(dot(N, H), 0.0, 1.0);

  #if defined(USE_SPECULARMAP)
        vec4 specular = texture2D(u_SpecularMap, texCoords);
  #else
        vec4 specular = vec4(1.0);
  #endif
        specular *= u_SpecularScale;

  #if defined(USE_PBR)
        diffuse.rgb *= diffuse.rgb;
  #endif

  #if defined(USE_PBR)
        // diffuse rgb is base color
        // specular red is gloss
        // specular green is metallicness
        float gloss = specular.r;
        float metal = specular.g;
        specular.rgb = metal * diffuse.rgb + vec3(0.04 - 0.04 * metal);
        diffuse.rgb *= 1.0 - metal;
  #else
        // diffuse rgb is diffuse
        // specular rgb is specular reflectance at normal incidence
        // specular alpha is gloss
        float gloss = specular.a;

        // adjust diffuse by specular reflectance, to maintain energy 
conservation
        diffuse.rgb *= vec3(1.0) - specular.rgb;
  #endif

  #if defined(GLOSS_IS_GLOSS)
        float roughness = exp2(-3.0 * gloss);
  #elif defined(GLOSS_IS_SMOOTHNESS)
        float roughness = 1.0 - gloss;
  #elif defined(GLOSS_IS_ROUGHNESS)
        float roughness = gloss;
  #elif defined(GLOSS_IS_SHININESS)
        float roughness = pow(2.0 / (8190.0 * gloss + 2.0), 0.25);
  #endif

        reflectance  = CalcDiffuse(diffuse.rgb, NH, EH, roughness);

  #if defined(r_deluxeSpecular)
    #if defined(USE_LIGHT_VECTOR)
        reflectance += CalcSpecular(specular.rgb, NH, EH, roughness) * 
r_deluxeSpecular;
    #else
        reflectance += CalcSpecular(specular.rgb, NH, EH, pow(roughness, 
r_deluxeSpecular));
    #endif
  #endif

        gl_FragColor.rgb  = lightColor   * reflectance * (attenuation * NL);
        gl_FragColor.rgb += ambientColor * diffuse.rgb;

  #if defined(USE_CUBEMAP)
        reflectance = EnvironmentBRDF(roughness, NE, specular.rgb);

        vec3 R = reflect(E, N);

        // parallax corrected cubemap (cheaper trick)
        // from 
http://seblagarde.wordpress.com/2012/09/29/image-based-lighting-approaches-and-parallax-corrected-cubemap/
        vec3 parallax = u_CubeMapInfo.xyz + u_CubeMapInfo.w * viewDir;

  #if defined(USE_BOX_CUBEMAP_PARALLAX)
        vec3 cubeLightColor = hitCube(R * u_CubeMapInfo.w, parallax, 
u_CubeMapInfo.www, ROUGHNESS_MIPS * roughness, u_CubeMap).rgb * 
u_EnableTextures.w;
  #else
        vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 
ROUGHNESS_MIPS * roughness).rgb * u_EnableTextures.w;
  #endif

        // normalize cubemap based on last roughness mip (~diffuse)
        // multiplying cubemap values by lighting below depends on either this 
or the cubemap being normalized at generation
        //vec3 cubeLightDiffuse = max(textureCubeLod(u_CubeMap, N, 
ROUGHNESS_MIPS).rgb, 0.5 / 255.0);
        //cubeLightColor /= dot(cubeLightDiffuse, vec3(0.2125, 0.7154, 0.0721));

    #if defined(USE_PBR)
        cubeLightColor *= cubeLightColor;
    #endif

        // multiply cubemap values by lighting
        // not technically correct, but helps make reflections look less 
unnatural
        //cubeLightColor *= lightColor * (attenuation * NL) + ambientColor;

        gl_FragColor.rgb += cubeLightColor * reflectance;
  #endif

  #if defined(USE_PRIMARY_LIGHT) || defined(SHADOWMAP_MODULATE)
        vec3 L2, H2;
        float NL2, EH2, NH2;

        L2 = var_PrimaryLightDir.xyz;

        // enable when point lights are supported as primary lights
        //sqrLightDist = dot(L2, L2);
        //L2 /= sqrt(sqrLightDist);

        NL2 = clamp(dot(N, L2), 0.0, 1.0);
        H2 = normalize(L2 + E);
        EH2 = clamp(dot(E, H2), 0.0, 1.0);
        NH2 = clamp(dot(N, H2), 0.0, 1.0);

        reflectance  = CalcSpecular(specular.rgb, NH2, EH2, roughness);

        // bit of a hack, with modulated shadowmaps, ignore diffuse
    #if !defined(SHADOWMAP_MODULATE)
        reflectance += CalcDiffuse(diffuse.rgb, NH2, EH2, roughness);
    #endif

        lightColor = u_PrimaryLightColor;

    #if defined(USE_SHADOWMAP)
        lightColor *= shadowValue;
    #endif

        // enable when point lights are supported as primary lights
        //lightColor *= CalcLightAttenuation(float(u_PrimaryLightDir.w > 0.0), 
u_PrimaryLightDir.w / sqrLightDist);

        gl_FragColor.rgb += lightColor * reflectance * NL2;
  #endif

  #if defined(USE_PBR)
        gl_FragColor.rgb = sqrt(gl_FragColor.rgb);
  #endif

#else

        gl_FragColor.rgb = diffuse.rgb * lightColor;

#endif

        gl_FragColor.a = alpha;
}

Shader info log:
0:224(14): error: no matching function for call to `textureCubeLod(samplerCube, 
vec3, float)'; candidates are:
0:224(14): error: type mismatch
0:224(9): error: cannot construct `vec4' from a non-numeric data type
0:224(2): error: `return' with wrong type error, in function `hitCube' 
returning vec4

********************
ERROR: Couldn't compile shader
********************
RE_Shutdown( 0 )
Hunk_Clear: reset the hunk ok
----- R_Init -----
------- FBO_Init -------
------- GLSL_InitGPUShaders -------
Shader source:
#version 120
#define shadow2D(a,b) shadow2D(a,b).r 
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
#ifndef deformGen_t
#define deformGen_t
#define DGEN_WAVE_SIN 1
#define DGEN_WAVE_SQUARE 2
#define DGEN_WAVE_TRIANGLE 3
#define DGEN_WAVE_SAWTOOTH 4
#define DGEN_WAVE_INVERSE_SAWTOOTH 5
#define DGEN_BULGE 7
#define DGEN_MOVE 8
#endif
#ifndef tcGen_t
#define tcGen_t
#define TCGEN_LIGHTMAP 2
#define TCGEN_TEXTURE 3
#define TCGEN_ENVIRONMENT_MAPPED 4
#define TCGEN_FOG 5
#define TCGEN_VECTOR 6
#endif
#ifndef colorGen_t
#define colorGen_t
#define CGEN_LIGHTING_DIFFUSE 11
#endif
#ifndef alphaGen_t
#define alphaGen_t
#define AGEN_LIGHTING_SPECULAR 6
#define AGEN_PORTAL 8
#endif
#ifndef r_FBufScale
#define r_FBufScale vec2(0.001563, 0.002083)
#endif
#line 0
uniform sampler2D u_DiffuseMap;

#if defined(USE_LIGHTMAP)
uniform sampler2D u_LightMap;
#endif

#if defined(USE_NORMALMAP)
uniform sampler2D u_NormalMap;
#endif

#if defined(USE_DELUXEMAP)
uniform sampler2D u_DeluxeMap;
#endif

#if defined(USE_SPECULARMAP)
uniform sampler2D u_SpecularMap;
#endif

#if defined(USE_SHADOWMAP)
uniform sampler2D u_ShadowMap;
#endif

#if defined(USE_CUBEMAP)
uniform samplerCube u_CubeMap;
#endif

#if defined(USE_NORMALMAP) || defined(USE_DELUXEMAP) || 
defined(USE_SPECULARMAP) || defined(USE_CUBEMAP)
// y = deluxe, w = cube
uniform vec4      u_EnableTextures; 
#endif

#if defined(USE_PRIMARY_LIGHT) || defined(USE_SHADOWMAP)
uniform vec3  u_PrimaryLightColor;
uniform vec3  u_PrimaryLightAmbient;
#endif

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
uniform vec4      u_NormalScale;
uniform vec4      u_SpecularScale;
#endif

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
#if defined(USE_CUBEMAP)
uniform vec4      u_CubeMapInfo;
#endif
#endif

uniform int       u_AlphaTest;

varying vec4      var_TexCoords;

varying vec4      var_Color;
#if (defined(USE_LIGHT) && !defined(USE_FAST_LIGHT))
varying vec4      var_ColorAmbient;
#endif

#if (defined(USE_LIGHT) && !defined(USE_FAST_LIGHT))
varying vec4   var_Normal;
varying vec4   var_Tangent;
varying vec4   var_Bitangent;
#endif

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
varying vec4      var_LightDir;
#endif

#if defined(USE_PRIMARY_LIGHT) || defined(USE_SHADOWMAP)
varying vec4      var_PrimaryLightDir;
#endif


#define EPSILON 0.00000001

#if defined(USE_PARALLAXMAP)
float SampleDepth(sampler2D normalMap, vec2 t)
{
  #if defined(SWIZZLE_NORMALMAP)
        return 1.0 - texture2D(normalMap, t).r;
  #else
        return 1.0 - texture2D(normalMap, t).a;
  #endif
}

float RayIntersectDisplaceMap(vec2 dp, vec2 ds, sampler2D normalMap)
{
        const int linearSearchSteps = 16;
        const int binarySearchSteps = 6;

        // current size of search window
        float size = 1.0 / float(linearSearchSteps);

        // current depth position
        float depth = 0.0;

        // best match found (starts with last position 1.0)
        float bestDepth = 1.0;

        // texture depth at best depth
        float texDepth = 0.0;

        float prevT = SampleDepth(normalMap, dp);
        float prevTexDepth = prevT;

        // search front to back for first point inside object
        for(int i = 0; i < linearSearchSteps - 1; ++i)
        {
                depth += size;
                
                float t = SampleDepth(normalMap, dp + ds * depth);
                
                if(bestDepth > 0.996)           // if no depth found yet
                        if(depth >= t)
                        {
                                bestDepth = depth;      // store best depth
                                texDepth = t;
                                prevTexDepth = prevT;
                        }
                prevT = t;
        }

        depth = bestDepth;

#if !defined (USE_RELIEFMAP)
        float div = 1.0 / (1.0 + (prevTexDepth - texDepth) * 
float(linearSearchSteps));
        bestDepth -= (depth - size - prevTexDepth) * div;
#else
        // recurse around first point (depth) for closest match
        for(int i = 0; i < binarySearchSteps; ++i)
        {
                size *= 0.5;

                float t = SampleDepth(normalMap, dp + ds * depth);
                
                if(depth >= t)
                {
                        bestDepth = depth;
                        depth -= 2.0 * size;
                }

                depth += size;
        }
#endif

        return bestDepth;
}
#endif

vec3 CalcDiffuse(vec3 diffuseAlbedo, float NH, float EH, float roughness)
{
#if defined(USE_BURLEY)
        // modified from 
https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf
        float fd90 = -0.5 + EH * EH * roughness;
        float burley = 1.0 + fd90 * 0.04 / NH;
        burley *= burley;
        return diffuseAlbedo * burley;
#else
        return diffuseAlbedo;
#endif
}

vec3 EnvironmentBRDF(float roughness, float NE, vec3 specular)
{
        // from 
http://community.arm.com/servlet/JiveServlet/download/96891546-19496/siggraph2015-mmg-renaldas-slides.pdf
        float v = 1.0 - max(roughness, NE);
        v *= v * v;
        return vec3(v) + specular;
}

vec3 CalcSpecular(vec3 specular, float NH, float EH, float roughness)
{
        // from 
http://community.arm.com/servlet/JiveServlet/download/96891546-19496/siggraph2015-mmg-renaldas-slides.pdf
        float rr = roughness*roughness;
        float rrrr = rr*rr;
        float d = (NH * NH) * (rrrr - 1.0) + 1.0;
        float v = (EH * EH) * (roughness + 0.5);
        return specular * (rrrr / (4.0 * d * d * v));
}


float CalcLightAttenuation(float point, float normDist)
{
        // zero light at 1.0, approximating q3 style
        // also don't attenuate directional light
        float attenuation = (0.5 * normDist - 1.5) * point + 1.0;

        // clamp attenuation
        #if defined(NO_LIGHT_CLAMP)
        attenuation = max(attenuation, 0.0);
        #else
        attenuation = clamp(attenuation, 0.0, 1.0);
        #endif

        return attenuation;
}


vec4 hitCube(vec3 ray, vec3 pos, vec3 invSize, float lod, samplerCube tex)
{
        // find any hits on cubemap faces facing the camera
        vec3 scale = (sign(ray) - pos) / ray;

        // find the nearest hit
        float minScale = min(min(scale.x, scale.y), scale.z);

        // if the nearest hit is behind the camera, ignore
        // should not be necessary as long as pos is inside the cube
        //if (minScale < 0.0)
                //return vec4(0.0);

        // calculate the hit position, that's our texture coordinates
        vec3 tc = pos + ray * minScale;

        // if the texture coordinates are outside the cube, ignore
        // necessary since we're not fading out outside the cube
        if (any(greaterThan(abs(tc), vec3(1.00001))))
                return vec4(0.0);

        // fade out when approaching the cubemap edges
        //vec3 fade3 = abs(pos);
        //float fade = max(max(fade3.x, fade3.y), fade3.z);
        //fade = clamp(1.0 - fade, 0.0, 1.0);
                        
        //return vec4(textureCubeLod(tex, tc, lod).rgb * fade, fade);
        return vec4(textureCubeLod(tex, tc, lod).rgb, 1.0);
}

void main()
{
        vec3 viewDir, lightColor, ambientColor, reflectance;
        vec3 L, N, E, H;
        float NL, NH, NE, EH, attenuation;

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
        mat3 tangentToWorld = mat3(var_Tangent.xyz, var_Bitangent.xyz, 
var_Normal.xyz);
        viewDir = vec3(var_Normal.w, var_Tangent.w, var_Bitangent.w);
        E = normalize(viewDir);
#endif

        lightColor = var_Color.rgb;

#if defined(USE_LIGHTMAP)
        vec4 lightmapColor = texture2D(u_LightMap, var_TexCoords.zw);
  #if defined(RGBM_LIGHTMAP)
        lightmapColor.rgb *= lightmapColor.a;
  #endif
  #if defined(USE_PBR) && !defined(USE_FAST_LIGHT)
        lightmapColor.rgb *= lightmapColor.rgb;
  #endif
        lightColor *= lightmapColor.rgb;
#endif

        vec2 texCoords = var_TexCoords.xy;

#if defined(USE_PARALLAXMAP)
        vec3 offsetDir = viewDir * tangentToWorld;

        offsetDir.xy *= -u_NormalScale.a / offsetDir.z;

        texCoords += offsetDir.xy * RayIntersectDisplaceMap(texCoords, 
offsetDir.xy, u_NormalMap);
#endif

        vec4 diffuse = texture2D(u_DiffuseMap, texCoords);
        
        float alpha = diffuse.a * var_Color.a;
        if (u_AlphaTest == 1)
        {
                if (alpha == 0.0)
                        discard;
        }
        else if (u_AlphaTest == 2)
        {
                if (alpha >= 0.5)
                        discard;
        }
        else if (u_AlphaTest == 3)
        {
                if (alpha < 0.5)
                        discard;
        }

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
        L = var_LightDir.xyz;
  #if defined(USE_DELUXEMAP)
        L += (texture2D(u_DeluxeMap, var_TexCoords.zw).xyz - vec3(0.5)) * 
u_EnableTextures.y;
  #endif
        float sqrLightDist = dot(L, L);
        L /= sqrt(sqrLightDist);

  #if defined(USE_LIGHT_VECTOR)
        attenuation  = CalcLightAttenuation(float(var_LightDir.w > 0.0), 
var_LightDir.w / sqrLightDist);
  #else
        attenuation  = 1.0;
  #endif

  #if defined(USE_NORMALMAP)
    #if defined(SWIZZLE_NORMALMAP)
        N.xy = texture2D(u_NormalMap, texCoords).ag - vec2(0.5);
    #else
        N.xy = texture2D(u_NormalMap, texCoords).rg - vec2(0.5);
    #endif
        N.xy *= u_NormalScale.xy;
        N.z = sqrt(clamp((0.25 - N.x * N.x) - N.y * N.y, 0.0, 1.0));
        N = tangentToWorld * N;
  #else
        N = var_Normal.xyz;
  #endif

        N = normalize(N);

  #if defined(USE_SHADOWMAP) 
        vec2 shadowTex = gl_FragCoord.xy * r_FBufScale;
        float shadowValue = texture2D(u_ShadowMap, shadowTex).r;

        // surfaces not facing the light are always shadowed
        shadowValue *= clamp(dot(N, var_PrimaryLightDir.xyz), 0.0, 1.0);

    #if defined(SHADOWMAP_MODULATE)
        lightColor *= shadowValue * (1.0 - u_PrimaryLightAmbient.r) + 
u_PrimaryLightAmbient.r;
    #endif
  #endif

  #if !defined(USE_LIGHT_VECTOR)
        ambientColor = lightColor;
        float surfNL = clamp(dot(var_Normal.xyz, L), 0.0, 1.0);

        // reserve 25% ambient to avoid black areas on normalmaps
        lightColor *= 0.75;

        // Scale the incoming light to compensate for the baked-in light angle
        // attenuation.
        lightColor /= max(surfNL, 0.25);

        // Recover any unused light as ambient, in case attenuation is over 4x 
or
        // light is below the surface
        ambientColor = max(ambientColor - lightColor * surfNL, vec3(0.0));
  #else
        ambientColor = var_ColorAmbient.rgb;
  #endif

        NL = clamp(dot(N, L), 0.0, 1.0);
        NE = clamp(dot(N, E), 0.0, 1.0);
        H = normalize(L + E);
        EH = clamp(dot(E, H), 0.0, 1.0);
        NH = clamp(dot(N, H), 0.0, 1.0);

  #if defined(USE_SPECULARMAP)
        vec4 specular = texture2D(u_SpecularMap, texCoords);
  #else
        vec4 specular = vec4(1.0);
  #endif
        specular *= u_SpecularScale;

  #if defined(USE_PBR)
        diffuse.rgb *= diffuse.rgb;
  #endif

  #if defined(USE_PBR)
        // diffuse rgb is base color
        // specular red is gloss
        // specular green is metallicness
        float gloss = specular.r;
        float metal = specular.g;
        specular.rgb = metal * diffuse.rgb + vec3(0.04 - 0.04 * metal);
        diffuse.rgb *= 1.0 - metal;
  #else
        // diffuse rgb is diffuse
        // specular rgb is specular reflectance at normal incidence
        // specular alpha is gloss
        float gloss = specular.a;

        // adjust diffuse by specular reflectance, to maintain energy 
conservation
        diffuse.rgb *= vec3(1.0) - specular.rgb;
  #endif

  #if defined(GLOSS_IS_GLOSS)
        float roughness = exp2(-3.0 * gloss);
  #elif defined(GLOSS_IS_SMOOTHNESS)
        float roughness = 1.0 - gloss;
  #elif defined(GLOSS_IS_ROUGHNESS)
        float roughness = gloss;
  #elif defined(GLOSS_IS_SHININESS)
        float roughness = pow(2.0 / (8190.0 * gloss + 2.0), 0.25);
  #endif

        reflectance  = CalcDiffuse(diffuse.rgb, NH, EH, roughness);

  #if defined(r_deluxeSpecular)
    #if defined(USE_LIGHT_VECTOR)
        reflectance += CalcSpecular(specular.rgb, NH, EH, roughness) * 
r_deluxeSpecular;
    #else
        reflectance += CalcSpecular(specular.rgb, NH, EH, pow(roughness, 
r_deluxeSpecular));
    #endif
  #endif

        gl_FragColor.rgb  = lightColor   * reflectance * (attenuation * NL);
        gl_FragColor.rgb += ambientColor * diffuse.rgb;

  #if defined(USE_CUBEMAP)
        reflectance = EnvironmentBRDF(roughness, NE, specular.rgb);

        vec3 R = reflect(E, N);

        // parallax corrected cubemap (cheaper trick)
        // from 
http://seblagarde.wordpress.com/2012/09/29/image-based-lighting-approaches-and-parallax-corrected-cubemap/
        vec3 parallax = u_CubeMapInfo.xyz + u_CubeMapInfo.w * viewDir;

  #if defined(USE_BOX_CUBEMAP_PARALLAX)
        vec3 cubeLightColor = hitCube(R * u_CubeMapInfo.w, parallax, 
u_CubeMapInfo.www, ROUGHNESS_MIPS * roughness, u_CubeMap).rgb * 
u_EnableTextures.w;
  #else
        vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 
ROUGHNESS_MIPS * roughness).rgb * u_EnableTextures.w;
  #endif

        // normalize cubemap based on last roughness mip (~diffuse)
        // multiplying cubemap values by lighting below depends on either this 
or the cubemap being normalized at generation
        //vec3 cubeLightDiffuse = max(textureCubeLod(u_CubeMap, N, 
ROUGHNESS_MIPS).rgb, 0.5 / 255.0);
        //cubeLightColor /= dot(cubeLightDiffuse, vec3(0.2125, 0.7154, 0.0721));

    #if defined(USE_PBR)
        cubeLightColor *= cubeLightColor;
    #endif

        // multiply cubemap values by lighting
        // not technically correct, but helps make reflections look less 
unnatural
        //cubeLightColor *= lightColor * (attenuation * NL) + ambientColor;

        gl_FragColor.rgb += cubeLightColor * reflectance;
  #endif

  #if defined(USE_PRIMARY_LIGHT) || defined(SHADOWMAP_MODULATE)
        vec3 L2, H2;
        float NL2, EH2, NH2;

        L2 = var_PrimaryLightDir.xyz;

        // enable when point lights are supported as primary lights
        //sqrLightDist = dot(L2, L2);
        //L2 /= sqrt(sqrLightDist);

        NL2 = clamp(dot(N, L2), 0.0, 1.0);
        H2 = normalize(L2 + E);
        EH2 = clamp(dot(E, H2), 0.0, 1.0);
        NH2 = clamp(dot(N, H2), 0.0, 1.0);

        reflectance  = CalcSpecular(specular.rgb, NH2, EH2, roughness);

        // bit of a hack, with modulated shadowmaps, ignore diffuse
    #if !defined(SHADOWMAP_MODULATE)
        reflectance += CalcDiffuse(diffuse.rgb, NH2, EH2, roughness);
    #endif

        lightColor = u_PrimaryLightColor;

    #if defined(USE_SHADOWMAP)
        lightColor *= shadowValue;
    #endif

        // enable when point lights are supported as primary lights
        //lightColor *= CalcLightAttenuation(float(u_PrimaryLightDir.w > 0.0), 
u_PrimaryLightDir.w / sqrLightDist);

        gl_FragColor.rgb += lightColor * reflectance * NL2;
  #endif

  #if defined(USE_PBR)
        gl_FragColor.rgb = sqrt(gl_FragColor.rgb);
  #endif

#else

        gl_FragColor.rgb = diffuse.rgb * lightColor;

#endif

        gl_FragColor.a = alpha;
}

Shader info log:
0:224(14): error: no matching function for call to `textureCubeLod(samplerCube, 
vec3, float)'; candidates are:
0:224(14): error: type mismatch
0:224(9): error: cannot construct `vec4' from a non-numeric data type
0:224(2): error: `return' with wrong type error, in function `hitCube' 
returning vec4

recursive error after: Couldn't compile shader

--- End Message ---
--- Begin Message ---
Source: ioquake3
Source-Version: 1.36+u20181222.e5da13f~dfsg-2

We believe that the bug you reported is fixed in the latest version of
ioquake3, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 923...@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Simon McVittie <s...@debian.org> (supplier of updated ioquake3 package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmas...@ftp-master.debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Format: 1.8
Date: Fri, 08 Mar 2019 09:09:43 +0000
Source: ioquake3
Architecture: source
Version: 1.36+u20181222.e5da13f~dfsg-2
Distribution: unstable
Urgency: medium
Maintainer: Debian Games Team <pkg-games-de...@lists.alioth.debian.org>
Changed-By: Simon McVittie <s...@debian.org>
Closes: 923226
Changes:
 ioquake3 (1.36+u20181222.e5da13f~dfsg-2) unstable; urgency=medium
 .
   * d/p/lightall_fp.glsl-Stub-out-USE_BOX_CUBEMAP_PARALLAX-on-GLS.patch:
     Fix shader compilation on hardware that doesn't support GLSL 1.30,
     and in particular pre-2011 Intel GPUs (5th generation, "Ironlake",
     or older). (Closes: #923226)
Checksums-Sha1:
 fefd2f3824aab66eaba1cf5564ecb39eed8d5767 2332 
ioquake3_1.36+u20181222.e5da13f~dfsg-2.dsc
 f52580ae8b122ec25ccbbd14be4fc9d413920ff1 24352 
ioquake3_1.36+u20181222.e5da13f~dfsg-2.debian.tar.xz
 eb223c06eeeaeb3348e152f9228a1be50566c638 11180 
ioquake3_1.36+u20181222.e5da13f~dfsg-2_source.buildinfo
Checksums-Sha256:
 84449076c773b6242fd38cb511d12e3b5c1e6c3374e7cf3dedee9ab30a74affb 2332 
ioquake3_1.36+u20181222.e5da13f~dfsg-2.dsc
 d66e99eb8863028e49c8621a9c014867f74b7e0e49482792538f537025fa91dd 24352 
ioquake3_1.36+u20181222.e5da13f~dfsg-2.debian.tar.xz
 600407ece89afb17a645a04283f6929d87cb235756b7ca19e1fa728ad377e2a7 11180 
ioquake3_1.36+u20181222.e5da13f~dfsg-2_source.buildinfo
Files:
 ad15e6ec28a22d5ebcae1c0823cc6f44 2332 games optional 
ioquake3_1.36+u20181222.e5da13f~dfsg-2.dsc
 11b0c578466a8a62e5ee099a851cb439 24352 games optional 
ioquake3_1.36+u20181222.e5da13f~dfsg-2.debian.tar.xz
 5c976090b16af34e6748bbd087acfb3a 11180 games optional 
ioquake3_1.36+u20181222.e5da13f~dfsg-2_source.buildinfo

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEENuxaZEik9e95vv6Y4FrhR4+BTE8FAlyCOuEACgkQ4FrhR4+B
TE++3xAAhcsHj/9N0tMZZbmgLp8P7gIaQ5i7PCasAcL98qbYOoNrP/SrC4eHXBm7
iUPtiskayODpp2YY0ZX9vwHc5cKdLq/UienPPeflBGzTTgTHkBjeBvEt2dN5XWNa
d4XulbmAtFy2eQA2fQxQhdqW4rWghNfiZaG/WQeVSwRKgVrWRo+jTyEpqxQYaiLG
F3/s33ct255omGuIfRUKsHyub6xlNRD/BGfNcoG0+Z8v9hYjHWLaEREXoj8PXVx6
01nykg9tWiDyHE+Yfjgu5DKRKwiuNeQQAVneSku9bhtzngPh9C+wMP7hnz0Sdt8c
df8PVWCu7/JESR/6Saw0YUHDIDGuQR0Uwc5Gtoj5jXPy+QTvxNxGFnlKnIUhdK13
Yiz0cR0k0M5v9OEofVCue2pDPxSZscoXF0DJ5ADr09auqXaIV2F9anbtWddu7gCF
ePAJSvsllKwib0PMWvGcsSSWRzC05bZ1MsJ6buvnqU0QWErn1RIJLXc6ro41XWPq
pkGpRy1rpiuzVwTgp2/i5iEMlLDMWykUfCTIXUQmZNt/I6GHXWP0TcCqW7/zXMGE
RMbTr7X61FdSZiUYV3fyFptT7/MZ9ond6vTDor3pRcG1A9w5EtSHY9lc5LQNhiCM
M1LNVTZzlJiIGSf66zcBHvptJx3n/JmPstPWdTGLRHl1GAsFFmo=
=aIOB
-----END PGP SIGNATURE-----

--- End Message ---

Reply via email to