summaryrefslogtreecommitdiff
path: root/materialsystem/stdshaders/pyro_vision_vs20.fxc
diff options
context:
space:
mode:
Diffstat (limited to 'materialsystem/stdshaders/pyro_vision_vs20.fxc')
-rw-r--r--materialsystem/stdshaders/pyro_vision_vs20.fxc185
1 files changed, 185 insertions, 0 deletions
diff --git a/materialsystem/stdshaders/pyro_vision_vs20.fxc b/materialsystem/stdshaders/pyro_vision_vs20.fxc
new file mode 100644
index 0000000..bcd2f84
--- /dev/null
+++ b/materialsystem/stdshaders/pyro_vision_vs20.fxc
@@ -0,0 +1,185 @@
+// STATIC: "EFFECT" "0..3"
+// STATIC: "VERTEXCOLOR" "0..1"
+// STATIC: "HALFLAMBERT" "0..1"
+// STATIC: "VERTEX_LIT" "0..1"
+// STATIC: "FULLBRIGHT" "0..1"
+// STATIC: "USE_STATIC_CONTROL_FLOW" "0..1" [vs20]
+// STATIC: "BASETEXTURE2" "0..1"
+// STATIC: "STRIPES" "0..1"
+// STATIC: "STRIPES_USE_NORMAL2" "0..1"
+
+// DYNAMIC: "COMPRESSED_VERTS" "0..1"
+// DYNAMIC: "SKINNING" "0..1"
+// DYNAMIC: "DYNAMIC_LIGHT" "0..1"
+// DYNAMIC: "STATIC_LIGHT" "0..1"
+// DYNAMIC: "NUM_LIGHTS" "0..2" [vs20]
+
+// SKIP: ( STRIPES == 0 ) && ( STRIPES_USE_NORMAL2 == 1 )
+// SKIP: ( EFFECT == 2 || EFFECT == 3 ) && ( VERTEXCOLOR == 1 || HALFLAMBERT == 1 || VERTEX_LIT == 1 || FULLBRIGHT == 1 || USE_STATIC_CONTROL_FLOW == 1 || BASETEXTURE2 == 1 || STRIPES == 1 || STRIPES_USE_NORMAL2 == 1 )
+// SKIP: ( EFFECT == 2 || EFFECT == 3 ) && ( SKINNING == 1 || DYNAMIC_LIGHT == 1 || STATIC_LIGHT == 1 || NUM_LIGHTS != 0 )
+// SKIP: ( FULLBRIGHT == 1 ) && ( VERTEX_LIT == 0 || DYNAMIC_LIGHT == 1 || STATIC_LIGHT == 1 || NUM_LIGHTS != 0 )
+
+
+#include "common_vs_fxc.h"
+
+
+static const bool g_bSkinning = SKINNING ? true : false;
+static const bool g_bHalfLambert = HALFLAMBERT ? true : false;
+
+
+const float4 g_vPyroParms1 : register( SHADER_SPECIFIC_CONST_0 );
+ #define g_vStripeScale g_vPyroParms1.xyz
+ #define g_flUnused1 g_vPyroParms1.w
+
+#if EFFECT == 0 || EFFECT == 1
+
+const float4 g_vPyroParms2 : register( SHADER_SPECIFIC_CONST_1 );
+ #define g_vCanvasScale g_vPyroParms2.xyz
+ #define g_flUnused2 g_vPyroParms2.w
+
+#endif
+
+const float4 cBlendMaskTexCoordTransform[ 2 ] : register( SHADER_SPECIFIC_CONST_10 ); // not contiguous with the rest!
+
+struct VS_INPUT
+{
+ float4 vPos : POSITION;
+ float4 vBoneWeights : BLENDWEIGHT;
+ float4 vBoneIndices : BLENDINDICES;
+#if ( VERTEX_LIT == 1 )
+ float4 vNormal : NORMAL;
+#endif
+ float2 vBaseTexCoord : TEXCOORD0;
+ float2 vLightmapTexCoord : TEXCOORD1;
+ float2 vLightmapTexCoordOffset : TEXCOORD2;
+ float3 vTangentS : TANGENT;
+ float3 vTangentT : BINORMAL;
+ float4 vColor : COLOR0;
+ float3 vSpecular : COLOR1;
+};
+
+
+struct VS_OUTPUT
+{
+ float4 vProjPos : POSITION;
+
+#if EFFECT == 0 || EFFECT == 1
+
+ float4 vBaseAndSeamlessTexCoord : TEXCOORD0;
+#if ( STRIPES == 1 )
+ float2 vStripeSeamlessTexCoord : TEXCOORD1;
+#endif
+#if ( VERTEX_LIT == 0 )
+ float2 vLightmapBlendTexCoord : TEXCOORD2;
+#endif
+#if BASETEXTURE2 == 1
+ float3 vBlendFactor : TEXCOORD3;
+#endif
+ float4 worldPos_projPosZ : TEXCOORD4;
+ float3 vWorldNormal : TEXCOORD5;
+ float4 vVertexColor : COLOR;
+
+#else
+
+ float2 vBaseTexCoord : TEXCOORD0;
+
+#endif
+
+};
+
+
+VS_OUTPUT main( const VS_INPUT v )
+{
+ VS_OUTPUT o;
+
+#if EFFECT == 0 || EFFECT == 1
+
+ float4 vObjPosition = v.vPos;
+
+#if ( VERTEX_LIT == 1 )
+ float3 vObjNormal;
+ DecompressVertex_Normal( v.vNormal, vObjNormal );
+#else
+ float3 vObjNormal = float3( 0.0, 0.0, 1.0 );
+#endif
+
+ float3 vWorldNormal, vWorldPos;
+ SkinPositionAndNormal( g_bSkinning, vObjPosition, vObjNormal, v.vBoneWeights, v.vBoneIndices, vWorldPos, vWorldNormal );
+
+ float4 vProjPos = mul( float4( vWorldPos, 1 ), cViewProj );
+ o.vProjPos = vProjPos;
+ vProjPos.z = dot( float4( vWorldPos, 1 ), cViewProjZ );
+
+ o.worldPos_projPosZ = float4( vWorldPos, vProjPos.z );
+
+#if 0
+ if ( !g_bSkinning )
+ {
+ vWorldNormal = vObjNormal;
+ }
+#endif
+ vWorldNormal = normalize( vWorldNormal );
+ o.vWorldNormal = vWorldNormal;
+
+ o.vBaseAndSeamlessTexCoord.xy = v.vBaseTexCoord;
+ float flZFactor = vWorldPos.z * g_vCanvasScale.z;
+ o.vBaseAndSeamlessTexCoord.zw = float2( vWorldPos.x + flZFactor, vWorldPos.y - flZFactor ) * g_vCanvasScale.xy;
+
+#if ( STRIPES == 1 )
+
+ float3 vWorldStripeCoord = vWorldPos * g_vStripeScale;
+ o.vStripeSeamlessTexCoord.xy = vWorldStripeCoord.yz + vWorldStripeCoord.xz + vWorldStripeCoord.xy;
+
+#endif
+
+
+#if VERTEX_LIT == 0
+
+ o.vLightmapBlendTexCoord.xy = v.vLightmapTexCoord;
+
+#endif
+
+#if BASETEXTURE2 == 1
+
+ o.vBlendFactor.x = dot( v.vBaseTexCoord, cBlendMaskTexCoordTransform[ 0 ] ) + cBlendMaskTexCoordTransform[ 0 ].w;
+ o.vBlendFactor.y = dot( v.vBaseTexCoord, cBlendMaskTexCoordTransform[ 1 ] ) + cBlendMaskTexCoordTransform[ 1 ].w;
+ o.vBlendFactor.z = v.vColor.a;
+
+#endif
+
+#if VERTEXCOLOR == 1
+
+ o.vVertexColor = v.vColor;
+
+#elif VERTEX_LIT == 1 && FULLBRIGHT == 0
+
+ bool bDynamicLight = DYNAMIC_LIGHT ? true : false;
+ bool bStaticLight = STATIC_LIGHT ? true : false;
+
+ #if ( ( USE_STATIC_CONTROL_FLOW ) || defined ( SHADER_MODEL_VS_3_0 ) )
+ {
+ o.vVertexColor.xyz = DoLighting( vWorldPos, vWorldNormal, v.vSpecular, bStaticLight, bDynamicLight, g_bHalfLambert );
+ }
+ #else
+ {
+ o.vVertexColor.xyz = DoLightingUnrolled( vWorldPos, vWorldNormal, v.vSpecular, bStaticLight, bDynamicLight, g_bHalfLambert, NUM_LIGHTS );
+ }
+ #endif
+
+ o.vVertexColor.a = 1.0f;
+
+#else
+
+ o.vVertexColor = 1.0f;
+
+#endif
+
+#else
+
+ o.vProjPos = v.vPos;
+ o.vBaseTexCoord = v.vBaseTexCoord;
+
+#endif
+
+ return o;
+}