CodeWalker/Shaders/WaterVS.hlsli
2017-09-21 20:33:05 +10:00

475 lines
15 KiB
HLSL

#include "Quaternion.hlsli"
#include "Shadowmap.hlsli"
cbuffer VSSceneVars : register(b0)
{
float4x4 ViewProj;
float4 WaterVector;
float ScaledTime;
float ScnPad0;
float ScnPad1;
float ScnPad2;
}
cbuffer VSEntityVars : register(b2)
{
float4 CamRel;
float4 Orientation;
float3 Scale;
uint EntPad0;
}
cbuffer VSGeomVars : register(b3)
{
float4 WaterParams;
uint EnableFlow;
uint ShaderMode;
uint GeoPad1;
uint GeoPad2;
float RippleSpeed;
float GeoPad3;
float GeoPad4;
float GeoPad5;
}
struct VS_OUTPUT
{
float4 Position : SV_POSITION;
float3 Normal : NORMAL;
float2 Texcoord0 : TEXCOORD0;
float4 Flow : TEXCOORD1;
float4 Shadows : TEXCOORD3;
float4 LightShadow : TEXCOORD4;
float4 Colour0 : COLOR0;
float4 Tangent : TEXCOORD5;
float4 Bitangent : TEXCOORD6;
float3 CamRelPos : TEXCOORD7;
};
Texture2D<float4> FlowSampler : register(t0);
SamplerState TextureSS : register(s0);
float3 ModelTransform(float3 ipos)
{
float3 tpos = ipos;
float3 spos = tpos * Scale;
float3 bpos = mulvq(spos, Orientation);
return CamRel.xyz + bpos;
}
float4 ScreenTransform(float3 opos)
{
float4 pos = float4(opos, 1);
float4 cpos = mul(pos, ViewProj);
cpos.z = DepthFunc(cpos.zw);
return cpos;
}
float3 NormalTransform(float3 inorm)
{
float3 tnorm = inorm;
float3 bnorm = normalize(mulvq(tnorm, Orientation));
return bnorm;
}
float2 GetWaterTexcoords(float2 tc)
{
if (ShaderMode == 1)
{
return tc + float2(ScaledTime * RippleSpeed, 0);
}
else
{
return tc;
}
}
float4 GetWaterFlow(float2 tc, float4 vc)
{
float4 f = float4(vc.g, 0, 0.02, 0.03);
if (EnableFlow)
{
float4 fv = FlowSampler.SampleLevel(TextureSS, tc, 0);
f.zw = fv.xy * 2 - 1;
f.x = vc.g;
f.y = 0;
//sample_l r0.xyzw, v2.xyxx, t2.xyzw, s2, l(0.000000)
//mad o5.zw, r0.xxxy, l(0.000000, 0.000000, 2.000000, 2.000000), l(0.000000, 0.000000, -1.000000, -1.000000)
//mov o5.x, v1.y
//mov o5.y, l(0)
}
return f;
}
/*
water_terrainfoam.fxc_VSFoam
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
//
// Buffer Definitions:
//
// cbuffer rage_matrices
// {
//
// row_major float4x4 gWorld; // Offset: 0 Size: 64
// row_major float4x4 gWorldView; // Offset: 64 Size: 64 [unused]
// row_major float4x4 gWorldViewProj; // Offset: 128 Size: 64
// row_major float4x4 gViewInverse; // Offset: 192 Size: 64 [unused]
//
// }
//
// cbuffer water_globals
// {
//
// float2 gWorldBaseVS; // Offset: 0 Size: 8
// float4 gFlowParams; // Offset: 16 Size: 16 [unused]
// float4 gFlowParams2; // Offset: 32 Size: 16 [unused]
// float4 gWaterAmbientColor; // Offset: 48 Size: 16 [unused]
// float4 gWaterDirectionalColor; // Offset: 64 Size: 16 [unused]
// float4 gScaledTime; // Offset: 80 Size: 16 [unused]
// float4 gOceanParams0; // Offset: 96 Size: 16 [unused]
// float4 gOceanParams1; // Offset: 112 Size: 16 [unused]
// row_major float4x4 gReflectionWorldViewProj;// Offset: 128 Size: 64 [unused]
// float4 gFogLight_Debugging; // Offset: 192 Size: 16 [unused]
// row_major float4x4 gRefractionWorldViewProj;// Offset: 208 Size: 64 [unused]
//
// }
//
//
// Resource Bindings:
//
// Name Type Format Dim HLSL Bind Count
// ------------------------------ ---------- ------- ----------- -------------- ------
// rage_matrices cbuffer NA NA cb1 1
// water_globals cbuffer NA NA cb4 1
//
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION 0 xyz 0 NONE float xyz
// NORMAL 0 xyz 1 NONE float xyz
// TANGENT 0 xyz 2 NONE float xyz
// TEXCOORD 0 xy 3 NONE float xy
// COLOR 0 xyzw 4 NONE float w
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position 0 xyzw 0 POS float xyzw
// TEXCOORD 0 xyzw 1 NONE float xyzw
// TEXCOORD 1 xyz 2 NONE float xyz
// TEXCOORD 2 xyz 3 NONE float xyz
// TEXCOORD 3 xyz 4 NONE float xyz
// TEXCOORD 4 xyzw 5 NONE float xyzw
//
vs_4_0
dcl_constantbuffer CB1[12], immediateIndexed
dcl_constantbuffer CB4[1], immediateIndexed
dcl_input v0.xyz
dcl_input v1.xyz
dcl_input v2.xyz
dcl_input v3.xy
dcl_input v4.w
dcl_output_siv o0.xyzw, position
dcl_output o1.xyzw
dcl_output o2.xyz
dcl_output o3.xyz
dcl_output o4.xyz
dcl_output o5.xyzw
dcl_temps 1
mul r0.xyzw, v0.yyyy, cb1[9].xyzw
mad r0.xyzw, v0.xxxx, cb1[8].xyzw, r0.xyzw
mad r0.xyzw, v0.zzzz, cb1[10].xyzw, r0.xyzw
add o0.xyzw, r0.xyzw, cb1[11].xyzw
mul r0.xyz, v0.yyyy, cb1[1].xyzx
mad r0.xyz, v0.xxxx, cb1[0].xyzx, r0.xyzx
mad r0.xyz, v0.zzzz, cb1[2].xyzx, r0.xyzx
add r0.xyz, r0.xyzx, cb1[3].xyzx
mov o1.xyz, r0.xyzx
add r0.xy, r0.xyxx, -cb4[0].xyxx
mul o5.zw, r0.xxxy, l(0.000000, 0.000000, 0.001953, 0.001953)
mov o1.w, v4.w
mov o2.xyz, v1.xyzx
mov o3.xyz, v2.xyzx
mul r0.xyz, v1.zxyz, v2.yzxy
mad r0.xyz, v1.yzxy, v2.zxyz, -r0.xyzx
dp3 r0.w, r0.xyzx, r0.xyzx
rsq r0.w, r0.w
mul o4.xyz, r0.wwww, r0.xyzx
mov o5.xy, v3.xyxx
ret
// Approximately 21 instruction slots used
*/
/*
water_riverfoam.fxc_VS
vs_4_0
dcl_constantbuffer CB1[12], immediateIndexed
dcl_constantbuffer CB2[13], immediateIndexed
dcl_constantbuffer CB3[47], immediateIndexed
dcl_constantbuffer CB4[6], immediateIndexed
dcl_constantbuffer CB10[1], immediateIndexed
dcl_input v0.xyz
dcl_input v1.y
dcl_input v2.xy
dcl_input v3.xyz
dcl_output_siv o0.xyzw, position
dcl_output o1.xyzw
dcl_output o2.xyzw
dcl_output o3.xy
dcl_output o4.xyz
dcl_output o5.xyz
dcl_temps 2
mul r0.xyzw, v0.yyyy, gWorldViewProj[1].xyzw
mad r0.xyzw, v0.xxxx, gWorldViewProj[0].xyzw, r0.xyzw
mad r0.xyzw, v0.zzzz, gWorldViewProj[2].xyzw, r0.xyzw
add r0.xyzw, r0.xyzw, gWorldViewProj[3].xyzw
mul r1.xyzw, r0.xyzw, l(1.000000, 1.000000, 0.999995, 1.000000)
mov o0.xyzw, r1.xyzw
mov o2.zw, r1.wwww
add o1.xyz, v0.xyzx, gWorld[3].xyzx
mov o1.w, v1.y
mul r0.xyz, r0.xwyx, l(0.500000, 0.500000, 0.500000, 0.000000)
mad o2.y, r0.w, l(0.500000), -r0.z
add o2.x, r0.y, r0.x
mul r0.x, gScaledTime.x, RippleSpeed
mov r0.y, l(0)
add o3.xy, r0.xyxx, v2.xyxx ///TEXCOORD OUT
add r0.x, v3.z, gLightNaturalAmbient0.w
mul r0.x, r0.x, gLightNaturalAmbient1.w
max r0.x, r0.x, l(0.000000)
mad r0.yzw, gLightArtificialIntAmbient0.xxyz, r0.xxxx, gLightArtificialIntAmbient1.xxyz
mad r1.xyz, gLightNaturalAmbient0.xyzx, r0.xxxx, gLightNaturalAmbient1.xyzx
mad o4.xyz, r0.yzwy, globalScalars2.zzzz, r1.xyzx
dp3_sat r0.x, v3.xyzx, -gDirectionalLight.xyzx
mul o5.xyz, r0.xxxx, gDirectionalColour.xyzx
ret
// Approximately 24 instruction slots used
//
// cbuffer water_globals
// {
//
// float2 gWorldBaseVS; // Offset: 0 Size: 8 [unused]
// float4 gFlowParams; // Offset: 16 Size: 16 [unused]
// float4 gFlowParams2; // Offset: 32 Size: 16 [unused]
// float4 gWaterAmbientColor; // Offset: 48 Size: 16 [unused]
// float4 gWaterDirectionalColor; // Offset: 64 Size: 16 [unused]
// float4 gScaledTime; // Offset: 80 Size: 16
// float4 gOceanParams0; // Offset: 96 Size: 16 [unused]
// float4 gOceanParams1; // Offset: 112 Size: 16 [unused]
// row_major float4x4 gReflectionWorldViewProj;// Offset: 128 Size: 64 [unused]
// float4 gFogLight_Debugging; // Offset: 192 Size: 16 [unused]
// row_major float4x4 gRefractionWorldViewProj;// Offset: 208 Size: 64 [unused]
//
// }
//
// cbuffer water_common_locals
// {
//
// float RippleBumpiness; // Offset: 0 Size: 4 [unused]
// float RippleSpeed; // Offset: 4 Size: 4
// float RippleScale; // Offset: 8 Size: 4 [unused]
// float SpecularIntensity; // Offset: 12 Size: 4 [unused]
// float SpecularFalloff; // Offset: 16 Size: 4 [unused]
// float ParallaxIntensity; // Offset: 20 Size: 4 [unused]
//
// }
//
//
// Resource Bindings:
//
// Name Type Format Dim HLSL Bind Count
// ------------------------------ ---------- ------- ----------- -------------- ------
// rage_matrices cbuffer NA NA cb1 1
// misc_globals cbuffer NA NA cb2 1
// lighting_globals cbuffer NA NA cb3 1
// water_globals cbuffer NA NA cb4 1
// water_common_locals cbuffer NA NA cb10 1
//
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION 0 xyz 0 NONE float xyz
// COLOR 0 xyzw 1 NONE float y
// TEXCOORD 0 xy 2 NONE float xy
// NORMAL 0 xyz 3 NONE float xyz
// TANGENT 0 xyz 4 NONE float
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position 0 xyzw 0 POS float xyzw
// TEXCOORD 0 xyzw 1 NONE float xyzw
// TEXCOORD 1 xyzw 2 NONE float xyzw
// TEXCOORD 2 xy 3 NONE float xy
// TEXCOORD 3 xyz 4 NONE float xyz
// TEXCOORD 4 xyz 5 NONE float xyz
//
*/
/*
water_river.fxc_VS
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
//
// Buffer Definitions:
//
// cbuffer rage_matrices
// {
//
// row_major float4x4 gWorld; // Offset: 0 Size: 64
// row_major float4x4 gWorldView; // Offset: 64 Size: 64 [unused]
// row_major float4x4 gWorldViewProj; // Offset: 128 Size: 64
// row_major float4x4 gViewInverse; // Offset: 192 Size: 64 [unused]
//
// }
//
// cbuffer water_globals
// {
//
// float2 gWorldBaseVS; // Offset: 0 Size: 8
// float4 gFlowParams; // Offset: 16 Size: 16 [unused]
// float4 gFlowParams2; // Offset: 32 Size: 16 [unused]
// float4 gWaterAmbientColor; // Offset: 48 Size: 16
// float4 gWaterDirectionalColor; // Offset: 64 Size: 16 [unused]
// float4 gScaledTime; // Offset: 80 Size: 16 [unused]
// float4 gOceanParams0; // Offset: 96 Size: 16 [unused]
// float4 gOceanParams1; // Offset: 112 Size: 16 [unused]
// row_major float4x4 gReflectionWorldViewProj;// Offset: 128 Size: 64 [unused]
// float4 gFogLight_Debugging; // Offset: 192 Size: 16 [unused]
// row_major float4x4 gRefractionWorldViewProj;// Offset: 208 Size: 64 [unused]
//
// }
//
//
// Resource Bindings:
//
// Name Type Format Dim HLSL Bind Count
// ------------------------------ ---------- ------- ----------- -------------- ------
// FlowSampler sampler NA NA s2 1
// FlowSampler texture float4 2d t2 1
// rage_matrices cbuffer NA NA cb1 1
// water_globals cbuffer NA NA cb4 1
//
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION 0 xyz 0 NONE float xyz
// COLOR 0 xyzw 1 NONE float xy
// TEXCOORD 0 xy 2 NONE float xy
// NORMAL 0 xyz 3 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position 0 xyzw 0 POS float xyzw
// TEXCOORD 0 xyzw 1 NONE float xyzw
// TEXCOORD 1 xyzw 2 NONE float xyzw
// TEXCOORD 2 xyzw 3 NONE float xyzw
// TEXCOORD 3 xyzw 4 NONE float xyzw
// TEXCOORD 4 xyzw 5 NONE float xyzw
//
vs_4_0
dcl_constantbuffer CB1[12], immediateIndexed
dcl_constantbuffer CB4[4], immediateIndexed
dcl_sampler s2, mode_default
dcl_resource_texture2d (float,float,float,float) t2
dcl_input v0.xyz
dcl_input v1.xy
dcl_input v2.xy
dcl_input v3.xyz
dcl_output_siv o0.xyzw, position
dcl_output o1.xyzw
dcl_output o2.xyzw
dcl_output o3.xyzw
dcl_output o4.xyzw
dcl_output o5.xyzw
dcl_temps 2
mul r0.xyzw, v0.yyyy, cb1[9].xyzw
mad r0.xyzw, v0.xxxx, cb1[8].xyzw, r0.xyzw
mad r0.xyzw, v0.zzzz, cb1[10].xyzw, r0.xyzw
add r0.xyzw, r0.xyzw, cb1[11].xyzw
mov o0.xyzw, r0.xyzw
mul r0.xyz, r0.xwyx, l(0.500000, 0.500000, 0.500000, 0.000000)
mad o1.y, r0.w, l(0.500000), -r0.z
add o1.x, r0.y, r0.x
mov o4.w, r0.w
add r0.xyz, v0.xyzx, cb1[3].xyzx
add r1.xy, r0.xyxx, -cb4[0].xyxx
mad o1.zw, r1.xxxy, l(0.000000, 0.000000, 0.001953, 0.001953), l(0.000000, 0.000000, 0.001953, 0.001953)
mov o2.xyz, r0.xyzx
mul o3.zw, r0.xxxy, cb4[3].wwww
mov o2.w, v1.x
mov o3.xy, v2.xyxx
dp3 r0.x, v3.xyzx, v3.xyzx
rsq r0.x, r0.x
mul o4.xyz, r0.xxxx, v3.xyzx
sample_l r0.xyzw, v2.xyxx, t2.xyzw, s2, l(0.000000)
mad o5.zw, r0.xxxy, l(0.000000, 0.000000, 2.000000, 2.000000), l(0.000000, 0.000000, -1.000000, -1.000000)
mov o5.x, v1.y
mov o5.y, l(0)
ret
// Approximately 24 instruction slots used
*/