vs_3_0

; parameters
; c0...c3		world-view-projection matrix
; c4...c7		world-view matrix
; c16			sun light vector
; c17			sun ambient, diffuse intensity

; input declarations
dcl_position		v0
dcl_color0			v1
dcl_texcoord0		v2
dcl_texcoord1		v3
dcl_texcoord2		v4
dcl_normal			v5
dcl_color1			v6

; output declarations
dcl_position	o0.xyzw
dcl_color0		o1.xyzw
dcl_texcoord0	o2.xyzw
dcl_texcoord1	o3.xyzw
dcl_texcoord2	o4.xyzw
dcl_color1		o5.xyzw

; constants
def c128, 0.0f, 1.0f, 0.5f, 1.0f

; transform position to projection space
;dp4 o0.x, v0, c0
;dp4 o0.y, v0, c1
;dp4 o0.z, v0, c2
;dp4 o0.w, v0, c3
dp4 r20.x, v0, c0
dp4 r20.y, v0, c1
dp4 r20.z, v0, c2
dp4 r20.w, v0, c3

mov o0, r20

; calculate parallel lighting
m3x3 r4.xyz, v5, c4			; transform N

mov r2, -c16
dp3 r3, r4, r2				; N dot L
max r3, r3, c128.xxxx		; clamp negative values to 0

mul r3, r3, c17.xxxx		; scale with diffuse intensity
add r3, r3, c17.yyyy		; add ambient intensity

min r3, r3, c128.yyyy

if_ne v6.xxxx, c128.xxxx	; if v6.x == 0 -> apply lighting, if v6.x != 0 -> self-luminance
mov r3.xyz, v6.xxx			; self-luminance
endif

mov r3.w, c128.w			; multiply alpha with 1

mul o1, v1, r3				; modulate and write color
;mov o1, r3

; move texture parameters
mov r10,v2
mov r10.w, r20.w
mov o2, r10
;mov o2, v2
mov o3, v3
mov o4, v4

; parameters (X=texture enable)
mov o5.x, v6.g