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

📄 hxfstate.inc

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 INC
📖 第 1 页 / 共 2 页
字号:
;/* ************************************************************************* *\
;**    INTEL Corporation Proprietary Information
;**
;**    This listing is supplied under the terms of a license
;**    agreement with INTEL Corporation and may not be copied
;**    nor disclosed except in accordance with the terms of
;**    that agreement.
;**
;**    Copyright (c) 2003 Intel Corporation.
;**    All Rights Reserved.
;**
;** ************************************************************************* **
;**	FILE: HXFState.inc
;**	DESCRIPTION: 
;**	
;**	AUTHOR: Cian Montgomery
;**	CREATED: July 31, 2003
;**
; * $Date: 5/21/04 9:59a $ $Revision: 28 $
; * $Log: /Intel_Development/Drivers/Marathon/WinCE42/opengles/HXFState.inc $
; * 
; * 28    5/21/04 9:59a Clmontgo
; * 
; * 27    5/16/04 12:53p Clmontgo
; * 
; * 26    4/05/04 2:19p Clmontgo
; * Fixes for Light w/ w != 0 or 1 and Attenuation > 1.0
; * 
; * 25    3/25/04 3:57p Clmontgo
; * Fixes related to Latest Clipping fix
;\* ************************************************************************* */

;** ************************************************************************ **
;** ************************************************************************ **
;**	CONSTANTS
;** ************************************************************************ **
;** ************************************************************************ **
HXF_LIGHTING_INVERT_NORMALS EQU 0x00000002
HXF_SPECULAR_ENABLE 		EQU 0x00000004

HXF_LM_COLOR_CONSTANT			EQU 0x00100000
HXF_LM_SECONDARY_COLOR_CONSTANT EQU 0x00200000

;** Cull flags
HXF_CULL_CCW				EQU 0x00000010
HXF_CULL_CW					EQU 0x00000020
HXF_CULL_MASK				EQU 0x00000030

;** Primitive type constants
HXF_PT_POINT_LIST			EQU 0x00000100
HXF_PT_LINE_LIST			EQU 0x00000200
HXF_PT_LINE_STRIP			EQU 0x00000300
HXF_PT_LINE_LOOP			EQU 0x00000400
HXF_PT_TRI_LIST				EQU 0x00000500
HXF_PT_TRI_STRIP			EQU 0x00000600
HXF_PT_TRI_FAN				EQU 0x00000700
HXF_PT_MASK					EQU 0x00000F00

HXF_LIGHT_ENABLE			EQU 0x00004000
HXF_FOG_ENABLE 				EQU 0x00008000

HXF_OUTPUT_DIFFUSE			EQU (0x00010000)
HXF_OUTPUT_SPECULAR			EQU (0x00020000)
HXF_OUTPUT_TEX1				EQU (0x00040000)
HXF_OUTPUT_TEX2				EQU (0x00080000)
HXF_OUTPUT_MASK				EQU (0x000F0000)

HXF_STORE_POSITION 			EQU (HXF_FOG_ENABLE | HXF_LIGHT_ENABLE)

; FIXED POINT CONSTANTS
HFX_ONE						EQU 0x00010000
HFX_MIN						EQU 0x80000000
HFX_MAX						EQU 0x7FFFFFFF

HXF_ONE_F					EQU 0x3F800000 ; floating point one

HXF_INDEX_SIZE				EQU 2

HXF_INV_2PI_FX 				EQU 0x00002763

;** ************************************************************************ **
;**	Internal Clip constants
;** ************************************************************************ **
HXF_VTX_CLIP_FLAG_NEG_X	 		EQU (0x01<<0)
HXF_VTX_CLIP_FLAG_POS_X	 		EQU (0x01<<1)

HXF_VTX_CLIP_FLAG_NEG_Y	 		EQU (0x01<<2)
HXF_VTX_CLIP_FLAG_POS_Y	 		EQU (0x01<<3)

HXF_VTX_CLIP_FLAG_NEG_Z	 		EQU (0x01<<4)
HXF_VTX_CLIP_FLAG_POS_Z	 		EQU (0x01<<5)

HXF_CLIP_PRIMITIVE_SPACE		EQU	100
HXF_CLIP_IDX_SPACE				EQU	300
HXF_CLIP_VTX_SPACE				EQU	100

HXF_CLIP_VERTEX_BUFFER_PAD		EQU	18
HXF_CLIP_PRIMITIVE_BUFFER_PAD	EQU	18

;** ************************************************************************ **
;**	HXFState
;** ************************************************************************ **
;** INPUT DATA
HXFSTATE_OFFSET_NUMVERTICES					EQU 0
HXFSTATE_OFFSET_NUMPRIMITIVES				EQU HXFSTATE_OFFSET_NUMVERTICES + 4
HXFSTATE_OFFSET_FLAGS						EQU HXFSTATE_OFFSET_NUMPRIMITIVES + 4 
HXFSTATE_OFFSET_PAD1						EQU HXFSTATE_OFFSET_FLAGS + 4 
HXFSTATE_OFFSET_PINDICES					EQU HXFSTATE_OFFSET_PAD1 + 4
HXFSTATE_OFFSET_BASEINDEX					EQU HXFSTATE_OFFSET_PINDICES + 4

;** Input pairs must be 8 byte aligned
HXFSTATE_OFFSET_PINPOSITION					EQU HXFSTATE_OFFSET_BASEINDEX + 4
HXFSTATE_OFFSET_INPOSITIONSTRIDE			EQU HXFSTATE_OFFSET_PINPOSITION + 4
HXFSTATE_OFFSET_PINNORMAL					EQU HXFSTATE_OFFSET_INPOSITIONSTRIDE + 4
HXFSTATE_OFFSET_INNORMALSTRIDE				EQU HXFSTATE_OFFSET_PINNORMAL + 4
HXFSTATE_OFFSET_PINDIFFUSE					EQU HXFSTATE_OFFSET_INNORMALSTRIDE + 4
HXFSTATE_OFFSET_INDIFFUSESTRIDE				EQU HXFSTATE_OFFSET_PINDIFFUSE + 4
HXFSTATE_OFFSET_PINSPECULAR					EQU HXFSTATE_OFFSET_INDIFFUSESTRIDE + 4
HXFSTATE_OFFSET_INSPECULARSTRIDE			EQU HXFSTATE_OFFSET_PINSPECULAR + 4
HXFSTATE_OFFSET_PINTEXTURECOORDINATE1		EQU HXFSTATE_OFFSET_INSPECULARSTRIDE + 4
HXFSTATE_OFFSET_INTEXTURECOORDINATE1STRIDE	EQU HXFSTATE_OFFSET_PINTEXTURECOORDINATE1 + 4
HXFSTATE_OFFSET_PINTEXTURECOORDINATE2		EQU HXFSTATE_OFFSET_INTEXTURECOORDINATE1STRIDE	 + 4
HXFSTATE_OFFSET_INTEXTURECOORDINATE2STRIDE	EQU HXFSTATE_OFFSET_PINTEXTURECOORDINATE2 + 4

; OUTPUT DATA
HXFSTATE_OFFSET_POUTVERTICES			EQU HXFSTATE_OFFSET_INTEXTURECOORDINATE2STRIDE + 4
HXFSTATE_OFFSET_OUTVERTEXSIZE			EQU HXFSTATE_OFFSET_POUTVERTICES + 4
HXFSTATE_OFFSET_OUTSCREENVERTEXSIZE		EQU HXFSTATE_OFFSET_OUTVERTEXSIZE + 4
HXFSTATE_OFFSET_POUTCLIPFLAGS			EQU HXFSTATE_OFFSET_OUTSCREENVERTEXSIZE + 4 
HXFSTATE_OFFSET_OUTDIFFUSEOFFSET		EQU HXFSTATE_OFFSET_POUTCLIPFLAGS + 4
HXFSTATE_OFFSET_OUTSPECULAROFFSET		EQU HXFSTATE_OFFSET_OUTDIFFUSEOFFSET + 4
HXFSTATE_OFFSET_OUTTEX1OFFSET			EQU HXFSTATE_OFFSET_OUTSPECULAROFFSET + 4
HXFSTATE_OFFSET_OUTTEX2OFFSET			EQU HXFSTATE_OFFSET_OUTTEX1OFFSET + 4
HXFSTATE_OFFSET_OUTCLIPPOSOFFSET		EQU HXFSTATE_OFFSET_OUTTEX2OFFSET + 4

HXFSTATE_OFFSET_PENDOUTVERTEX			EQU HXFSTATE_OFFSET_OUTCLIPPOSOFFSET + 4 

;** GENERAL TNL CONFIGURATION
HXFSTATE_OFFSET_PTRANFORMMATRIX			EQU HXFSTATE_OFFSET_PENDOUTVERTEX + 4	  ; MUST DWORD align

;** LIGHTING
HXFSTATE_OFFSET_PLIGHTS					EQU HXFSTATE_OFFSET_PTRANFORMMATRIX  + 4
HXFSTATE_OFFSET_EYEVECTOR				EQU HXFSTATE_OFFSET_PLIGHTS + 4 	; 8 bytes long
HXFSTATE_OFFSET_MATERIALEMISSIVE		EQU HXFSTATE_OFFSET_EYEVECTOR + 8	; 8 bytes long
HXFSTATE_OFFSET_MATERIALAMBIENT			EQU HXFSTATE_OFFSET_MATERIALEMISSIVE + 8	; 8 bytes long
HXFSTATE_OFFSET_MATERIALPOWER			EQU HXFSTATE_OFFSET_MATERIALAMBIENT + 8	

;** FOGGING
HXFSTATE_OFFSET_FOG_DENSITY				EQU HXFSTATE_OFFSET_MATERIALPOWER + 4	  ; 
HXFSTATE_OFFSET_FOG_XFORM_X				EQU HXFSTATE_OFFSET_FOG_DENSITY + 4	  ; 
HXFSTATE_OFFSET_FOG_XFORM_Y				EQU HXFSTATE_OFFSET_FOG_XFORM_X + 4	  ; 
HXFSTATE_OFFSET_FOG_XFORM_Z				EQU HXFSTATE_OFFSET_FOG_XFORM_Y + 4	  ; 
HXFSTATE_OFFSET_FOG_XFORM_W				EQU HXFSTATE_OFFSET_FOG_XFORM_Z + 4	  ; 
HXFSTATE_OFFSET_FOG_END					EQU HXFSTATE_OFFSET_FOG_XFORM_W + 4	  ; 
HXFSTATE_OFFSET_FOG_INV_RANGE			EQU HXFSTATE_OFFSET_FOG_END + 4	  ; 

;** VIEWPORT
HXFSTATE_OFFSET_VIEWPORT_XS				EQU HXFSTATE_OFFSET_FOG_INV_RANGE + 4	; Next 6 -- HFIXED Viewport[6] - MUST DWORD align
HXFSTATE_OFFSET_VIEWPORT_YS				EQU HXFSTATE_OFFSET_VIEWPORT_XS + 4
HXFSTATE_OFFSET_VIEWPORT_ZS				EQU HXFSTATE_OFFSET_VIEWPORT_YS + 4
HXFSTATE_OFFSET_VIEWPORT_XT				EQU HXFSTATE_OFFSET_VIEWPORT_ZS + 4
HXFSTATE_OFFSET_VIEWPORT_YT				EQU HXFSTATE_OFFSET_VIEWPORT_XT + 4
HXFSTATE_OFFSET_VIEWPORT_ZT				EQU HXFSTATE_OFFSET_VIEWPORT_YT + 4

;** STORAGE
HXFSTATE_OFFSET_STORAGE_VTXPOSITION_X	EQU HXFSTATE_OFFSET_VIEWPORT_ZT + 4
HXFSTATE_OFFSET_STORAGE_VTXPOSITION_Y	EQU HXFSTATE_OFFSET_STORAGE_VTXPOSITION_X + 4
HXFSTATE_OFFSET_STORAGE_VTXPOSITION_Z	EQU HXFSTATE_OFFSET_STORAGE_VTXPOSITION_Y + 4
HXFSTATE_OFFSET_STORAGE_VTXPOSITION_W	EQU HXFSTATE_OFFSET_STORAGE_VTXPOSITION_Z + 4

HXFSTATE_OFFSET_STORAGE_LR				EQU HXFSTATE_OFFSET_STORAGE_VTXPOSITION_W + 4
HXFSTATE_OFFSET_STORAGE_PAD				EQU HXFSTATE_OFFSET_STORAGE_LR + 4

;** SLAVEPORT Variables
HXFSTATE_OFFSET_SPADDR					EQU HXFSTATE_OFFSET_STORAGE_PAD  + 4
HXFSTATE_OFFSET_SPTERMADDR				EQU HXFSTATE_OFFSET_SPADDR  + 4
HXFSTATE_OFFSET_PHWSTATE				EQU HXFSTATE_OFFSET_SPTERMADDR  + 4
HXFSTATE_OFFSET_SPRESERVEDSPACE			EQU HXFSTATE_OFFSET_PHWSTATE  + 4
HXFSTATE_OFFSET_SPBASEADDR				EQU HXFSTATE_OFFSET_SPRESERVEDSPACE  + 4
HXFSTATE_OFFSET_PRIMITIVEHEADER			EQU HXFSTATE_OFFSET_SPBASEADDR  + 4
HXFSTATE_OFFSET_PRIMITIVESIZE			EQU HXFSTATE_OFFSET_PRIMITIVEHEADER  + 4
HXFSTATE_OFFSET_PSPPROC					EQU HXFSTATE_OFFSET_PRIMITIVESIZE  + 4

;** Helper Procs
HXFSTATE_OFFSET_LOADPOSITIONPROC		EQU HXFSTATE_OFFSET_PSPPROC + 4
HXFSTATE_OFFSET_LOADDIFFUSEPROC			EQU HXFSTATE_OFFSET_LOADPOSITIONPROC + 4
HXFSTATE_OFFSET_LOADSPECULARPROC		EQU HXFSTATE_OFFSET_LOADDIFFUSEPROC + 4
HXFSTATE_OFFSET_LOADNORMALPROC			EQU HXFSTATE_OFFSET_LOADSPECULARPROC +4
HXFSTATE_OFFSET_FOGPROC					EQU HXFSTATE_OFFSET_LOADNORMALPROC +4
HXFSTATE_OFFSET_LOADTEX1PROC			EQU HXFSTATE_OFFSET_FOGPROC +4
HXFSTATE_OFFSET_LOADTEX2PROC			EQU HXFSTATE_OFFSET_LOADTEX1PROC +4

;** CLIPPING RELATED VARIABLES.
HXFSTATE_OFFSET_NUMCLIPPEDPRIMITIVES	EQU HXFSTATE_OFFSET_LOADTEX2PROC + 4
HXFSTATE_OFFSET_NUMCLIPPEDVERTICES		EQU HXFSTATE_OFFSET_NUMCLIPPEDPRIMITIVES  + 4
HXFSTATE_OFFSET_PCLIPPEDINDICES			EQU HXFSTATE_OFFSET_NUMCLIPPEDVERTICES + 4 
HXFSTATE_OFFSET_PCLIPPEDVERTICES		EQU HXFSTATE_OFFSET_PCLIPPEDINDICES  + 4
HXFSTATE_OFFSET_PCLIPSEGMENTS			EQU HXFSTATE_OFFSET_PCLIPPEDVERTICES  + 4

;** BUFFERS
; Not exposed


;* ************************************************************************* *
;* ************************************************************************* **
;  HXFLIGHT - ASM INTERFACE
;* ************************************************************************* **
;* ************************************************************************* *
HXFLIGHT_OFFSET_POSITION		EQU 0
HXFLIGHT_OFFSET_DIRECTION		EQU HXFLIGHT_OFFSET_POSITION + 16

HXFLIGHT_OFFSET_AMBIENT			EQU HXFLIGHT_OFFSET_DIRECTION + 8
HXFLIGHT_OFFSET_DIFFUSE			EQU HXFLIGHT_OFFSET_AMBIENT + 8	
HXFLIGHT_OFFSET_SPECULAR		EQU HXFLIGHT_OFFSET_DIFFUSE + 8

HXFLIGHT_OFFSET_SPOTCUTOFF		EQU HXFLIGHT_OFFSET_SPECULAR + 8
HXFLIGHT_OFFSET_SPOTEXPONENT		EQU HXFLIGHT_OFFSET_SPOTCUTOFF + 4

HXFLIGHT_OFFSET_ATTENUATIONCONSTANT	EQU HXFLIGHT_OFFSET_SPOTEXPONENT + 4
HXFLIGHT_OFFSET_ATTENUATIONLINEAR	EQU HXFLIGHT_OFFSET_ATTENUATIONCONSTANT + 4
HXFLIGHT_OFFSET_ATTENUATIONQUADRATIC	EQU HXFLIGHT_OFFSET_ATTENUATIONLINEAR + 4	

HXFLIGHT_OFFSET_PROC			EQU HXFLIGHT_OFFSET_ATTENUATIONQUADRATIC + 4
HXFLIGHT_OFFSET_PNEXT			EQU HXFLIGHT_OFFSET_PROC + 4
HXFLIGHT_OFFSET_PAD				EQU HXFLIGHT_OFFSET_PNEXT + 4

;* ************************************************************************* *
;* ************************************************************************* **
;  HXFPACKEDMATRIX - ASM INTERFACE
;* ************************************************************************* **
;* ************************************************************************* *
HXFMATRIX_SIZE					   EQU 64

TEXTURE_MATRIX_1_OFFSET EQU	HXFMATRIX_SIZE
TEXTURE_MATRIX_2_OFFSET EQU	TEXTURE_MATRIX_1_OFFSET + HXFMATRIX_SIZE


;** ************************************************************************ **
;**	MACROS - Macros needed in a number of different assembly files.
;** ************************************************************************ **

;** ************************************************************************ **
;**	Count the trailing zeros of a 32-bit unsigned number.
;** Note!! This macro can be called with $res == $num 
	MACRO
	HXF_CTZ	$res, $num, $tmp
        	sub		$tmp, $num, #1
        	mvn     $res, $num			; TZcount = 32 - CLZ( (~num) & (num - 1) )
        	and		$res, $res, $tmp
        	clz     $res, $res
        	rsb     $res, $res, #32
	MEND

;** ************************************************************************ **
;**	Divider macro, 3 cycles,  generates 1 bit result. 
;** Expects numerator and denominator to have there first bits
;** aligned in the 31 bit offset(the leftmost bit). 
;** generate results to the 31st
	MACRO
	HXF_ONEBITDIVIDE $bit, $num, $den, $res
	subs   $num,  $num,  $den,  lsr #(31-$bit)
	orrhs  $res,  $res,  #(1 << ($bit))
	addlo  $num, $num, $den, lsr #(31-$bit)
	MEND

;** ************************************************************************ **
;** Macro to perform a Signed CLZ.
	MACRO
	HXF_SIGNED_CLZ $res, $src
	movs	$res, $src
	rsblt	$res, $res, #0
	clz		$res, $res
	MEND

;** ************************************************************************ **
;** Macro to convert a Fat Float to IEEE float
;** FIXME Normalize Mantissa? Clamp Exponent?
	MACRO
	HXF_FFToF $f, $m, $e, $tmp, $l
;$l HXF_FFToF $f, $m, $e ; This syntax is broken always evals to ""
	mov $f, #0
	cmp $m, #0
	beq $l.HXF_FFToF_End
	
	; Sign
	rsblt $m, $m, #0
	orrlt $f, $f, #0x80000000

	; normalize mantissa
	clz $tmp, $m
	subs $tmp, $tmp, #8
	sub $e, $e, $tmp
	movge $m, $m, lsl $tmp ; shift into position
	rsblt $tmp, $tmp, #0   ; make shift value positive
	movlt $m, $m, asr $tmp 
	eor $m, $m, #0x00800000 ; remove implied bit
	orr $f, $f, $m			; Pack in mantissa

	; Exponent
	add $e, $e, #127
	orr $f, $f, $e, lsl #23  ; put the exp in the proper place

$l.HXF_FFToF_End
	MEND

;** ************************************************************************ **

⌨️ 快捷键说明

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