; This source file can be requested from NVLink.
; It could be re-assembled as a shader, but note that
; NVLink has already assembled this file into D3D opcodes
; You can ask NVLink for the constant and vertex slots from the API.

; Total Instructions: 44
; Instructions removed by optimizer: 2
; Used Constants: 17
; Used Vertex Slots: 0
; Used Registers: 6

#define c_constants 0
#define c_decompress_object_scale 1
#define c_ambient_light 6
#define c_worldviewprojection_0 2
#define c_worldviewprojection_1 3
#define c_worldviewprojection_2 4
#define c_worldviewprojection_3 5
#define c_fogconst 8
#define c_pointlight_diffuse_0 14
#define c_pointlight_diffuse_1 16
#define c_dirlight_diffuse_0 10
#define c_dirlight_diffuse_1 12
#define c_objectspace_eyeposition 7
#define c_dirlight_direction_0 9
#define c_dirlight_direction_1 11
#define c_pointlight_position_0 13
#define c_pointlight_position_1 15

vs.1.0
dcl_position0 v0
dcl_position1 v1
dcl_texcoord0 v2
dcl_normal0 v3

; f_decompress_position
mad r0.xy, v0.ywww, c[c_constants].wwww, v0.xzzz
mad r0.zw, v1.yyyy, c[c_constants].wwww, v1.xxxx
mad r0.xyz, r0.xyzz, c[c_decompress_object_scale].xxxx, -c[c_decompress_object_scale].yyyy
mov r0.w, c[c_constants].yyyy

; f_decompress_normal
mad r1, v3, c[c_constants].zzzz, -c[c_constants].yyyy

; f_decompress_texture0
mad r2.xy, v2.ywww, c[c_constants].wwww, v2.xzzz
mad oT0.xy, r2.xyyy, c[c_decompress_object_scale].zzzz, -c[c_decompress_object_scale].wwww

; f_move_fixed_localposition
mov r0, r0

; f_move_fixed_localnormal

; f_outputobjectpos_clipspace
mov r0.w, c[c_constants].yyyy
dp4 oPos.x, r0, c[c_worldviewprojection_0]
dp4 oPos.y, r0, c[c_worldviewprojection_1]
dp4 oPos.z, r0, c[c_worldviewprojection_2]
dp4 oPos.w, r0, c[c_worldviewprojection_3]

; f_set_ambient
mov r3, c[c_ambient_light]

; f_create_objectspace_eyevector_local_viewer
add r4, r0, -c[c_objectspace_eyeposition]
dp3 r4.w, r4, r4
rsq r5.w, r4.wwww
mul r4, -r4, r5.wwww

; f_calculate_linear_range_fog
rcp r5.w, r5.wwww
add r5.x, c[c_fogconst].yyyy, -r5.wwww
mul r5.x, r5.xxxx, c[c_fogconst].zzzz
add oFog, r5.xxxx, -c[c_fogconst].xxxx

; f_calculate_objectspace_directionallight_diffuse_intensity
dp3 r5, r1, c[c_dirlight_direction_0]

; f_clamp_diffuse_exponentiate_specular
lit r5, r5

; f_dirlight_accumulate_diffuse
mad r5, r5.yyyy, c[c_dirlight_diffuse_0], r3

; f_calculate_objectspace_directionallight_diffuse_intensity
dp3 r3, r1, c[c_dirlight_direction_1]

; f_clamp_diffuse_exponentiate_specular
lit r3, r3

; f_dirlight_accumulate_diffuse
mad r3, r3.yyyy, c[c_dirlight_diffuse_1], r5

; f_calculate_objectspace_pointlight_vector
add r5, c[c_pointlight_position_0], -r0
dp3 r5.w, r5, r5
rsq r5.w, r5.wwww
mul r5, r5, r5.wwww

; f_calculate_objectspace_pointlight_diffuse_intensity
dp3 r5, r1, r5

; f_clamp_diffuse_exponentiate_specular
lit r5, r5

; f_pointlight_accumulate_diffuse
mad r5, r5.yyyy, c[c_pointlight_diffuse_0], r3

; f_calculate_objectspace_pointlight_vector
add r0, c[c_pointlight_position_1], -r0
dp3 r0.w, r0, r0
rsq r0.w, r0.wwww
mul r0, r0, r0.wwww

; f_calculate_objectspace_pointlight_diffuse_intensity
dp3 r1, r1, r0

; f_clamp_diffuse_exponentiate_specular
lit r1, r1

; f_pointlight_accumulate_diffuse
mad r1, r1.yyyy, c[c_pointlight_diffuse_1], r5

; f_write_default_texture

; f_set_diffuse_alpha_ambient
mov oD0.w, c[c_ambient_light].wwww

; f_write_diffuse_result
mov oD0.xyz, r1

; end
