diff options
| author | Graham Madarasz (Graham Linden) <graham@lindenlab.com> | 2013-07-30 11:33:58 -0700 | 
|---|---|---|
| committer | Graham Madarasz (Graham Linden) <graham@lindenlab.com> | 2013-07-30 11:33:58 -0700 | 
| commit | f86a7c04d3c265f4d61d99d1d7fdb7e35c4bc3f6 (patch) | |
| tree | 18ba9843873b40d75ab1e9d1a159abd4d1814719 /indra/newview/app_settings/shaders/class1/deferred | |
| parent | b44e7303d85ffc59afe34a97342d83a04b180c48 (diff) | |
NORSPEC-314 rollback unified srgb shader code to see if we can get past Mac 10.6.8 nV driver issues
Diffstat (limited to 'indra/newview/app_settings/shaders/class1/deferred')
8 files changed, 290 insertions, 16 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 52858f45f4..d11f67ee58 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -96,8 +96,42 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; -vec3 srgb_to_linear(vec3 cs); -vec3 linear_to_srgb(vec3 cl); +vec3 srgb_to_linear(vec3 cs) +{ +	vec3 low_range = cs / vec3(12.92); +	vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4)); +	bvec3 lte = lessThanEqual(cs,vec3(0.04045)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lte.r ? low_range.r : high_range.r; +	result.g = lte.g ? low_range.g : high_range.g; +	result.b = lte.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lte); +#endif + +} + +vec3 linear_to_srgb(vec3 cl) +{ +	cl = clamp(cl, vec3(0), vec3(1)); +	vec3 low_range  = cl * 12.92; +	vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055; +	bvec3 lt = lessThan(cl,vec3(0.0031308)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lt.r ? low_range.r : high_range.r; +	result.g = lt.g ? low_range.g : high_range.g; +	result.b = lt.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lt); +#endif + +}  vec3 calcDirectionalLight(vec3 n, vec3 l)  { diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl index 00548ea826..f22b16965c 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl @@ -39,8 +39,43 @@ VARYING vec3 vary_position;  VARYING vec4 vertex_color;  VARYING vec2 vary_texcoord0; -vec3 srgb_to_linear(vec3 cs); -vec3 linear_to_srgb(vec3 cl); + +vec3 srgb_to_linear(vec3 cs) +{ +	vec3 low_range = cs / vec3(12.92); +	vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4)); +	bvec3 lte = lessThanEqual(cs,vec3(0.04045)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lte.r ? low_range.r : high_range.r; +	result.g = lte.g ? low_range.g : high_range.g; +	result.b = lte.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lte); +#endif + +} + +vec3 linear_to_srgb(vec3 cl) +{ +	cl = clamp(cl, vec3(0), vec3(1)); +	vec3 low_range  = cl * 12.92; +	vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055; +	bvec3 lt = lessThan(cl,vec3(0.0031308)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lt.r ? low_range.r : high_range.r; +	result.g = lt.g ? low_range.g : high_range.g; +	result.b = lt.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lt); +#endif + +}  vec3 fullbrightAtmosTransportDeferred(vec3 light)  { diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl index d3bd55da7a..b3ae81d494 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -114,8 +114,42 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; -vec3 srgb_to_linear(vec3 cs); -vec3 linear_to_srgb(vec3 cl); +vec3 srgb_to_linear(vec3 cs) +{ +	vec3 low_range = cs / vec3(12.92); +	vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4)); +	bvec3 lte = lessThanEqual(cs,vec3(0.04045)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lte.r ? low_range.r : high_range.r; +	result.g = lte.g ? low_range.g : high_range.g; +	result.b = lte.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lte); +#endif + +} + +vec3 linear_to_srgb(vec3 cl) +{ +	cl = clamp(cl, vec3(0), vec3(1)); +	vec3 low_range  = cl * 12.92; +	vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055; +	bvec3 lt = lessThan(cl,vec3(0.0031308)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lt.r ? low_range.r : high_range.r; +	result.g = lt.g ? low_range.g : high_range.g; +	result.b = lt.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lt); +#endif + +}  #ifdef WATER_FOG  uniform vec4 waterPlane; diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl index 0b62c4ec09..ed68e38891 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl @@ -83,9 +83,43 @@ vec3 decode_normal (vec2 enc)      n.z = 1-f/2;      return n;  } +vec3 srgb_to_linear(vec3 cs) +{ +	vec3 low_range = cs / vec3(12.92); +	vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4)); +	bvec3 lte = lessThanEqual(cs,vec3(0.04045)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lte.r ? low_range.r : high_range.r; +	result.g = lte.g ? low_range.g : high_range.g; +	result.b = lte.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lte); +#endif + +} + +vec3 linear_to_srgb(vec3 cl) +{ +	cl = clamp(cl, vec3(0), vec3(1)); +	vec3 low_range  = cl * 12.92; +	vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055; +	bvec3 lt = lessThan(cl,vec3(0.0031308)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lt.r ? low_range.r : high_range.r; +	result.g = lt.g ? low_range.g : high_range.g; +	result.b = lt.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lt); +#endif + +} -vec3 srgb_to_linear(vec3 cs); -vec3 linear_to_srgb(vec3 cl);  vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)  { diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index 39d613e02b..0febbcd6e0 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -78,8 +78,43 @@ vec3 vary_AtmosAttenuation;  uniform mat4 inv_proj;  uniform vec2 screen_res; -vec3 srgb_to_linear(vec3 cs); -vec3 linear_to_srgb(vec3 cl); +vec3 srgb_to_linear(vec3 cs) +{ +	vec3 low_range = cs / vec3(12.92); +	vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4)); +	bvec3 lte = lessThanEqual(cs,vec3(0.04045)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lte.r ? low_range.r : high_range.r; +	result.g = lte.g ? low_range.g : high_range.g; +	result.b = lte.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lte); +#endif + +} + +vec3 linear_to_srgb(vec3 cl) +{ +	cl = clamp(cl, vec3(0), vec3(1)); +	vec3 low_range  = cl * 12.92; +	vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055; +	bvec3 lt = lessThan(cl,vec3(0.0031308)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lt.r ? low_range.r : high_range.r; +	result.g = lt.g ? low_range.g : high_range.g; +	result.b = lt.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lt); +#endif + +} +  vec3 decode_normal (vec2 enc)  { diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl index 251abfd119..48c9cd363c 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl @@ -82,8 +82,42 @@ vec3 decode_normal (vec2 enc)      return n;  } -vec3 srgb_to_linear(vec3 cs); -vec3 linear_to_srgb(vec3 cl); +vec3 srgb_to_linear(vec3 cs) +{ +	vec3 low_range = cs / vec3(12.92); +	vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4)); +	bvec3 lte = lessThanEqual(cs,vec3(0.04045)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lte.r ? low_range.r : high_range.r; +	result.g = lte.g ? low_range.g : high_range.g; +	result.b = lte.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lte); +#endif + +} + +vec3 linear_to_srgb(vec3 cl) +{ +	cl = clamp(cl, vec3(0), vec3(1)); +	vec3 low_range  = cl * 12.92; +	vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055; +	bvec3 lt = lessThan(cl,vec3(0.0031308)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lt.r ? low_range.r : high_range.r; +	result.g = lt.g ? low_range.g : high_range.g; +	result.b = lt.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lt); +#endif + +}  vec4 correctWithGamma(vec4 col)  { diff --git a/indra/newview/app_settings/shaders/class1/deferred/underWaterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/underWaterF.glsl index 858c3a1fe9..78f841c733 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/underWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/underWaterF.glsl @@ -56,8 +56,42 @@ VARYING vec4 refCoord;  VARYING vec4 littleWave;  VARYING vec4 view; -vec3 srgb_to_linear(vec3 cs); -vec3 linear_to_srgb(vec3 cl); +vec3 srgb_to_linear(vec3 cs) +{ +	vec3 low_range = cs / vec3(12.92); +	vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4)); +	bvec3 lte = lessThanEqual(cs,vec3(0.04045)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lte.r ? low_range.r : high_range.r; +	result.g = lte.g ? low_range.g : high_range.g; +	result.b = lte.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lte); +#endif + +} + +vec3 linear_to_srgb(vec3 cl) +{ +	cl = clamp(cl, vec3(0), vec3(1)); +	vec3 low_range  = cl * 12.92; +	vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055; +	bvec3 lt = lessThan(cl,vec3(0.0031308)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lt.r ? low_range.r : high_range.r; +	result.g = lt.g ? low_range.g : high_range.g; +	result.b = lt.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lt); +#endif + +}  vec2 encode_normal(vec3 n)  { diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl index 5538c41d1c..d49ff72cf0 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl @@ -67,8 +67,42 @@ VARYING vec4 littleWave;  VARYING vec4 view;  VARYING vec4 vary_position; -vec3 srgb_to_linear(vec3 cs); -vec3 linear_to_srgb(vec3 cl); +vec3 srgb_to_linear(vec3 cs) +{ +	vec3 low_range = cs / vec3(12.92); +	vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4)); +	bvec3 lte = lessThanEqual(cs,vec3(0.04045)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lte.r ? low_range.r : high_range.r; +	result.g = lte.g ? low_range.g : high_range.g; +	result.b = lte.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lte); +#endif + +} + +vec3 linear_to_srgb(vec3 cl) +{ +	cl = clamp(cl, vec3(0), vec3(1)); +	vec3 low_range  = cl * 12.92; +	vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055; +	bvec3 lt = lessThan(cl,vec3(0.0031308)); + +#ifdef OLD_SELECT +	vec3 result; +	result.r = lt.r ? low_range.r : high_range.r; +	result.g = lt.g ? low_range.g : high_range.g; +	result.b = lt.b ? low_range.b : high_range.b; +    return result; +#else +	return mix(high_range, low_range, lt); +#endif + +}  vec2 encode_normal(vec3 n)  { | 
