aboutsummaryrefslogtreecommitdiff
path: root/sp/src/materialsystem/stdshaders/common_lightmappedgeneric_fxc.h
diff options
context:
space:
mode:
Diffstat (limited to 'sp/src/materialsystem/stdshaders/common_lightmappedgeneric_fxc.h')
-rw-r--r--sp/src/materialsystem/stdshaders/common_lightmappedgeneric_fxc.h404
1 files changed, 202 insertions, 202 deletions
diff --git a/sp/src/materialsystem/stdshaders/common_lightmappedgeneric_fxc.h b/sp/src/materialsystem/stdshaders/common_lightmappedgeneric_fxc.h
index e82bdf65..aa670746 100644
--- a/sp/src/materialsystem/stdshaders/common_lightmappedgeneric_fxc.h
+++ b/sp/src/materialsystem/stdshaders/common_lightmappedgeneric_fxc.h
@@ -1,202 +1,202 @@
-//========= Copyright Valve Corporation, All rights reserved. ============//
-
-
-#if defined( _X360 )
-
-void GetBaseTextureAndNormal( sampler base, sampler base2, sampler bump, bool bBase2, bool bBump, float3 coords, float3 vWeights,
- out float4 vResultBase, out float4 vResultBase2, out float4 vResultBump )
-{
- vResultBase = 0;
- vResultBase2 = 0;
- vResultBump = 0;
-
- if ( !bBump )
- {
- vResultBump = float4(0, 0, 1, 1);
- }
-
-#if SEAMLESS
-
- vWeights = max( vWeights - 0.3, 0 );
-
- vWeights *= 1.0f / dot( vWeights, float3(1,1,1) );
-
- [branch]
- if (vWeights.x > 0)
- {
- vResultBase += vWeights.x * tex2D( base, coords.zy );
-
- if ( bBase2 )
- {
- vResultBase2 += vWeights.x * tex2D( base2, coords.zy );
- }
-
- if ( bBump )
- {
- vResultBump += vWeights.x * tex2D( bump, coords.zy );
- }
- }
-
- [branch]
- if (vWeights.y > 0)
- {
- vResultBase += vWeights.y * tex2D( base, coords.xz );
-
- if ( bBase2 )
- {
- vResultBase2 += vWeights.y * tex2D( base2, coords.xz );
- }
- if ( bBump )
- {
- vResultBump += vWeights.y * tex2D( bump, coords.xz );
- }
- }
-
- [branch]
- if (vWeights.z > 0)
- {
- vResultBase += vWeights.z * tex2D( base, coords.xy );
- if ( bBase2 )
- {
- vResultBase2 += vWeights.z * tex2D( base2, coords.xy );
- }
-
- if ( bBump )
- {
- vResultBump += vWeights.z * tex2D( bump, coords.xy );
- }
- }
-
-#else // not seamless
-
- vResultBase = tex2D( base, coords.xy );
-
- if ( bBase2 )
- {
- vResultBase2 = tex2D( base2, coords.xy );
- }
-
- if ( bBump )
- {
- vResultBump = tex2D( bump, coords.xy );
- }
-
-#endif
-
-
-}
-
-#else // PC
-
-void GetBaseTextureAndNormal( sampler base, sampler base2, sampler bump, bool bBase2, bool bBump, float3 coords, float3 vWeights,
- out float4 vResultBase, out float4 vResultBase2, out float4 vResultBump )
-{
- vResultBase = 0;
- vResultBase2 = 0;
- vResultBump = 0;
-
- if ( !bBump )
- {
- vResultBump = float4(0, 0, 1, 1);
- }
-
-#if SEAMLESS
-
- vResultBase += vWeights.x * tex2D( base, coords.zy );
- if ( bBase2 )
- {
- vResultBase2 += vWeights.x * tex2D( base2, coords.zy );
- }
- if ( bBump )
- {
- vResultBump += vWeights.x * tex2D( bump, coords.zy );
- }
-
- vResultBase += vWeights.y * tex2D( base, coords.xz );
- if ( bBase2 )
- {
- vResultBase2 += vWeights.y * tex2D( base2, coords.xz );
- }
- if ( bBump )
- {
- vResultBump += vWeights.y * tex2D( bump, coords.xz );
- }
-
- vResultBase += vWeights.z * tex2D( base, coords.xy );
- if ( bBase2 )
- {
- vResultBase2 += vWeights.z * tex2D( base2, coords.xy );
- }
- if ( bBump )
- {
- vResultBump += vWeights.z * tex2D( bump, coords.xy );
- }
-
-#else // not seamless
-
- vResultBase = tex2D( base, coords.xy );
- if ( bBase2 )
- {
- vResultBase2 = tex2D( base2, coords.xy );
- }
- if ( bBump )
- {
- vResultBump = tex2D( bump, coords.xy );
- }
-#endif
-
-}
-
-#endif
-
-
-
-
-float3 LightMapSample( sampler LightmapSampler, float2 vTexCoord )
-{
-# if ( !defined( _X360 ) || !defined( USE_32BIT_LIGHTMAPS_ON_360 ) )
- {
- float3 sample = tex2D( LightmapSampler, vTexCoord );
-
- return sample;
- }
-# else
- {
-# if 0 //1 for cheap sampling, 0 for accurate scaling from the individual samples
- {
- float4 sample = tex2D( LightmapSampler, vTexCoord );
-
- return sample.rgb * sample.a;
- }
-# else
- {
- float4 Weights;
- float4 samples_0; //no arrays allowed in inline assembly
- float4 samples_1;
- float4 samples_2;
- float4 samples_3;
-
- asm {
- tfetch2D samples_0, vTexCoord.xy, LightmapSampler, OffsetX = -0.5, OffsetY = -0.5, MinFilter=point, MagFilter=point, MipFilter=keep, UseComputedLOD=false
- tfetch2D samples_1, vTexCoord.xy, LightmapSampler, OffsetX = 0.5, OffsetY = -0.5, MinFilter=point, MagFilter=point, MipFilter=keep, UseComputedLOD=false
- tfetch2D samples_2, vTexCoord.xy, LightmapSampler, OffsetX = -0.5, OffsetY = 0.5, MinFilter=point, MagFilter=point, MipFilter=keep, UseComputedLOD=false
- tfetch2D samples_3, vTexCoord.xy, LightmapSampler, OffsetX = 0.5, OffsetY = 0.5, MinFilter=point, MagFilter=point, MipFilter=keep, UseComputedLOD=false
-
- getWeights2D Weights, vTexCoord.xy, LightmapSampler
- };
-
- Weights = float4( (1-Weights.x)*(1-Weights.y), Weights.x*(1-Weights.y), (1-Weights.x)*Weights.y, Weights.x*Weights.y );
-
- float3 result;
- result.rgb = samples_0.rgb * (samples_0.a * Weights.x);
- result.rgb += samples_1.rgb * (samples_1.a * Weights.y);
- result.rgb += samples_2.rgb * (samples_2.a * Weights.z);
- result.rgb += samples_3.rgb * (samples_3.a * Weights.w);
-
- return result;
- }
-# endif
- }
-# endif
-}
-
+//========= Copyright Valve Corporation, All rights reserved. ============//
+
+
+#if defined( _X360 )
+
+void GetBaseTextureAndNormal( sampler base, sampler base2, sampler bump, bool bBase2, bool bBump, float3 coords, float3 vWeights,
+ out float4 vResultBase, out float4 vResultBase2, out float4 vResultBump )
+{
+ vResultBase = 0;
+ vResultBase2 = 0;
+ vResultBump = 0;
+
+ if ( !bBump )
+ {
+ vResultBump = float4(0, 0, 1, 1);
+ }
+
+#if SEAMLESS
+
+ vWeights = max( vWeights - 0.3, 0 );
+
+ vWeights *= 1.0f / dot( vWeights, float3(1,1,1) );
+
+ [branch]
+ if (vWeights.x > 0)
+ {
+ vResultBase += vWeights.x * tex2D( base, coords.zy );
+
+ if ( bBase2 )
+ {
+ vResultBase2 += vWeights.x * tex2D( base2, coords.zy );
+ }
+
+ if ( bBump )
+ {
+ vResultBump += vWeights.x * tex2D( bump, coords.zy );
+ }
+ }
+
+ [branch]
+ if (vWeights.y > 0)
+ {
+ vResultBase += vWeights.y * tex2D( base, coords.xz );
+
+ if ( bBase2 )
+ {
+ vResultBase2 += vWeights.y * tex2D( base2, coords.xz );
+ }
+ if ( bBump )
+ {
+ vResultBump += vWeights.y * tex2D( bump, coords.xz );
+ }
+ }
+
+ [branch]
+ if (vWeights.z > 0)
+ {
+ vResultBase += vWeights.z * tex2D( base, coords.xy );
+ if ( bBase2 )
+ {
+ vResultBase2 += vWeights.z * tex2D( base2, coords.xy );
+ }
+
+ if ( bBump )
+ {
+ vResultBump += vWeights.z * tex2D( bump, coords.xy );
+ }
+ }
+
+#else // not seamless
+
+ vResultBase = tex2D( base, coords.xy );
+
+ if ( bBase2 )
+ {
+ vResultBase2 = tex2D( base2, coords.xy );
+ }
+
+ if ( bBump )
+ {
+ vResultBump = tex2D( bump, coords.xy );
+ }
+
+#endif
+
+
+}
+
+#else // PC
+
+void GetBaseTextureAndNormal( sampler base, sampler base2, sampler bump, bool bBase2, bool bBump, float3 coords, float3 vWeights,
+ out float4 vResultBase, out float4 vResultBase2, out float4 vResultBump )
+{
+ vResultBase = 0;
+ vResultBase2 = 0;
+ vResultBump = 0;
+
+ if ( !bBump )
+ {
+ vResultBump = float4(0, 0, 1, 1);
+ }
+
+#if SEAMLESS
+
+ vResultBase += vWeights.x * tex2D( base, coords.zy );
+ if ( bBase2 )
+ {
+ vResultBase2 += vWeights.x * tex2D( base2, coords.zy );
+ }
+ if ( bBump )
+ {
+ vResultBump += vWeights.x * tex2D( bump, coords.zy );
+ }
+
+ vResultBase += vWeights.y * tex2D( base, coords.xz );
+ if ( bBase2 )
+ {
+ vResultBase2 += vWeights.y * tex2D( base2, coords.xz );
+ }
+ if ( bBump )
+ {
+ vResultBump += vWeights.y * tex2D( bump, coords.xz );
+ }
+
+ vResultBase += vWeights.z * tex2D( base, coords.xy );
+ if ( bBase2 )
+ {
+ vResultBase2 += vWeights.z * tex2D( base2, coords.xy );
+ }
+ if ( bBump )
+ {
+ vResultBump += vWeights.z * tex2D( bump, coords.xy );
+ }
+
+#else // not seamless
+
+ vResultBase = tex2D( base, coords.xy );
+ if ( bBase2 )
+ {
+ vResultBase2 = tex2D( base2, coords.xy );
+ }
+ if ( bBump )
+ {
+ vResultBump = tex2D( bump, coords.xy );
+ }
+#endif
+
+}
+
+#endif
+
+
+
+
+float3 LightMapSample( sampler LightmapSampler, float2 vTexCoord )
+{
+# if ( !defined( _X360 ) || !defined( USE_32BIT_LIGHTMAPS_ON_360 ) )
+ {
+ float3 sample = tex2D( LightmapSampler, vTexCoord );
+
+ return sample;
+ }
+# else
+ {
+# if 0 //1 for cheap sampling, 0 for accurate scaling from the individual samples
+ {
+ float4 sample = tex2D( LightmapSampler, vTexCoord );
+
+ return sample.rgb * sample.a;
+ }
+# else
+ {
+ float4 Weights;
+ float4 samples_0; //no arrays allowed in inline assembly
+ float4 samples_1;
+ float4 samples_2;
+ float4 samples_3;
+
+ asm {
+ tfetch2D samples_0, vTexCoord.xy, LightmapSampler, OffsetX = -0.5, OffsetY = -0.5, MinFilter=point, MagFilter=point, MipFilter=keep, UseComputedLOD=false
+ tfetch2D samples_1, vTexCoord.xy, LightmapSampler, OffsetX = 0.5, OffsetY = -0.5, MinFilter=point, MagFilter=point, MipFilter=keep, UseComputedLOD=false
+ tfetch2D samples_2, vTexCoord.xy, LightmapSampler, OffsetX = -0.5, OffsetY = 0.5, MinFilter=point, MagFilter=point, MipFilter=keep, UseComputedLOD=false
+ tfetch2D samples_3, vTexCoord.xy, LightmapSampler, OffsetX = 0.5, OffsetY = 0.5, MinFilter=point, MagFilter=point, MipFilter=keep, UseComputedLOD=false
+
+ getWeights2D Weights, vTexCoord.xy, LightmapSampler
+ };
+
+ Weights = float4( (1-Weights.x)*(1-Weights.y), Weights.x*(1-Weights.y), (1-Weights.x)*Weights.y, Weights.x*Weights.y );
+
+ float3 result;
+ result.rgb = samples_0.rgb * (samples_0.a * Weights.x);
+ result.rgb += samples_1.rgb * (samples_1.a * Weights.y);
+ result.rgb += samples_2.rgb * (samples_2.a * Weights.z);
+ result.rgb += samples_3.rgb * (samples_3.a * Weights.w);
+
+ return result;
+ }
+# endif
+ }
+# endif
+}
+