⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hxftransformarm.s

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 S
📖 第 1 页 / 共 4 页
字号:
	cmp r6, #0
	movne r3, #0x0
	bne HTV_FOG_EXP_STORE

	;  Get
	ldr r4, =g_HXFExpTable
	mov r6, r5, lsr #24	; get major index 
	mov r5, r5, lsr #16 ; put fractional bits for linear interp in r1
	and r5, r5, #0xFF   ; mask of weight bits
	
	add r6, r6, r4 ; compute base address of look up table
	ldrb r3, [r6]   ; Load Base value 
	ldrb r6, [r6, #1]   ; Load Second Value

	; compute weighted value
	mul r4, r6, r5 
	rsb r5, r5, #0x100
	mul r6, r3, r5
	
	add r3, r6, r4
	mov r3, r3, lsr #8

HTV_FOG_EXP_STORE
	; Store the result
	add r2, r2, r12
	strb r3, [r2, #3]
	
	b HTV_FOG_RETURN
	ENDP

|HXFFogExp2Proc| PROC
	ldrd 	r4, [r0, #HXFSTATE_OFFSET_STORAGE_VTXPOSITION_X] ; Load in X,Y Position
	ldrd 	r8, [r0, #HXFSTATE_OFFSET_FOG_XFORM_X] 			; Load the Fog X, Y  Transform

	ldrd 	r6, [r0, #HXFSTATE_OFFSET_STORAGE_VTXPOSITION_Z] ; Load in Z, W Position
	ldrd 	r10, [r0, #HXFSTATE_OFFSET_FOG_XFORM_Z] 			; Load the Fog Z, W  Transform

	; fFog = GLES_POWF(GLES_E, -(fDensity * fEyeZ * fDensity * fEyeZ));

	wzero wr0
	tmia wr0, r4, r8
	tmia wr0, r5, r9
	tmia wr0, r6, r10
	tmia wr0, r7, r11

	ldr 	r5, [r0, #HXFSTATE_OFFSET_FOG_DENSITY] ; Load the Fog End, Fog Inverse Range

	wsradg wr0, wr0, wcgr0
	textrmsw r3, wr0, #0
	
	; abs(ed) 	
	cmp 	r3, #0
	rsblt	r3, r3, #0 

	; fp = Density * (ed)
	smull   r4, r5, r3, r5
	mov		r5, r5, lsl #16
	orr		r3, r5, r4, lsr #16				;Concatenating Lo and Hi
	
	;fp^2
	smull   r4, r5, r3, r3
	mov		r5, r5, lsl #16
	orr		r3, r5, r4, lsr #16				;Concatenating Lo and Hi
	
	rsb r3, r3, #0 ; -(fp^2)

	; Clamp to Max
	cmp r3, #0
	movge r3, #0xFF;
	bge HTV_FOG_EXP2_STORE	

	; r0 * Scale Factor(0xFFFFD1D8) -0.180310 = 1.0f/-5.546000f
	mov r4, #0xFF000000
	orr r4, r4, #0x00FF0000
	orr r4, r4, #0x0000D100
	orr r4, r4, #0x000000D8

	smull r5, r6, r3, r4 

	cmp r6, #0
	movne r3, #0x0
	bne HTV_FOG_EXP2_STORE

	;  Get
	ldr r4, =g_HXFExpTable
	mov r6, r5, lsr #24	; get major index 
	mov r5, r5, lsr #16 ; put fractional bits for linear interp in r1
	and r5, r5, #0xFF   ; mask of weight bits
	
	add r6, r6, r4 ; compute base address of look up table
	ldrb r3, [r6]   ; Load Base value 
	ldrb r6, [r6, #1]   ; Load Second Value

	; compute weighted value
	mul r4, r6, r5 
	rsb r5, r5, #0x100
	mul r6, r3, r5
	
	add r3, r6, r4
	mov r3, r3, lsr #8
	
HTV_FOG_EXP2_STORE
	; Store The result
	add r2, r2, r12
	strb r3, [r2, #3]

	b HTV_FOG_RETURN
	ENDP

; ---------------------------------------------------------------------- --
; Register Map - Fog Procs
; ---------------------------------------------------------------------- --
; r0 =	pState      r4 = Vtx.x      r8 = Mtx        r12 = pOutVtx        
; r1 =  flags       r5 = Vtx.y      r9 = Mtx        r13 = sp
; r2 = Spec Off     r6 = Vtx.z      r10 =Mtx        r14 = lr (return)
; r3 =              r7 = Vtx.w      r11 =Mtx        r15 = pc
; ---------------------------------------------------------------------- --
; wr0 =             wr4 =            wr8 =            wr12 = 0xFFFF0000         
; wr1 =             wr5 =            wr9 =            wr13 =   
; wr2 =             wr6 =            wr10 =           wr14 = Zero 
; wr3 =             wr7 =            wr11 = 0x04040404wr15 =   
; wcgr0 = 16        wcgr1 = 12        wcgr2 = 8        wcgr3 = 32
; ---------------------------------------------------------------------- --
|HXFFogLinearProc| PROC
	ldrd 	r4, [r0, #HXFSTATE_OFFSET_STORAGE_VTXPOSITION_X] ; Load in X,Y Position
	ldrd 	r8, [r0, #HXFSTATE_OFFSET_FOG_XFORM_X] ; Load in Z, W Position

	ldrd 	r6, [r0, #HXFSTATE_OFFSET_STORAGE_VTXPOSITION_Z] ; Load the Fog X, Y  Transform
	ldrd 	r10, [r0, #HXFSTATE_OFFSET_FOG_XFORM_Z] ; Load the Fog Z, W  Transform

	wzero wr0
	tmia wr0, r4, r8
	tmia wr0, r5, r9
	tmia wr0, r6, r10
	tmia wr0, r7, r11

	ldrd 	r4, [r0, #HXFSTATE_OFFSET_FOG_END] ; Load the Fog End, Fog Inverse Range

	wsradg wr0, wr0, wcgr0
	textrmsw r3, wr0, #0
	
	; ed = end - z
	add r3, r4, r3	

	; ed * INV_RANGE(1/(e-s))
	smull   r4, r5, r3, r5
	mov		r5, r5, lsl #16
	orr		r3, r5, r4, lsr #16				;Concatenating Lo and Hi
		
	; clamp and convert to 0-255 
	movs r3, r3, asr #8
	movlt r3, #0 
	cmp r3, #255
	movgt r3, #255
	
	; Store the result
	add r2, r2, r12
	strb r3, [r2, #3]

	b HTV_FOG_RETURN
	ENDP

;** ************************************************************************ **
;**	Load Tex Coord Procs
;** ************************************************************************ **
; ---------------------------------------------------------------------- --
; Register Map - Load Tex Coord Procs
; ---------------------------------------------------------------------- --
; r0 =	pState      r4 =            r8 =            r12 = pOutVtx        
; r1 =  flags       r5 =            r9 =            r13 = sp
; r2 =  pOutTC      r6 =            r10 =           r14 = lr (return)
; r3 =              r7 =            r11 = 		    r15 = pc
; ---------------------------------------------------------------------- --
; wr0 =             wr4 =            wr8 =            wr12 = 0xFFFF0000         
; wr1 =             wr5 =            wr9 =            wr13 =   
; wr2 =             wr6 =            wr10 =           wr14 = Zero 
; wr3 =             wr7 =            wr11 = 0x04040404wr15 =   
; wcgr0 = 16        wcgr1 = 12        wcgr2 = 8        wcgr3 = 32
; ---------------------------------------------------------------------- --
;** ************************************************************************ **
|HXFCopyTexCoordFIXED2Proc| PROC
	ldr		r5, [r6]
	ldr		r6, [r6, #4]

	str     r5, [r2]            
	str     r6, [r2, #4]

	mov 		pc, lr
	ENDP

|HXFCopyTexCoordINT82Proc| PROC
	ldsb	r5, [r6]
	ldsb	r6, [r6, #1]

	mov		r5, r5, lsl #16   ; Shift into fixed position.
	mov		r6, r6, lsl #16   ; Shift into fixed position.

	str     r5, [r2]            
	str     r6, [r2, #4]
	mov 		pc, lr
	ENDP

|HXFCopyTexCoordINT162Proc| PROC
	ldsh	r5, [r6]
	ldsh	r6, [r6, #2]

	mov		r5, r5, lsl #16   ; Shift into fixed position.
	mov		r6, r6, lsl #16   ; Shift into fixed position.
	
	str     r5, [r2]            
	str     r6, [r2, #4]
	mov 		pc, lr
	ENDP

|HXFTransformTexCoordFIXED2Proc| PROC
	ldr		r4, [r6]
	ldr		r5, [r6, #4]
	mov		r10, #0              ; = 0 otherwise.
	mov		r11, #HFX_ONE       ; Equal to FIXED point 1.0 otherwise.
	b 	TransformTextureCoords
	ENDP

|HXFTransformTexCoordFIXED3Proc| PROC
	ldr		r4, [r6]
	ldr		r5, [r6, #4]
	ldr		r10, [r6, #8]
	mov		r11, #HFX_ONE       ; Equal to FIXED point 1.0 otherwise.	
	b 	TransformTextureCoords
	ENDP

|HXFTransformTexCoordFIXED4Proc| PROC
	ldr		r4, [r6]
	ldr		r5, [r6, #4]
	ldr		r10, [r6, #8]
	ldr		r11, [r6, #12]
	b 	TransformTextureCoords
	ENDP

|HXFTransformTexCoordINT82Proc| PROC
	ldsb	r4, [r6]
	ldsb	r5, [r6, #1]
	mov		r10, #0             ; = 0 otherwise.
	mov		r11, #HFX_ONE       ; Equal to fixed point 1.0 otherwise.

	mov		r4, r4, lsl #16   ; Shift into fixed position.
	mov		r5, r5, lsl #16   ; Shift into fixed position.
	b 	TransformTextureCoords
	ENDP

|HXFTransformTexCoordINT83Proc| PROC
	ldsb	r4, [r6]
	ldsb	r5, [r6, #1]
	ldsb	r10, [r6, #2]
	mov		r11, #HFX_ONE       ; Equal to fixed point 1.0 otherwise.

	mov		r4, r4, lsl #16   ; Shift into fixed position.
	mov		r5, r5, lsl #16   ; Shift into fixed position.
	mov		r10, r10, lsl #16   ; Shift into fixed position.
	b 	TransformTextureCoords
	ENDP

|HXFTransformTexCoordINT84Proc| PROC
	ldsb	r4,  [r6]
	ldsb	r5,  [r6, #1]
	ldsb	r10,  [r6, #2]
	ldsb	r11,  [r6, #3]

	mov		r4, r4, lsl #16   ; Shift into fixed position.
	mov		r5, r5, lsl #16   ; Shift into fixed position.
	mov		r10, r10, lsl #16   ; Shift into fixed position.
	mov		r11, r11, lsl #16   ; Shift into fixed position.
	b 	TransformTextureCoords
	ENDP

|HXFTransformTexCoordINT162Proc| PROC
	ldsh	r4, [r6]
	ldsh	r5, [r6, #2]
	mov		r10, #0             ; = 0 otherwise.
	mov		r11, #HFX_ONE       ; Equal to fixed point 1.0 otherwise.

	mov		r4, r4, lsl #16   ; Shift into fixed position.
	mov		r5, r5, lsl #16   ; Shift into fixed position.
	b 	TransformTextureCoords
	ENDP

|HXFTransformTexCoordINT163Proc| PROC
	ldsh	r4,  [r6]
	ldsh	r5,  [r6, #2]
	ldsh	r10, [r6, #4]
	mov		r11, #HFX_ONE       ; Equal to fixed point 1.0 otherwise.

	mov		r4, r4, lsl #16   ; Shift into fixed position.
	mov		r5, r5, lsl #16   ; Shift into fixed position.
	mov		r10, r10, lsl #16   ; Shift into fixed position.
	b 	TransformTextureCoords
	ENDP

|HXFTransformTexCoordINT164Proc| PROC
	ldsh	r4, [r6]
	ldsh	r5, [r6, #2]
	ldsh	r10, [r6, #4]
	ldsh	r11, [r6, #6]

	mov		r4, r4, lsl #16   ; Shift into fixed position.
	mov		r5, r5, lsl #16   ; Shift into fixed position.
	mov		r10, r10, lsl #16   ; Shift into fixed position.
	mov		r11, r11, lsl #16   ; Shift into fixed position.
	b 	TransformTextureCoords
	ENDP

;** ************************************************************************ **
; Name:				TransformTextureCoords
; Description:		 	
;	Same basic concepts as CopyVertexColors. 
; Input Arguments: 	r0 - HXFState* pState
; Output Argument:	None;	
; ---------------------------------------------------------------------- --
; Register Map - Transform Tex Coord Procs
; ---------------------------------------------------------------------- --
; r0 =	pState      r4 = s(in)      r8 =            r12 = pOutVtx        
; r1 =  flags       r5 = t(in)      r9 =            r13 = sp
; r2 =  pOutTC      r6 =            r10 = u(in)     r14 = lr (return)
; r3 =              r7 =            r11 = v(in)     r15 = pc
; ---------------------------------------------------------------------- --
; wr0 =             wr4 =            wr8 =            wr12 = 0xFFFF0000         
; wr1 =             wr5 =            wr9 =            wr13 =   
; wr2 =             wr6 =            wr10 =           wr14 = Zero 
; wr3 =             wr7 =            wr11 = 0x04040404wr15 =   
; wcgr0 = 16        wcgr1 = 12       wcgr2 = 8        wcgr3 = 32
; ---------------------------------------------------------------------- --
; Prototype in C:	N/A
;** ************************************************************************ **
|TransformTextureCoords| PROC
	; load Transform Matrix
    ldr     r3, [r0, #HXFSTATE_OFFSET_PTRANFORMMATRIX]
	add     r3, r3, r9 

	; ---------------------------------------------------------------------- --
	; Register Map - 
	; ---------------------------------------------------------------------- --
	; r0 =	pState      r4 = s(in)      r8 =            r12 = pOutVtx        
	; r1 =  flags       r5 = t(in)      r9 =            r13 = sp
	; r2 =  pOutTC      r6 =            r10 = u(in)     r14 = lr (return)
	; r3 =  pMatrix     r7 =            r11 = v(in)     r15 = pc
	; ---------------------------------------------------------------------- --
	; wr0 = r.x         wr4 =            wr8 =  xadj|yadj wr12 = 0xFFFF0000         
	; wr1 = r.y         wr5 =            wr9 =  zadj|wadj wr13 =   
	; wr2 = r.z         wr6 =slz v.x|v.y wr10 =           wr14 = Zero 
	; wr3 = r.w         wr7 =slz v.z|v.w wr11 = 0x04040404wr15 =   
	; wcgr0 = 16        wcgr1 = 12        wcgr2 = 8        wcgr3 = 32
	; ---------------------------------------------------------------------- --
	ldrd    r6, [r3]        ; Load M_11 & M_12
	ldrd    r8, [r3, #16]   ; Load M_21 & M_22

    wzero   wr0              ; r.x = 0
	tmia    wr0, r4, r6      ; r.x += v1.x * M_11

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -