📄 hxfstate.inc
字号:
;/* ************************************************************************* *\
;** 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 + -