#include "common.h" #include "lmodel.h" #include "shadow.h" // // Parameters: // // float4 Ldynamic_color; // float4 Ldynamic_dir; // float3 T; // float4x4 m_shadow; // float3x4 m_sunmask; // sampler2D s_accumulator; // sampler2D s_lmap; // sampler2D s_normal; // sampler2D s_position; // sampler2D s_smap; // // // Registers: // // Name Reg Size // -------------- ----- ---- // m_sunmask c0 4 // m_shadow c4 4 // Ldynamic_color c8 1 // Ldynamic_dir c9 1 // T c10 1 // s_smap s0 1 // s_position s1 1 // s_normal s2 1 // s_lmap s3 1 // s_accumulator s4 1 // float4 main( float2 tc : TEXCOORDS0, RD0, float4 tcJ : TEXCOORD1 ) : COLOR { const float4 c11 = { 1, 10, 1.53846157, -1 } const float4 c12 = { -0.000585937523, 0, 1, 1024 } const float4 c13 = { 1.44269502, 0.625, 0.400000006, 0.600000024 } const float4 c14 = { 0.000585937523, -0.000585937523, 0.25, 0 } float4 result; asm { ps_3_0 dcl_texcoord v0.xy dcl_2d s_smap dcl_2d s_position dcl_2d s_normal dcl_2d s_lmap dcl_2d s_accumulator texld r0, v0, s_position mul r1, r0.y, c5 mad r1, m_shadow, r0.x, r1 mad r1, c6, r0.z, r1 add r1, r1, c7 rcp r0.w, r1.w mad r2.xy, r1, r0.w, c12.x texld r3, r2, s_smap mul r2.xy, r2, c12.w mad r3, r1.z, r0.w, -r3 cmp r3, r3, c12.y, c12.z frc r2.xy, r2 add_pp r2.zw, -r2.xyxy, c11.x mul_pp r4, r2.xyyw, r2.wzxz dp4_pp r1.w, r3, r4 mad r2.xy, r1, r0.w, c14 texld r3, r2, s_smap mul r2.xy, r2, c12.w mad r3, r1.z, r0.w, -r3 cmp r3, r3, c12.y, c12.z frc r2.xy, r2 add_pp r2.zw, -r2.xyxy, c11.x mul_pp r4, r2.xyyw, r2.wzxz dp4_pp r2.x, r3, r4 add_pp r1.w, r1.w, r2.x mad r2.xy, r1, r0.w, c14.yxzw texld r3, r2, s_smap mul r2.xy, r2, c12.w mad r3, r1.z, r0.w, -r3 cmp r3, r3, c12.y, c12.z frc r2.xy, r2 add_pp r2.zw, -r2.xyxy, c11.x mul_pp r4, r2.xyyw, r2.wzxz dp4_pp r2.x, r3, r4 add_pp r1.w, r1.w, r2.x mad r1.xy, r1, r0.w, -c12.x texld r2, r1, s_smap mul r1.xy, r1, c12.w mad r2, r1.z, r0.w, -r2 cmp r2, r2, c12.y, c12.z frc r1.xy, r1 add_pp r3.xy, -r1, c11.x mul_pp r4.xy, r1, r3.yxzw mul_pp r4.z, r1.y, r1.x mul_pp r4.w, r3.y, r3.x dp4_pp r0.w, r2, r4 add_pp r0.w, r1.w, r0.w mul r1.xy, r0.y, c1 mad r1.xy, m_sunmask, r0.x, r1 mad r1.xy, c2, r0.z, r1 add r1.xy, r1, c3 texld_pp r1, r1, s_lmap mul_pp r0.w, r0.w, r1.w mul_pp r0.w, r0.w, c14.z dp3_pp r1.x, r0, r0 rsq_pp r1.x, r1.x mad_pp r0.xyz, r0, -r1.x, -Ldynamic_dir dp3_pp r1.x, r0, r0 rsq_pp r1.x, r1.x texld_pp r2, v0, s_normal nrm_pp r3.xyz, r2 dp3_sat_pp r1.y, r3, -Ldynamic_dir mul r2.xyz, r3, r1.y mad r0.xyz, r0, r1.x, -r2 nrm r2.xyz, r0 dp3 r0.x, T, r2 add r0.y, -r0.x, c11.x mul r0.y, r0.y, c11.y mad r0.x, r0.x, c11.z, r0.y add r0.y, r1.y, c11.w mul r0.x, r0.x, r0.y rcp r0.y, r1.y mul r0.x, r0.x, r0.y mul r0.x, r0.x, c13.x exp r0.x, r0.x mul r0.x, r1.y, r0.x mul r0.y, r1.y, r1.y mad r0.x, r0.x, c13.y, r0.y mad_sat r0.y, r1.y, c13.z, c13.w mul r0.y, r1.y, r0.y mad_pp r0.x, r0.y, -Ldynamic_dir.w, r0.x mul_pp r1, r0.x, Ldynamic_color texld_pp r2, v0, s_accumulator mad_pp result, r1, r0.w, r2 } return result; }