diff options
| author | bushing <bushing@gmail.com> | 2008-12-08 04:46:09 +0000 |
|---|---|---|
| committer | bushing <bushing@gmail.com> | 2008-12-08 04:46:09 +0000 |
| commit | 30c883bcfc65761dc9fb61fea16a25fb61a7e220 (patch) | |
| tree | f0e77927cfb598e860faf386c7c8089c38a9b726 /Source/Core/VideoCommon | |
| parent | e6fe5ec42f025a710918c1aaf8643da36a13bb3e (diff) | |
set svn:eol-style=native for **.h
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1438 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/VideoCommon')
| -rw-r--r-- | Source/Core/VideoCommon/Src/BPMemory.h | 1680 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/CPMemory.h | 522 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/DataReader.h | 152 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/Fifo.h | 70 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/LookUpTables.h | 68 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/NativeVertexFormat.h | 210 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/OpcodeDecoding.h | 102 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/PixelShader.h | 88 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/Profiler.h | 156 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/Statistics.h | 160 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/TextureDecoder.h | 170 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/VertexShader.h | 102 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/VideoState.h | 52 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/XFBConvert.h | 62 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/XFMemory.h | 408 |
15 files changed, 2001 insertions, 2001 deletions
diff --git a/Source/Core/VideoCommon/Src/BPMemory.h b/Source/Core/VideoCommon/Src/BPMemory.h index 06c48d9351..de2e68ef88 100644 --- a/Source/Core/VideoCommon/Src/BPMemory.h +++ b/Source/Core/VideoCommon/Src/BPMemory.h @@ -1,840 +1,840 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef _BPMEMORY_H
-#define _BPMEMORY_H
-
-#include "Common.h"
-
-#pragma pack(4)
-
-#define BPMEM_GENMODE 0x00
-#define BPMEM_IND_MTX 0x06
-#define BPMEM_RAS1_SS0 0x25 // ind tex coord scale 0
-#define BPMEM_RAS1_SS1 0x26 // ind tex coord scale 1
-#define BPMEM_ZMODE 0x40
-#define BPMEM_BLENDMODE 0x41
-#define BPMEM_CONSTANTALPHA 0x42
-#define BPMEM_ALPHACOMPARE 0xF3
-#define BPMEM_LINEPTWIDTH 0x22
-#define BPMEM_TEXINVALIDATE 0x66
-#define BPMEM_SCISSORTL 0x20
-#define BPMEM_SCISSORBR 0x21
-#define BPMEM_SCISSOROFFSET 0x59
-#define BPMEM_CLEARBBOX1 0x55 // let's hope not many games use bboxes..
-#define BPMEM_CLEARBBOX2 0x56 // TODO(ector): add something that watches bboxes
-#define BPMEM_TEXMODE0_1 0x80
-#define BPMEM_TEXMODE0_2 0xA0
-#define BPMEM_FOGRANGE 0xE8
-#define BPMEM_FOGPARAM0 0xEE
-#define BPMEM_FOGBMAGNITUDE 0xEF
-#define BPMEM_FOGBEXPONENT 0xF0
-#define BPMEM_FOGPARAM3 0xF1
-#define BPMEM_FOGCOLOR 0xF2
-#define BPMEM_ZTEX1 0xF4
-#define BPMEM_ZTEX2 0xF5
-#define BPMEM_DRAWDONE 0x45
-
-#define BPMEM_PE_TOKEN_ID 0x47
-#define BPMEM_PE_TOKEN_INT_ID 0x48
-
-//////////////////////////////////////////////////////////////////////////
-// Tev/combiner things
-//////////////////////////////////////////////////////////////////////////
-
-#define TEVOP_ADD 0
-#define TEVOP_SUB 1
-#define TEVCMP_R8_GT 8
-#define TEVCMP_R8_EQ 9
-#define TEVCMP_GR16_GT 10
-#define TEVCMP_GR16_EQ 11
-#define TEVCMP_BGR24_GT 12
-#define TEVCMP_BGR24_EQ 13
-#define TEVCMP_RGB8_GT 14
-#define TEVCMP_RGB8_EQ 15
-#define TEVCMP_A8_GT 14
-#define TEVCMP_A8_EQ 15
-
-#define TEVCOLORARG_CPREV 0
-#define TEVCOLORARG_APREV 1
-#define TEVCOLORARG_C0 2
-#define TEVCOLORARG_A0 3
-#define TEVCOLORARG_C1 4
-#define TEVCOLORARG_A1 5
-#define TEVCOLORARG_C2 6
-#define TEVCOLORARG_A2 7
-#define TEVCOLORARG_TEXC 8
-#define TEVCOLORARG_TEXA 9
-#define TEVCOLORARG_RASC 10
-#define TEVCOLORARG_RASA 11
-#define TEVCOLORARG_ONE 12
-#define TEVCOLORARG_HALF 13
-#define TEVCOLORARG_KONST 14
-#define TEVCOLORARG_ZERO 15
-
-#define TEVALPHAARG_APREV 0
-#define TEVALPHAARG_A0 1
-#define TEVALPHAARG_A1 2
-#define TEVALPHAARG_A2 3
-#define TEVALPHAARG_TEXA 4
-#define TEVALPHAARG_RASA 5
-#define TEVALPHAARG_KONST 6
-#define TEVALPHAARG_ZERO 7
-
-#define ALPHACMP_NEVER 0
-#define ALPHACMP_LESS 1
-#define ALPHACMP_EQUAL 2
-#define ALPHACMP_LEQUAL 3
-#define ALPHACMP_GREATER 4
-#define ALPHACMP_NEQUAL 5
-#define ALPHACMP_GEQUAL 6
-#define ALPHACMP_ALWAYS 7
-
-enum Compare
-{
- COMPARE_NEVER = 0,
- COMPARE_LESS,
- COMPARE_EQUAL,
- COMPARE_LEQUAL,
- COMPARE_GREATER,
- COMPARE_NEQUAL,
- COMPARE_GEQUAL,
- COMPARE_ALWAYS
-};
-
-#define ZTEXTURE_DISABLE 0
-#define ZTEXTURE_ADD 1
-#define ZTEXTURE_REPLACE 2
-
-enum TevBias
-{
- TB_ZERO = 0,
- TB_ADDHALF = 1,
- TB_SUBHALF = 2,
- TB_COMPARE = 3,
-};
-
-enum AlphaOp
-{
- ALPHAOP_AND = 0,
- ALPHAOP_OR,
- ALPHAOP_XOR,
- ALPHAOP_XNOR,
-};
-
-union IND_MTXA
-{
- struct
- {
- signed ma : 11;
- signed mb : 11;
- unsigned s0 : 2; // bits 0-1 of scale factor
- unsigned rid : 8;
- };
- u32 hex;
-};
-
-union IND_MTXB
-{
- struct
- {
- signed mc : 11;
- signed md : 11;
- unsigned s1 : 2; // bits 2-3 of scale factor
- unsigned rid : 8;
- };
- u32 hex;
-};
-
-union IND_MTXC
-{
- struct
- {
- signed me : 11;
- signed mf : 11;
- unsigned s2 : 2; // bits 4-5 of scale factor
- unsigned rid : 8;
- };
- u32 hex;
-};
-
-struct IND_MTX
-{
- IND_MTXA col0;
- IND_MTXB col1;
- IND_MTXC col2;
-};
-
-union IND_IMASK
-{
- struct
- {
- unsigned mask : 24;
- unsigned rid : 8;
- };
- u32 hex;
-};
-
-#define TEVSELCC_CPREV 0
-#define TEVSELCC_APREV 1
-#define TEVSELCC_C0 2
-#define TEVSELCC_A0 3
-#define TEVSELCC_C1 4
-#define TEVSELCC_A1 5
-#define TEVSELCC_C2 6
-#define TEVSELCC_A2 7
-#define TEVSELCC_TEXC 8
-#define TEVSELCC_TEXA 9
-#define TEVSELCC_RASC 10
-#define TEVSELCC_RASA 11
-#define TEVSELCC_ONE 12
-#define TEVSELCC_HALF 13
-#define TEVSELCC_KONST 14
-#define TEVSELCC_ZERO 15
-
-#define TEVSELCA_APREV 0
-#define TEVSELCA_A0 1
-#define TEVSELCA_A1 2
-#define TEVSELCA_A2 3
-#define TEVSELCA_TEXA 4
-#define TEVSELCA_RASA 5
-#define TEVSELCA_KONST 6
-#define TEVSELCA_ZERO 7
-
-struct TevStageCombiner
-{
- union ColorCombiner
- {
- struct //abc=8bit,d=10bit
- {
- unsigned d : 4; // TEVSELCC_X
- unsigned c : 4; // TEVSELCC_X
- unsigned b : 4; // TEVSELCC_X
- unsigned a : 4; // TEVSELCC_X
-
- unsigned bias : 2;
- unsigned op : 1;
- unsigned clamp : 1;
-
- unsigned shift : 2;
- unsigned dest : 2; //1,2,3
-
- };
- u32 hex;
- };
- union AlphaCombiner
- {
- struct
- {
- unsigned rswap : 2;
- unsigned tswap : 2;
- unsigned d : 3; // TEVSELCA_
- unsigned c : 3; // TEVSELCA_
- unsigned b : 3; // TEVSELCA_
- unsigned a : 3; // TEVSELCA_
-
- unsigned bias : 2; //GXTevBias
- unsigned op : 1;
- unsigned clamp : 1;
-
- unsigned shift : 2;
- unsigned dest : 2; //1,2,3
- };
- u32 hex;
- };
-
- ColorCombiner colorC;
- AlphaCombiner alphaC;
-};
-
-#define ITF_8 0
-#define ITF_5 1
-#define ITF_4 2
-#define ITF_3 3
-
-#define ITB_NONE 0
-#define ITB_S 1
-#define ITB_T 2
-#define ITB_ST 3
-#define ITB_U 4
-#define ITB_SU 5
-#define ITB_TU 6
-#define ITB_STU 7
-
-#define ITBA_OFF 0
-#define ITBA_S 1
-#define ITBA_T 2
-#define ITBA_U 3
-
-#define ITW_OFF 0
-#define ITW_256 1
-#define ITW_128 2
-#define ITW_64 3
-#define ITW_32 4
-#define ITW_16 5
-#define ITW_0 6
-
-// several discoveries:
-// GXSetTevIndBumpST(tevstage, indstage, matrixind)
-// if( matrix == 2 ) realmat = 6; // 10
-// else if( matrix == 3 ) realmat = 7; // 11
-// else if( matrix == 1 ) realmat = 5; // 9
-// GXSetTevIndirect(tevstage, indstage, 0, 3, realmat, 6, 6, 0, 0, 0)
-// GXSetTevIndirect(tevstage+1, indstage, 0, 3, realmat+4, 6, 6, 1, 0, 0)
-// GXSetTevIndirect(tevstage+2, indstage, 0, 0, 0, 0, 0, 1, 0, 0)
-
-union TevStageIndirect
-{
- // if mid, sw, tw, and addprev are 0, then no indirect stage is used, mask = 0x17fe00
- struct
- {
- unsigned bt : 2; // indirect tex stage ID
- unsigned fmt : 2; // format: ITF_X
- unsigned bias : 3; // ITB_X
- unsigned bs : 2; // ITBA_X, indicates which coordinate will become the 'bump alpha'
- unsigned mid : 4; // matrix id to multiply offsets with
- unsigned sw : 3; // ITW_X, wrapping factor for S of regular coord
- unsigned tw : 3; // ITW_X, wrapping factor for T of regular coord
- unsigned lb_utclod : 1; // use modified or unmodified texture coordinates for LOD computation
- unsigned fb_addprev : 1; // 1 if the texture coordinate results from the previous TEV stage should be added
- unsigned pad0 : 3;
- unsigned rid : 8;
- };
- struct
- {
- u32 hex : 21;
- u32 unused : 11;
- };
-
- bool IsActive() { return (hex&0x17fe00)!=0; }
-};
-
-union TwoTevStageOrders
-{
- struct
- {
- unsigned texmap0 : 3; // indirect tex stage texmap
- unsigned texcoord0 : 3;
- unsigned enable0 : 1; // 1 if should read from texture
- unsigned colorchan0 : 3; // RAS1_CC_X
-
- unsigned pad0 : 2;
-
- unsigned texmap1 : 3;
- unsigned texcoord1 : 3;
- unsigned enable1 : 1; // 1 if should read from texture
- unsigned colorchan1 : 3; // RAS1_CC_X
-
- unsigned pad1 : 2;
- unsigned rid : 8;
- };
- u32 hex;
- int getTexMap(int i){return i?texmap1:texmap0;}
- int getTexCoord(int i){return i?texcoord1:texcoord0;}
- int getEnable(int i){return i?enable1:enable0;}
- int getColorChan(int i){return i?colorchan1:colorchan0;}
-};
-
-union TEXSCALE
-{
- struct
- {
- unsigned ss0 : 4; // indirect tex stage 0, 2^(-ss0)
- unsigned ts0 : 4; // indirect tex stage 0
- unsigned ss1 : 4; // indirect tex stage 1
- unsigned ts1 : 4; // indirect tex stage 1
- unsigned pad : 8;
- unsigned rid : 8;
- };
- u32 hex;
-
- float getScaleS(int i){return 1.0f/(float)(1<<(i?ss1:ss0));}
- float getScaleT(int i){return 1.0f/(float)(1<<(i?ts1:ts0));}
-};
-
-union RAS1_IREF
-{
- struct
- {
- unsigned bi0 : 3; // indirect tex stage 0 ntexmap
- unsigned bc0 : 3; // indirect tex stage 0 ntexcoord
- unsigned bi1 : 3;
- unsigned bc1 : 3;
- unsigned bi2 : 3;
- unsigned bc3 : 3;
- unsigned bi4 : 3;
- unsigned bc4 : 3;
- unsigned rid : 8;
- };
- u32 hex;
-
- u32 getTexCoord(int i) { return (hex>>(6*i+3))&3; }
- u32 getTexMap(int i) { return (hex>>(6*i))&3; }
-};
-
-//////////////////////////////////////////////////////////////////////////
-// Texture structs
-//////////////////////////////////////////////////////////////////////////
-union TexMode0
-{
- struct
- {
- unsigned wrap_s : 2;
- unsigned wrap_t : 2;
- unsigned mag_filter : 1;
- unsigned min_filter : 3;
- unsigned diag_lod : 1;
- signed lod_bias : 10;
- unsigned max_aniso : 2;
- unsigned lod_clamp : 1;
- };
- u32 hex;
-};
-union TexMode1
-{
- struct
- {
- unsigned min_lod : 8;
- unsigned max_lod : 8;
- };
- u32 hex;
-};
-union TexImage0
-{
- struct
- {
- unsigned width : 10; //actually w-1
- unsigned height : 10; //actually h-1
- unsigned format : 4;
- };
- u32 hex;
-};
-union TexImage1
-{
- struct
- {
- unsigned tmem_offset : 15; // we ignore texture caching for now, we do it ourselves
- unsigned cache_width : 3;
- unsigned cache_height : 3;
- unsigned image_type : 1;
- };
- u32 hex;
-};
-
-union TexImage2
-{
- struct
- {
- unsigned tmem_offset : 15; // we ignore texture caching for now, we do it ourselves
- unsigned cache_width : 3;
- unsigned cache_height : 3;
- };
- u32 hex;
-};
-
-union TexImage3
-{
- struct
- {
- unsigned image_base: 24; //address in memory >> 5 (was 20 for GC)
- };
- u32 hex;
-};
-union TexTLUT
-{
- struct
- {
- unsigned tmem_offset : 10;
- unsigned tlut_format : 2;
- };
- u32 hex;
-};
-
-union ZTex1
-{
- struct
- {
- unsigned bias : 24;
- };
- u32 hex;
-};
-
-union ZTex2
-{
- struct
- {
- unsigned type : 2; // TEV_Z_TYPE_X
- unsigned op : 2; // GXZTexOp
- };
- u32 hex;
-};
-
-// Z-texture types (formats)
-#define TEV_ZTEX_TYPE_U8 0
-#define TEV_ZTEX_TYPE_U16 1
-#define TEV_ZTEX_TYPE_U24 2
-
-#define TEV_ZTEX_DISABLE 0
-#define TEV_ZTEX_ADD 1
-#define TEV_ZTEX_REPLACE 2
-
-
-struct FourTexUnits
-{
- TexMode0 texMode0[4];
- TexMode1 texMode1[4];
- TexImage0 texImage0[4];
- TexImage1 texImage1[4];
- TexImage2 texImage2[4];
- TexImage3 texImage3[4];
- TexTLUT texTlut[4];
- u32 unknown[4];
-};
-
-
-//////////////////////////////////////////////////////////////////////////
-// Geometry/other structs
-//////////////////////////////////////////////////////////////////////////
-union GenMode
-{
- struct
- {
- unsigned numtexgens : 4; // 0xF
- unsigned numcolchans : 5; // 0x1E0
- unsigned ms_en : 1; // 0x200
- unsigned numtevstages : 4; // 0x3C00
- unsigned cullmode : 2; // 0xC000
- unsigned numindstages : 3; // 0x30000
- unsigned zfreeze : 5; //0x3C0000
- };
- u32 hex;
-};
-
-union LPSize
-{
- struct
- {
- unsigned linesize : 8; // in 1/6th pixels
- unsigned pointsize : 8; // in 1/6th pixels
- unsigned lineoff : 3;
- unsigned pointoff : 3;
- unsigned lineaspect : 1;
- unsigned padding : 1;
- };
- u32 hex;
-};
-
-
-union X12Y12
-{
- struct
- {
- unsigned y : 12;
- unsigned x : 12;
- };
- u32 hex;
-};
-union X10Y10
-{
- struct
- {
- unsigned x : 10;
- unsigned y : 10;
- };
- u32 hex;
-};
-
-//////////////////////////////////////////////////////////////////////////
-// Framebuffer/pixel stuff (incl fog)
-//////////////////////////////////////////////////////////////////////////
-union BlendMode
-{
- struct
- {
- unsigned blendenable : 1;
- unsigned logicopenable : 1;
- unsigned dither : 1;
- unsigned colorupdate : 1;
- unsigned alphaupdate : 1;
- unsigned dstfactor : 3; //BLEND_ONE, BLEND_INV_SRc etc
- unsigned srcfactor : 3;
- unsigned subtract : 1;
- unsigned logicmode : 4;
- };
- u32 hex;
-};
-
-
-union FogParam0
-{
- struct
- {
- unsigned mantissa : 11;
- unsigned exponent : 8;
- unsigned sign : 1;
- };
-
- float GetA() {
- union { u32 i; float f; } dummy;
- dummy.i = ((u32)sign<<31)|((u32)exponent<<23)|((u32)mantissa<<12);
- return dummy.f;
- }
-
- u32 hex;
-};
-
-union FogParam3
-{
- struct
- {
- unsigned c_mant : 11;
- unsigned c_exp : 8;
- unsigned c_sign : 1;
- unsigned proj : 1; // 0 - perspective, 1 - orthographic
- unsigned fsel : 3; // 0 - off, 2 - linear, 4 - exp, 5 - exp2, 6 - backward exp, 7 - backward exp2
- };
-
- // amount to subtract from eyespacez after range adjustment
- float GetC() {
- union { u32 i; float f; } dummy;
- dummy.i = ((u32)c_sign << 31) | ((u32)c_exp << 23) | ((u32)c_mant << 12);
- return dummy.f;
- }
-
- u32 hex;
-};
-
-// final eq: ze = A/(B_MAG - (Zs>>B_SHF));
-struct FogParams
-{
- FogParam0 a;
- u32 b_magnitude;
- u32 b_shift; // b's exp + 1?
- FogParam3 c_proj_fsel;
- u32 color; //0:b 8:g 16:r - nice!
-};
-
-union ZMode
-{
- struct
- {
- unsigned testenable : 1;
- unsigned func : 3;
- unsigned updateenable : 1; //size?
- };
- u32 hex;
-};
-
-union ConstantAlpha
-{
- struct
- {
- unsigned alpha : 8;
- unsigned enable : 1;
- };
- u32 hex;
-};
-
-#define PIXELFMT_RGB8_Z24 0
-#define PIXELFMT_RGBA6_Z24 1
-#define PIXELFMT_RGB565_Z16 2
-#define PIXELFMT_Z24 3
-#define PIXELFMT_Y8 4
-#define PIXELFMT_U8 5
-#define PIXELFMT_V8 6
-#define PIXELFMT_YUV420 7
-
-union PE_CONTROL
-{
- struct
- {
- unsigned pixel_format : 3; // PIXELFMT_X
- unsigned zformat : 3; // 0 - linear, 1 - near, 2 - mid, 3 - far
- unsigned zcomploc : 1; // 1: before tex stage
- unsigned unused : 17;
- unsigned rid : 8;
- };
- u32 hex;
-};
-
-//////////////////////////////////////////////////////////////////////////
-// Texture coordinate stuff
-//////////////////////////////////////////////////////////////////////////
-union TCInfo
-{
- struct
- {
- unsigned scale_minus_1 : 16;
- unsigned range_bias : 1;
- unsigned cylindric_wrap : 1;
- };
- u32 hex;
-};
-struct TCoordInfo
-{
- TCInfo s;
- TCInfo t;
-};
-
-
-union ColReg
-{
- u32 hex;
- struct
- {
- signed a : 11;
- unsigned : 1;
- signed b : 11;
- unsigned type : 1;
- };
-};
-
-struct TevReg
-{
- ColReg low;
- ColReg high;
-};
-
-union TevKSel
-{
- struct {
- unsigned swap1 : 2;
- unsigned swap2 : 2;
- unsigned kcsel0 : 5;
- unsigned kasel0 : 5;
- unsigned kcsel1 : 5;
- unsigned kasel1 : 5;
- };
- u32 hex;
-
- int getKC(int i) {return i?kcsel1:kcsel0;}
- int getKA(int i) {return i?kasel1:kasel0;}
-};
-
-union AlphaFunc
-{
- struct
- {
- unsigned ref0 : 8;
- unsigned ref1 : 8;
- unsigned comp0 : 3;
- unsigned comp1 : 3;
- unsigned logic : 2;
- };
- u32 hex;
-};
-
-union UPE_Copy
-{
- u32 Hex;
- struct
- {
- unsigned clamp0 : 1;
- unsigned clamp1 : 1;
- unsigned : 1;
- unsigned target_pixel_format : 4; // realformat is (fmt/2)+((fmt&1)*8).... for some reason the msb is the lsb
- unsigned gamma : 2;
- unsigned half_scale : 1; // real size should be 2x smaller (run a gauss filter?)
- unsigned scale_something : 1;
- unsigned clear : 1;
- unsigned frame_to_field : 2;
- unsigned copy_to_xfb : 1;
- unsigned intensity_fmt : 1; // if set, is an intensity format (I4,I8,IA4,IA8)
- unsigned : 16; // seems to set everything to 1s when target pixel format is invalid
- };
-};
-
-//////////////////////////////////////////////////////////////////////////
-// All of BP memory
-//////////////////////////////////////////////////////////////////////////
-
-struct BPMemory
-{
- GenMode genMode;
- u32 display_copy_filter[4]; //01-04
- u32 unknown; //05
- // indirect matrices (set by GXSetIndTexMtx, selected by TevStageIndirect::mid)
- // abc form a 2x3 offset matrix, there's 3 such matrices
- // the 3 offset matrices can either be indirect type, S-type, or T-type
- // 6bit scale factor s is distributed across IND_MTXA/B/C.
- // before using matrices scale by 2^-(s-17)
- IND_MTX indmtx[3];//06-0e GXSetIndTexMtx, 2x3 matrices
- IND_IMASK imask;//0f
- TevStageIndirect tevind[16];//10 GXSetTevIndirect
- X12Y12 scissorTL; //20
- X12Y12 scissorBR; //21
- LPSize lineptwidth; //22 line and point width
- u32 sucounter; //23
- u32 rascounter; //24
- TEXSCALE texscale[2]; //25-26 GXSetIndTexCoordScale
- RAS1_IREF tevindref; //27 GXSetIndTexOrder
- TwoTevStageOrders tevorders[8]; //28-2F
- TCoordInfo texcoords[8]; //0x30 s,t,s,t,s,t,s,t...
- ZMode zmode; //40
- BlendMode blendmode; //41
- ConstantAlpha dstalpha; //42
- PE_CONTROL zcontrol; //43 GXSetZCompLoc, GXPixModeSync
- u32 fieldmask; //44
- u32 drawdone; //45, bit1=1 if end of list
- u32 unknown5; //46 clock?
- u32 petoken; //47
- u32 petokenint; //48
- X10Y10 copyTexSrcXY; //49
- X10Y10 copyTexSrcWH; //4a
- u32 copyTexDest; //4b// 4b == CopyAddress (GXDispCopy and GXTexCopy use it)
- u32 unknown6; //4c
- u32 copyMipMapStrideChannels; // 4d usually set to 4 when dest is single channel, 8 when dest is 2 channel, 16 when dest is RGBA
- // also, doubles whenever mipmap box filter option is set (excent on RGBA). Probably to do with number of bytes to look at when smoothing
- u32 dispcopyyscale; //4e
- u32 clearcolorAR; //4f
- u32 clearcolorGB; //50
- u32 clearZValue; //51
- u32 triggerEFBCopy; //52
- u32 copyfilter[2]; //53,54
- u32 boundbox0;//55
- u32 boundbox1;//56
- u32 unknown7[2];//57,58
- X10Y10 scissorOffset; //59
- u32 unknown8[10]; //5a,5b,5c,5d, 5e,5f,60,61, 62, 63 (GXTexModeSync), 0x60-0x63 have to do with preloaded textures?
- u32 tlutXferSrc; //64
- u32 tlutXferDest; //65
- u32 texinvalidate;//66
- u32 metric; //67
- u32 fieldmode;//68
- u32 unknown10[7];//69-6F
- u32 unknown11[16];//70-7F
- FourTexUnits tex[2]; //80-bf
- TevStageCombiner combiners[16]; //0xC0-0xDF
- TevReg tevregs[4]; //0xE0
- u32 fogRangeAdj; //0xE8
- u32 unknown15[3]; //0xe9,0xea,0xeb - fog related
- u32 tev_range_adj_c; //0xec - screenx center for range adjustment, range adjustment enable
- u32 tev_range_adj_k; //0xed - specifies range adjustment function = sqrt(x*x+k*k)/k
- FogParams fog; //0xEE,0xEF,0xF0,0xF1,0xF2
- AlphaFunc alphaFunc; //0xF3
- ZTex1 ztex1; //0xf4,0xf5
- ZTex2 ztex2;
- TevKSel tevksel[8];//0xf6,0xf7,f8,f9,fa,fb,fc,fd
- u32 bpMask; //0xFE
- u32 unknown18; //ff
-};
-
-#pragma pack()
-
-extern BPMemory bpmem;
-
-#endif
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _BPMEMORY_H +#define _BPMEMORY_H + +#include "Common.h" + +#pragma pack(4) + +#define BPMEM_GENMODE 0x00 +#define BPMEM_IND_MTX 0x06 +#define BPMEM_RAS1_SS0 0x25 // ind tex coord scale 0 +#define BPMEM_RAS1_SS1 0x26 // ind tex coord scale 1 +#define BPMEM_ZMODE 0x40 +#define BPMEM_BLENDMODE 0x41 +#define BPMEM_CONSTANTALPHA 0x42 +#define BPMEM_ALPHACOMPARE 0xF3 +#define BPMEM_LINEPTWIDTH 0x22 +#define BPMEM_TEXINVALIDATE 0x66 +#define BPMEM_SCISSORTL 0x20 +#define BPMEM_SCISSORBR 0x21 +#define BPMEM_SCISSOROFFSET 0x59 +#define BPMEM_CLEARBBOX1 0x55 // let's hope not many games use bboxes.. +#define BPMEM_CLEARBBOX2 0x56 // TODO(ector): add something that watches bboxes +#define BPMEM_TEXMODE0_1 0x80 +#define BPMEM_TEXMODE0_2 0xA0 +#define BPMEM_FOGRANGE 0xE8 +#define BPMEM_FOGPARAM0 0xEE +#define BPMEM_FOGBMAGNITUDE 0xEF +#define BPMEM_FOGBEXPONENT 0xF0 +#define BPMEM_FOGPARAM3 0xF1 +#define BPMEM_FOGCOLOR 0xF2 +#define BPMEM_ZTEX1 0xF4 +#define BPMEM_ZTEX2 0xF5 +#define BPMEM_DRAWDONE 0x45 + +#define BPMEM_PE_TOKEN_ID 0x47 +#define BPMEM_PE_TOKEN_INT_ID 0x48 + +////////////////////////////////////////////////////////////////////////// +// Tev/combiner things +////////////////////////////////////////////////////////////////////////// + +#define TEVOP_ADD 0 +#define TEVOP_SUB 1 +#define TEVCMP_R8_GT 8 +#define TEVCMP_R8_EQ 9 +#define TEVCMP_GR16_GT 10 +#define TEVCMP_GR16_EQ 11 +#define TEVCMP_BGR24_GT 12 +#define TEVCMP_BGR24_EQ 13 +#define TEVCMP_RGB8_GT 14 +#define TEVCMP_RGB8_EQ 15 +#define TEVCMP_A8_GT 14 +#define TEVCMP_A8_EQ 15 + +#define TEVCOLORARG_CPREV 0 +#define TEVCOLORARG_APREV 1 +#define TEVCOLORARG_C0 2 +#define TEVCOLORARG_A0 3 +#define TEVCOLORARG_C1 4 +#define TEVCOLORARG_A1 5 +#define TEVCOLORARG_C2 6 +#define TEVCOLORARG_A2 7 +#define TEVCOLORARG_TEXC 8 +#define TEVCOLORARG_TEXA 9 +#define TEVCOLORARG_RASC 10 +#define TEVCOLORARG_RASA 11 +#define TEVCOLORARG_ONE 12 +#define TEVCOLORARG_HALF 13 +#define TEVCOLORARG_KONST 14 +#define TEVCOLORARG_ZERO 15 + +#define TEVALPHAARG_APREV 0 +#define TEVALPHAARG_A0 1 +#define TEVALPHAARG_A1 2 +#define TEVALPHAARG_A2 3 +#define TEVALPHAARG_TEXA 4 +#define TEVALPHAARG_RASA 5 +#define TEVALPHAARG_KONST 6 +#define TEVALPHAARG_ZERO 7 + +#define ALPHACMP_NEVER 0 +#define ALPHACMP_LESS 1 +#define ALPHACMP_EQUAL 2 +#define ALPHACMP_LEQUAL 3 +#define ALPHACMP_GREATER 4 +#define ALPHACMP_NEQUAL 5 +#define ALPHACMP_GEQUAL 6 +#define ALPHACMP_ALWAYS 7 + +enum Compare +{ + COMPARE_NEVER = 0, + COMPARE_LESS, + COMPARE_EQUAL, + COMPARE_LEQUAL, + COMPARE_GREATER, + COMPARE_NEQUAL, + COMPARE_GEQUAL, + COMPARE_ALWAYS +}; + +#define ZTEXTURE_DISABLE 0 +#define ZTEXTURE_ADD 1 +#define ZTEXTURE_REPLACE 2 + +enum TevBias +{ + TB_ZERO = 0, + TB_ADDHALF = 1, + TB_SUBHALF = 2, + TB_COMPARE = 3, +}; + +enum AlphaOp +{ + ALPHAOP_AND = 0, + ALPHAOP_OR, + ALPHAOP_XOR, + ALPHAOP_XNOR, +}; + +union IND_MTXA +{ + struct + { + signed ma : 11; + signed mb : 11; + unsigned s0 : 2; // bits 0-1 of scale factor + unsigned rid : 8; + }; + u32 hex; +}; + +union IND_MTXB +{ + struct + { + signed mc : 11; + signed md : 11; + unsigned s1 : 2; // bits 2-3 of scale factor + unsigned rid : 8; + }; + u32 hex; +}; + +union IND_MTXC +{ + struct + { + signed me : 11; + signed mf : 11; + unsigned s2 : 2; // bits 4-5 of scale factor + unsigned rid : 8; + }; + u32 hex; +}; + +struct IND_MTX +{ + IND_MTXA col0; + IND_MTXB col1; + IND_MTXC col2; +}; + +union IND_IMASK +{ + struct + { + unsigned mask : 24; + unsigned rid : 8; + }; + u32 hex; +}; + +#define TEVSELCC_CPREV 0 +#define TEVSELCC_APREV 1 +#define TEVSELCC_C0 2 +#define TEVSELCC_A0 3 +#define TEVSELCC_C1 4 +#define TEVSELCC_A1 5 +#define TEVSELCC_C2 6 +#define TEVSELCC_A2 7 +#define TEVSELCC_TEXC 8 +#define TEVSELCC_TEXA 9 +#define TEVSELCC_RASC 10 +#define TEVSELCC_RASA 11 +#define TEVSELCC_ONE 12 +#define TEVSELCC_HALF 13 +#define TEVSELCC_KONST 14 +#define TEVSELCC_ZERO 15 + +#define TEVSELCA_APREV 0 +#define TEVSELCA_A0 1 +#define TEVSELCA_A1 2 +#define TEVSELCA_A2 3 +#define TEVSELCA_TEXA 4 +#define TEVSELCA_RASA 5 +#define TEVSELCA_KONST 6 +#define TEVSELCA_ZERO 7 + +struct TevStageCombiner +{ + union ColorCombiner + { + struct //abc=8bit,d=10bit + { + unsigned d : 4; // TEVSELCC_X + unsigned c : 4; // TEVSELCC_X + unsigned b : 4; // TEVSELCC_X + unsigned a : 4; // TEVSELCC_X + + unsigned bias : 2; + unsigned op : 1; + unsigned clamp : 1; + + unsigned shift : 2; + unsigned dest : 2; //1,2,3 + + }; + u32 hex; + }; + union AlphaCombiner + { + struct + { + unsigned rswap : 2; + unsigned tswap : 2; + unsigned d : 3; // TEVSELCA_ + unsigned c : 3; // TEVSELCA_ + unsigned b : 3; // TEVSELCA_ + unsigned a : 3; // TEVSELCA_ + + unsigned bias : 2; //GXTevBias + unsigned op : 1; + unsigned clamp : 1; + + unsigned shift : 2; + unsigned dest : 2; //1,2,3 + }; + u32 hex; + }; + + ColorCombiner colorC; + AlphaCombiner alphaC; +}; + +#define ITF_8 0 +#define ITF_5 1 +#define ITF_4 2 +#define ITF_3 3 + +#define ITB_NONE 0 +#define ITB_S 1 +#define ITB_T 2 +#define ITB_ST 3 +#define ITB_U 4 +#define ITB_SU 5 +#define ITB_TU 6 +#define ITB_STU 7 + +#define ITBA_OFF 0 +#define ITBA_S 1 +#define ITBA_T 2 +#define ITBA_U 3 + +#define ITW_OFF 0 +#define ITW_256 1 +#define ITW_128 2 +#define ITW_64 3 +#define ITW_32 4 +#define ITW_16 5 +#define ITW_0 6 + +// several discoveries: +// GXSetTevIndBumpST(tevstage, indstage, matrixind) +// if( matrix == 2 ) realmat = 6; // 10 +// else if( matrix == 3 ) realmat = 7; // 11 +// else if( matrix == 1 ) realmat = 5; // 9 +// GXSetTevIndirect(tevstage, indstage, 0, 3, realmat, 6, 6, 0, 0, 0) +// GXSetTevIndirect(tevstage+1, indstage, 0, 3, realmat+4, 6, 6, 1, 0, 0) +// GXSetTevIndirect(tevstage+2, indstage, 0, 0, 0, 0, 0, 1, 0, 0) + +union TevStageIndirect +{ + // if mid, sw, tw, and addprev are 0, then no indirect stage is used, mask = 0x17fe00 + struct + { + unsigned bt : 2; // indirect tex stage ID + unsigned fmt : 2; // format: ITF_X + unsigned bias : 3; // ITB_X + unsigned bs : 2; // ITBA_X, indicates which coordinate will become the 'bump alpha' + unsigned mid : 4; // matrix id to multiply offsets with + unsigned sw : 3; // ITW_X, wrapping factor for S of regular coord + unsigned tw : 3; // ITW_X, wrapping factor for T of regular coord + unsigned lb_utclod : 1; // use modified or unmodified texture coordinates for LOD computation + unsigned fb_addprev : 1; // 1 if the texture coordinate results from the previous TEV stage should be added + unsigned pad0 : 3; + unsigned rid : 8; + }; + struct + { + u32 hex : 21; + u32 unused : 11; + }; + + bool IsActive() { return (hex&0x17fe00)!=0; } +}; + +union TwoTevStageOrders +{ + struct + { + unsigned texmap0 : 3; // indirect tex stage texmap + unsigned texcoord0 : 3; + unsigned enable0 : 1; // 1 if should read from texture + unsigned colorchan0 : 3; // RAS1_CC_X + + unsigned pad0 : 2; + + unsigned texmap1 : 3; + unsigned texcoord1 : 3; + unsigned enable1 : 1; // 1 if should read from texture + unsigned colorchan1 : 3; // RAS1_CC_X + + unsigned pad1 : 2; + unsigned rid : 8; + }; + u32 hex; + int getTexMap(int i){return i?texmap1:texmap0;} + int getTexCoord(int i){return i?texcoord1:texcoord0;} + int getEnable(int i){return i?enable1:enable0;} + int getColorChan(int i){return i?colorchan1:colorchan0;} +}; + +union TEXSCALE +{ + struct + { + unsigned ss0 : 4; // indirect tex stage 0, 2^(-ss0) + unsigned ts0 : 4; // indirect tex stage 0 + unsigned ss1 : 4; // indirect tex stage 1 + unsigned ts1 : 4; // indirect tex stage 1 + unsigned pad : 8; + unsigned rid : 8; + }; + u32 hex; + + float getScaleS(int i){return 1.0f/(float)(1<<(i?ss1:ss0));} + float getScaleT(int i){return 1.0f/(float)(1<<(i?ts1:ts0));} +}; + +union RAS1_IREF +{ + struct + { + unsigned bi0 : 3; // indirect tex stage 0 ntexmap + unsigned bc0 : 3; // indirect tex stage 0 ntexcoord + unsigned bi1 : 3; + unsigned bc1 : 3; + unsigned bi2 : 3; + unsigned bc3 : 3; + unsigned bi4 : 3; + unsigned bc4 : 3; + unsigned rid : 8; + }; + u32 hex; + + u32 getTexCoord(int i) { return (hex>>(6*i+3))&3; } + u32 getTexMap(int i) { return (hex>>(6*i))&3; } +}; + +////////////////////////////////////////////////////////////////////////// +// Texture structs +////////////////////////////////////////////////////////////////////////// +union TexMode0 +{ + struct + { + unsigned wrap_s : 2; + unsigned wrap_t : 2; + unsigned mag_filter : 1; + unsigned min_filter : 3; + unsigned diag_lod : 1; + signed lod_bias : 10; + unsigned max_aniso : 2; + unsigned lod_clamp : 1; + }; + u32 hex; +}; +union TexMode1 +{ + struct + { + unsigned min_lod : 8; + unsigned max_lod : 8; + }; + u32 hex; +}; +union TexImage0 +{ + struct + { + unsigned width : 10; //actually w-1 + unsigned height : 10; //actually h-1 + unsigned format : 4; + }; + u32 hex; +}; +union TexImage1 +{ + struct + { + unsigned tmem_offset : 15; // we ignore texture caching for now, we do it ourselves + unsigned cache_width : 3; + unsigned cache_height : 3; + unsigned image_type : 1; + }; + u32 hex; +}; + +union TexImage2 +{ + struct + { + unsigned tmem_offset : 15; // we ignore texture caching for now, we do it ourselves + unsigned cache_width : 3; + unsigned cache_height : 3; + }; + u32 hex; +}; + +union TexImage3 +{ + struct + { + unsigned image_base: 24; //address in memory >> 5 (was 20 for GC) + }; + u32 hex; +}; +union TexTLUT +{ + struct + { + unsigned tmem_offset : 10; + unsigned tlut_format : 2; + }; + u32 hex; +}; + +union ZTex1 +{ + struct + { + unsigned bias : 24; + }; + u32 hex; +}; + +union ZTex2 +{ + struct + { + unsigned type : 2; // TEV_Z_TYPE_X + unsigned op : 2; // GXZTexOp + }; + u32 hex; +}; + +// Z-texture types (formats) +#define TEV_ZTEX_TYPE_U8 0 +#define TEV_ZTEX_TYPE_U16 1 +#define TEV_ZTEX_TYPE_U24 2 + +#define TEV_ZTEX_DISABLE 0 +#define TEV_ZTEX_ADD 1 +#define TEV_ZTEX_REPLACE 2 + + +struct FourTexUnits +{ + TexMode0 texMode0[4]; + TexMode1 texMode1[4]; + TexImage0 texImage0[4]; + TexImage1 texImage1[4]; + TexImage2 texImage2[4]; + TexImage3 texImage3[4]; + TexTLUT texTlut[4]; + u32 unknown[4]; +}; + + +////////////////////////////////////////////////////////////////////////// +// Geometry/other structs +////////////////////////////////////////////////////////////////////////// +union GenMode +{ + struct + { + unsigned numtexgens : 4; // 0xF + unsigned numcolchans : 5; // 0x1E0 + unsigned ms_en : 1; // 0x200 + unsigned numtevstages : 4; // 0x3C00 + unsigned cullmode : 2; // 0xC000 + unsigned numindstages : 3; // 0x30000 + unsigned zfreeze : 5; //0x3C0000 + }; + u32 hex; +}; + +union LPSize +{ + struct + { + unsigned linesize : 8; // in 1/6th pixels + unsigned pointsize : 8; // in 1/6th pixels + unsigned lineoff : 3; + unsigned pointoff : 3; + unsigned lineaspect : 1; + unsigned padding : 1; + }; + u32 hex; +}; + + +union X12Y12 +{ + struct + { + unsigned y : 12; + unsigned x : 12; + }; + u32 hex; +}; +union X10Y10 +{ + struct + { + unsigned x : 10; + unsigned y : 10; + }; + u32 hex; +}; + +////////////////////////////////////////////////////////////////////////// +// Framebuffer/pixel stuff (incl fog) +////////////////////////////////////////////////////////////////////////// +union BlendMode +{ + struct + { + unsigned blendenable : 1; + unsigned logicopenable : 1; + unsigned dither : 1; + unsigned colorupdate : 1; + unsigned alphaupdate : 1; + unsigned dstfactor : 3; //BLEND_ONE, BLEND_INV_SRc etc + unsigned srcfactor : 3; + unsigned subtract : 1; + unsigned logicmode : 4; + }; + u32 hex; +}; + + +union FogParam0 +{ + struct + { + unsigned mantissa : 11; + unsigned exponent : 8; + unsigned sign : 1; + }; + + float GetA() { + union { u32 i; float f; } dummy; + dummy.i = ((u32)sign<<31)|((u32)exponent<<23)|((u32)mantissa<<12); + return dummy.f; + } + + u32 hex; +}; + +union FogParam3 +{ + struct + { + unsigned c_mant : 11; + unsigned c_exp : 8; + unsigned c_sign : 1; + unsigned proj : 1; // 0 - perspective, 1 - orthographic + unsigned fsel : 3; // 0 - off, 2 - linear, 4 - exp, 5 - exp2, 6 - backward exp, 7 - backward exp2 + }; + + // amount to subtract from eyespacez after range adjustment + float GetC() { + union { u32 i; float f; } dummy; + dummy.i = ((u32)c_sign << 31) | ((u32)c_exp << 23) | ((u32)c_mant << 12); + return dummy.f; + } + + u32 hex; +}; + +// final eq: ze = A/(B_MAG - (Zs>>B_SHF)); +struct FogParams +{ + FogParam0 a; + u32 b_magnitude; + u32 b_shift; // b's exp + 1? + FogParam3 c_proj_fsel; + u32 color; //0:b 8:g 16:r - nice! +}; + +union ZMode +{ + struct + { + unsigned testenable : 1; + unsigned func : 3; + unsigned updateenable : 1; //size? + }; + u32 hex; +}; + +union ConstantAlpha +{ + struct + { + unsigned alpha : 8; + unsigned enable : 1; + }; + u32 hex; +}; + +#define PIXELFMT_RGB8_Z24 0 +#define PIXELFMT_RGBA6_Z24 1 +#define PIXELFMT_RGB565_Z16 2 +#define PIXELFMT_Z24 3 +#define PIXELFMT_Y8 4 +#define PIXELFMT_U8 5 +#define PIXELFMT_V8 6 +#define PIXELFMT_YUV420 7 + +union PE_CONTROL +{ + struct + { + unsigned pixel_format : 3; // PIXELFMT_X + unsigned zformat : 3; // 0 - linear, 1 - near, 2 - mid, 3 - far + unsigned zcomploc : 1; // 1: before tex stage + unsigned unused : 17; + unsigned rid : 8; + }; + u32 hex; +}; + +////////////////////////////////////////////////////////////////////////// +// Texture coordinate stuff +////////////////////////////////////////////////////////////////////////// +union TCInfo +{ + struct + { + unsigned scale_minus_1 : 16; + unsigned range_bias : 1; + unsigned cylindric_wrap : 1; + }; + u32 hex; +}; +struct TCoordInfo +{ + TCInfo s; + TCInfo t; +}; + + +union ColReg +{ + u32 hex; + struct + { + signed a : 11; + unsigned : 1; + signed b : 11; + unsigned type : 1; + }; +}; + +struct TevReg +{ + ColReg low; + ColReg high; +}; + +union TevKSel +{ + struct { + unsigned swap1 : 2; + unsigned swap2 : 2; + unsigned kcsel0 : 5; + unsigned kasel0 : 5; + unsigned kcsel1 : 5; + unsigned kasel1 : 5; + }; + u32 hex; + + int getKC(int i) {return i?kcsel1:kcsel0;} + int getKA(int i) {return i?kasel1:kasel0;} +}; + +union AlphaFunc +{ + struct + { + unsigned ref0 : 8; + unsigned ref1 : 8; + unsigned comp0 : 3; + unsigned comp1 : 3; + unsigned logic : 2; + }; + u32 hex; +}; + +union UPE_Copy +{ + u32 Hex; + struct + { + unsigned clamp0 : 1; + unsigned clamp1 : 1; + unsigned : 1; + unsigned target_pixel_format : 4; // realformat is (fmt/2)+((fmt&1)*8).... for some reason the msb is the lsb + unsigned gamma : 2; + unsigned half_scale : 1; // real size should be 2x smaller (run a gauss filter?) + unsigned scale_something : 1; + unsigned clear : 1; + unsigned frame_to_field : 2; + unsigned copy_to_xfb : 1; + unsigned intensity_fmt : 1; // if set, is an intensity format (I4,I8,IA4,IA8) + unsigned : 16; // seems to set everything to 1s when target pixel format is invalid + }; +}; + +////////////////////////////////////////////////////////////////////////// +// All of BP memory +////////////////////////////////////////////////////////////////////////// + +struct BPMemory +{ + GenMode genMode; + u32 display_copy_filter[4]; //01-04 + u32 unknown; //05 + // indirect matrices (set by GXSetIndTexMtx, selected by TevStageIndirect::mid) + // abc form a 2x3 offset matrix, there's 3 such matrices + // the 3 offset matrices can either be indirect type, S-type, or T-type + // 6bit scale factor s is distributed across IND_MTXA/B/C. + // before using matrices scale by 2^-(s-17) + IND_MTX indmtx[3];//06-0e GXSetIndTexMtx, 2x3 matrices + IND_IMASK imask;//0f + TevStageIndirect tevind[16];//10 GXSetTevIndirect + X12Y12 scissorTL; //20 + X12Y12 scissorBR; //21 + LPSize lineptwidth; //22 line and point width + u32 sucounter; //23 + u32 rascounter; //24 + TEXSCALE texscale[2]; //25-26 GXSetIndTexCoordScale + RAS1_IREF tevindref; //27 GXSetIndTexOrder + TwoTevStageOrders tevorders[8]; //28-2F + TCoordInfo texcoords[8]; //0x30 s,t,s,t,s,t,s,t... + ZMode zmode; //40 + BlendMode blendmode; //41 + ConstantAlpha dstalpha; //42 + PE_CONTROL zcontrol; //43 GXSetZCompLoc, GXPixModeSync + u32 fieldmask; //44 + u32 drawdone; //45, bit1=1 if end of list + u32 unknown5; //46 clock? + u32 petoken; //47 + u32 petokenint; //48 + X10Y10 copyTexSrcXY; //49 + X10Y10 copyTexSrcWH; //4a + u32 copyTexDest; //4b// 4b == CopyAddress (GXDispCopy and GXTexCopy use it) + u32 unknown6; //4c + u32 copyMipMapStrideChannels; // 4d usually set to 4 when dest is single channel, 8 when dest is 2 channel, 16 when dest is RGBA + // also, doubles whenever mipmap box filter option is set (excent on RGBA). Probably to do with number of bytes to look at when smoothing + u32 dispcopyyscale; //4e + u32 clearcolorAR; //4f + u32 clearcolorGB; //50 + u32 clearZValue; //51 + u32 triggerEFBCopy; //52 + u32 copyfilter[2]; //53,54 + u32 boundbox0;//55 + u32 boundbox1;//56 + u32 unknown7[2];//57,58 + X10Y10 scissorOffset; //59 + u32 unknown8[10]; //5a,5b,5c,5d, 5e,5f,60,61, 62, 63 (GXTexModeSync), 0x60-0x63 have to do with preloaded textures? + u32 tlutXferSrc; //64 + u32 tlutXferDest; //65 + u32 texinvalidate;//66 + u32 metric; //67 + u32 fieldmode;//68 + u32 unknown10[7];//69-6F + u32 unknown11[16];//70-7F + FourTexUnits tex[2]; //80-bf + TevStageCombiner combiners[16]; //0xC0-0xDF + TevReg tevregs[4]; //0xE0 + u32 fogRangeAdj; //0xE8 + u32 unknown15[3]; //0xe9,0xea,0xeb - fog related + u32 tev_range_adj_c; //0xec - screenx center for range adjustment, range adjustment enable + u32 tev_range_adj_k; //0xed - specifies range adjustment function = sqrt(x*x+k*k)/k + FogParams fog; //0xEE,0xEF,0xF0,0xF1,0xF2 + AlphaFunc alphaFunc; //0xF3 + ZTex1 ztex1; //0xf4,0xf5 + ZTex2 ztex2; + TevKSel tevksel[8];//0xf6,0xf7,f8,f9,fa,fb,fc,fd + u32 bpMask; //0xFE + u32 unknown18; //ff +}; + +#pragma pack() + +extern BPMemory bpmem; + +#endif diff --git a/Source/Core/VideoCommon/Src/CPMemory.h b/Source/Core/VideoCommon/Src/CPMemory.h index 9557984ecf..17d1998847 100644 --- a/Source/Core/VideoCommon/Src/CPMemory.h +++ b/Source/Core/VideoCommon/Src/CPMemory.h @@ -1,261 +1,261 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef _CPMEMORY_H
-#define _CPMEMORY_H
-
-#include "Common.h"
-
-// Vertex array numbers
-enum
-{
- ARRAY_POSITION = 0,
- ARRAY_NORMAL = 1,
- ARRAY_COLOR = 2,
- ARRAY_COLOR2 = 3,
- ARRAY_TEXCOORD0 = 4,
-};
-
-// Vertex components
-enum
-{
- NOT_PRESENT = 0,
- DIRECT = 1,
- INDEX8 = 2,
- INDEX16 = 3,
-};
-
-enum
-{
- FORMAT_UBYTE = 0, // 2 Cmp
- FORMAT_BYTE = 1, // 3 Cmp
- FORMAT_USHORT = 2,
- FORMAT_SHORT = 3,
- FORMAT_FLOAT = 4,
-};
-
-enum
-{
- FORMAT_16B_565 = 0, // NA
- FORMAT_24B_888 = 1,
- FORMAT_32B_888x = 2,
- FORMAT_16B_4444 = 3,
- FORMAT_24B_6666 = 4,
- FORMAT_32B_8888 = 5,
-};
-
-enum
-{
- VAT_0_FRACBITS = 0x3e0001f0,
- VAT_1_FRACBITS = 0x07c3e1f0,
- VAT_2_FRACBITS = 0xf87c3e1f,
-};
-
-#pragma pack(4)
-union TVtxDesc
-{
- u64 Hex;
- struct
- {
- // 0: not present
- // 1: present
- unsigned PosMatIdx : 1;
- unsigned Tex0MatIdx : 1;
- unsigned Tex1MatIdx : 1;
- unsigned Tex2MatIdx : 1;
- unsigned Tex3MatIdx : 1;
- unsigned Tex4MatIdx : 1;
- unsigned Tex5MatIdx : 1;
- unsigned Tex6MatIdx : 1;
- unsigned Tex7MatIdx : 1;
-
- // 00: not present
- // 01: direct
- // 10: 8 bit index
- // 11: 16 bit index
- unsigned Position : 2;
- unsigned Normal : 2;
- unsigned Color0 : 2;
- unsigned Color1 : 2;
- unsigned Tex0Coord : 2;
- unsigned Tex1Coord : 2;
- unsigned Tex2Coord : 2;
- unsigned Tex3Coord : 2;
- unsigned Tex4Coord : 2;
- unsigned Tex5Coord : 2;
- unsigned Tex6Coord : 2;
- unsigned Tex7Coord : 2;
- unsigned :31;
- };
- struct {
- u32 Hex0, Hex1;
- };
-};
-
-union UVAT_group0
-{
- u32 Hex;
- struct
- {
- // 0:8
- unsigned PosElements : 1;
- unsigned PosFormat : 3;
- unsigned PosFrac : 5;
- // 9:12
- unsigned NormalElements : 1;
- unsigned NormalFormat : 3;
- // 13:16
- unsigned Color0Elements : 1;
- unsigned Color0Comp : 3;
- // 17:20
- unsigned Color1Elements : 1;
- unsigned Color1Comp : 3;
- // 21:29
- unsigned Tex0CoordElements : 1;
- unsigned Tex0CoordFormat : 3;
- unsigned Tex0Frac : 5;
- // 30:31
- unsigned ByteDequant: 1;
- unsigned NormalIndex3: 1;
- };
-};
-
-union UVAT_group1
-{
- u32 Hex;
- struct
- {
- // 0:8
- unsigned Tex1CoordElements : 1;
- unsigned Tex1CoordFormat : 3;
- unsigned Tex1Frac : 5;
- // 9:17
- unsigned Tex2CoordElements : 1;
- unsigned Tex2CoordFormat : 3;
- unsigned Tex2Frac : 5;
- // 18:26
- unsigned Tex3CoordElements : 1;
- unsigned Tex3CoordFormat : 3;
- unsigned Tex3Frac : 5;
- // 27:30
- unsigned Tex4CoordElements : 1;
- unsigned Tex4CoordFormat : 3;
- //
- unsigned : 1;
- };
-};
-
-union UVAT_group2
-{
- u32 Hex;
- struct
- {
- // 0:4
- unsigned Tex4Frac : 5;
- // 5:13
- unsigned Tex5CoordElements : 1;
- unsigned Tex5CoordFormat : 3;
- unsigned Tex5Frac : 5;
- // 14:22
- unsigned Tex6CoordElements : 1;
- unsigned Tex6CoordFormat : 3;
- unsigned Tex6Frac : 5;
- // 23:31
- unsigned Tex7CoordElements : 1;
- unsigned Tex7CoordFormat : 3;
- unsigned Tex7Frac : 5;
- };
-};
-
-struct ColorAttr
-{
- u8 Elements;
- u8 Comp;
-};
-
-struct TexAttr
-{
- u8 Elements;
- u8 Format;
- u8 Frac;
-};
-
-struct TVtxAttr
-{
- u8 PosElements;
- u8 PosFormat;
- u8 PosFrac;
- u8 NormalElements;
- u8 NormalFormat;
- ColorAttr color[2];
- TexAttr texCoord[8];
- u8 ByteDequant;
- u8 NormalIndex3;
-};
-
-// Matrix indices
-union TMatrixIndexA
-{
- struct
- {
- unsigned PosNormalMtxIdx : 6;
- unsigned Tex0MtxIdx : 6;
- unsigned Tex1MtxIdx : 6;
- unsigned Tex2MtxIdx : 6;
- unsigned Tex3MtxIdx : 6;
- };
- struct
- {
- u32 Hex : 30;
- u32 unused : 2;
- };
-};
-
-union TMatrixIndexB
-{
- struct
- {
- unsigned Tex4MtxIdx : 6;
- unsigned Tex5MtxIdx : 6;
- unsigned Tex6MtxIdx : 6;
- unsigned Tex7MtxIdx : 6;
- };
- struct
- {
- u32 Hex : 24;
- u32 unused : 8;
- };
-};
-
-#pragma pack()
-
-extern u32 arraybases[16];
-extern u32 arraystrides[16];
-extern TMatrixIndexA MatrixIndexA;
-extern TMatrixIndexB MatrixIndexB;
-
-struct VAT
-{
- UVAT_group0 g0;
- UVAT_group1 g1;
- UVAT_group2 g2;
-};
-
-extern TVtxDesc g_VtxDesc;
-extern VAT g_VtxAttr[8];
-
-#endif
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _CPMEMORY_H +#define _CPMEMORY_H + +#include "Common.h" + +// Vertex array numbers +enum +{ + ARRAY_POSITION = 0, + ARRAY_NORMAL = 1, + ARRAY_COLOR = 2, + ARRAY_COLOR2 = 3, + ARRAY_TEXCOORD0 = 4, +}; + +// Vertex components +enum +{ + NOT_PRESENT = 0, + DIRECT = 1, + INDEX8 = 2, + INDEX16 = 3, +}; + +enum +{ + FORMAT_UBYTE = 0, // 2 Cmp + FORMAT_BYTE = 1, // 3 Cmp + FORMAT_USHORT = 2, + FORMAT_SHORT = 3, + FORMAT_FLOAT = 4, +}; + +enum +{ + FORMAT_16B_565 = 0, // NA + FORMAT_24B_888 = 1, + FORMAT_32B_888x = 2, + FORMAT_16B_4444 = 3, + FORMAT_24B_6666 = 4, + FORMAT_32B_8888 = 5, +}; + +enum +{ + VAT_0_FRACBITS = 0x3e0001f0, + VAT_1_FRACBITS = 0x07c3e1f0, + VAT_2_FRACBITS = 0xf87c3e1f, +}; + +#pragma pack(4) +union TVtxDesc +{ + u64 Hex; + struct + { + // 0: not present + // 1: present + unsigned PosMatIdx : 1; + unsigned Tex0MatIdx : 1; + unsigned Tex1MatIdx : 1; + unsigned Tex2MatIdx : 1; + unsigned Tex3MatIdx : 1; + unsigned Tex4MatIdx : 1; + unsigned Tex5MatIdx : 1; + unsigned Tex6MatIdx : 1; + unsigned Tex7MatIdx : 1; + + // 00: not present + // 01: direct + // 10: 8 bit index + // 11: 16 bit index + unsigned Position : 2; + unsigned Normal : 2; + unsigned Color0 : 2; + unsigned Color1 : 2; + unsigned Tex0Coord : 2; + unsigned Tex1Coord : 2; + unsigned Tex2Coord : 2; + unsigned Tex3Coord : 2; + unsigned Tex4Coord : 2; + unsigned Tex5Coord : 2; + unsigned Tex6Coord : 2; + unsigned Tex7Coord : 2; + unsigned :31; + }; + struct { + u32 Hex0, Hex1; + }; +}; + +union UVAT_group0 +{ + u32 Hex; + struct + { + // 0:8 + unsigned PosElements : 1; + unsigned PosFormat : 3; + unsigned PosFrac : 5; + // 9:12 + unsigned NormalElements : 1; + unsigned NormalFormat : 3; + // 13:16 + unsigned Color0Elements : 1; + unsigned Color0Comp : 3; + // 17:20 + unsigned Color1Elements : 1; + unsigned Color1Comp : 3; + // 21:29 + unsigned Tex0CoordElements : 1; + unsigned Tex0CoordFormat : 3; + unsigned Tex0Frac : 5; + // 30:31 + unsigned ByteDequant: 1; + unsigned NormalIndex3: 1; + }; +}; + +union UVAT_group1 +{ + u32 Hex; + struct + { + // 0:8 + unsigned Tex1CoordElements : 1; + unsigned Tex1CoordFormat : 3; + unsigned Tex1Frac : 5; + // 9:17 + unsigned Tex2CoordElements : 1; + unsigned Tex2CoordFormat : 3; + unsigned Tex2Frac : 5; + // 18:26 + unsigned Tex3CoordElements : 1; + unsigned Tex3CoordFormat : 3; + unsigned Tex3Frac : 5; + // 27:30 + unsigned Tex4CoordElements : 1; + unsigned Tex4CoordFormat : 3; + // + unsigned : 1; + }; +}; + +union UVAT_group2 +{ + u32 Hex; + struct + { + // 0:4 + unsigned Tex4Frac : 5; + // 5:13 + unsigned Tex5CoordElements : 1; + unsigned Tex5CoordFormat : 3; + unsigned Tex5Frac : 5; + // 14:22 + unsigned Tex6CoordElements : 1; + unsigned Tex6CoordFormat : 3; + unsigned Tex6Frac : 5; + // 23:31 + unsigned Tex7CoordElements : 1; + unsigned Tex7CoordFormat : 3; + unsigned Tex7Frac : 5; + }; +}; + +struct ColorAttr +{ + u8 Elements; + u8 Comp; +}; + +struct TexAttr +{ + u8 Elements; + u8 Format; + u8 Frac; +}; + +struct TVtxAttr +{ + u8 PosElements; + u8 PosFormat; + u8 PosFrac; + u8 NormalElements; + u8 NormalFormat; + ColorAttr color[2]; + TexAttr texCoord[8]; + u8 ByteDequant; + u8 NormalIndex3; +}; + +// Matrix indices +union TMatrixIndexA +{ + struct + { + unsigned PosNormalMtxIdx : 6; + unsigned Tex0MtxIdx : 6; + unsigned Tex1MtxIdx : 6; + unsigned Tex2MtxIdx : 6; + unsigned Tex3MtxIdx : 6; + }; + struct + { + u32 Hex : 30; + u32 unused : 2; + }; +}; + +union TMatrixIndexB +{ + struct + { + unsigned Tex4MtxIdx : 6; + unsigned Tex5MtxIdx : 6; + unsigned Tex6MtxIdx : 6; + unsigned Tex7MtxIdx : 6; + }; + struct + { + u32 Hex : 24; + u32 unused : 8; + }; +}; + +#pragma pack() + +extern u32 arraybases[16]; +extern u32 arraystrides[16]; +extern TMatrixIndexA MatrixIndexA; +extern TMatrixIndexB MatrixIndexB; + +struct VAT +{ + UVAT_group0 g0; + UVAT_group1 g1; + UVAT_group2 g2; +}; + +extern TVtxDesc g_VtxDesc; +extern VAT g_VtxAttr[8]; + +#endif diff --git a/Source/Core/VideoCommon/Src/DataReader.h b/Source/Core/VideoCommon/Src/DataReader.h index 3f465a46e5..af604fafb3 100644 --- a/Source/Core/VideoCommon/Src/DataReader.h +++ b/Source/Core/VideoCommon/Src/DataReader.h @@ -1,76 +1,76 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef _DATAREADER_H
-#define _DATAREADER_H
-
-extern u8* g_pVideoData;
-
-inline u8 DataPeek8(u32 _uOffset)
-{
- return g_pVideoData[_uOffset];
-}
-
-inline u16 DataPeek16(u32 _uOffset)
-{
- return Common::swap16(*(u16*)&g_pVideoData[_uOffset]);
-}
-
-inline u32 DataPeek32(u32 _uOffset)
-{
- return Common::swap32(*(u32*)&g_pVideoData[_uOffset]);
-}
-
-inline u8 DataReadU8()
-{
- return *g_pVideoData++;
-}
-
-inline u16 DataReadU16()
-{
- u16 tmp = Common::swap16(*(u16*)g_pVideoData);
- g_pVideoData += 2;
- return tmp;
-}
-
-inline u32 DataReadU32()
-{
- u32 tmp = Common::swap32(*(u32*)g_pVideoData);
- g_pVideoData += 4;
- return tmp;
-}
-
-inline float DataReadF32()
-{
- union {u32 i; float f;} temp;
- temp.i = Common::swap32(*(u32*)g_pVideoData);
- g_pVideoData += 4;
- float tmp = temp.f;
- return tmp;
-}
-
-inline u8* DataGetPosition()
-{
- return g_pVideoData;
-}
-
-inline void DataSkip(u32 skip)
-{
- g_pVideoData += skip;
-}
-
-#endif
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _DATAREADER_H +#define _DATAREADER_H + +extern u8* g_pVideoData; + +inline u8 DataPeek8(u32 _uOffset) +{ + return g_pVideoData[_uOffset]; +} + +inline u16 DataPeek16(u32 _uOffset) +{ + return Common::swap16(*(u16*)&g_pVideoData[_uOffset]); +} + +inline u32 DataPeek32(u32 _uOffset) +{ + return Common::swap32(*(u32*)&g_pVideoData[_uOffset]); +} + +inline u8 DataReadU8() +{ + return *g_pVideoData++; +} + +inline u16 DataReadU16() +{ + u16 tmp = Common::swap16(*(u16*)g_pVideoData); + g_pVideoData += 2; + return tmp; +} + +inline u32 DataReadU32() +{ + u32 tmp = Common::swap32(*(u32*)g_pVideoData); + g_pVideoData += 4; + return tmp; +} + +inline float DataReadF32() +{ + union {u32 i; float f;} temp; + temp.i = Common::swap32(*(u32*)g_pVideoData); + g_pVideoData += 4; + float tmp = temp.f; + return tmp; +} + +inline u8* DataGetPosition() +{ + return g_pVideoData; +} + +inline void DataSkip(u32 skip) +{ + g_pVideoData += skip; +} + +#endif diff --git a/Source/Core/VideoCommon/Src/Fifo.h b/Source/Core/VideoCommon/Src/Fifo.h index 33c900b774..77b35be83a 100644 --- a/Source/Core/VideoCommon/Src/Fifo.h +++ b/Source/Core/VideoCommon/Src/Fifo.h @@ -1,35 +1,35 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef _FIFO_H
-#define _FIFO_H
-
-#include "pluginspecs_video.h"
-
-#include "Common.h"
-#include "ChunkFile.h"
-
-#define FIFO_SIZE (1024*1024)
-
-void Fifo_Init();
-void Fifo_Shutdown();
-void Fifo_EnterLoop(const SVideoInitialize &video_initialize);
-void Fifo_DoState(PointerWrap &f);
-void Fifo_Stop();
-
-#endif
-
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _FIFO_H +#define _FIFO_H + +#include "pluginspecs_video.h" + +#include "Common.h" +#include "ChunkFile.h" + +#define FIFO_SIZE (1024*1024) + +void Fifo_Init(); +void Fifo_Shutdown(); +void Fifo_EnterLoop(const SVideoInitialize &video_initialize); +void Fifo_DoState(PointerWrap &f); +void Fifo_Stop(); + +#endif + diff --git a/Source/Core/VideoCommon/Src/LookUpTables.h b/Source/Core/VideoCommon/Src/LookUpTables.h index 4509f70bef..4d37fc6786 100644 --- a/Source/Core/VideoCommon/Src/LookUpTables.h +++ b/Source/Core/VideoCommon/Src/LookUpTables.h @@ -1,34 +1,34 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef _LOOKUPTABLES_H
-#define _LOOKUPTABLES_H
-
-#include "Common.h"
-
-extern const int lut3to8[8];
-extern const int lut4to8[16];
-extern const int lut5to8[32];
-extern int lut6to8[64];
-extern float lutu8tosfloat[256];
-extern float lutu8toufloat[256];
-extern float luts8tosfloat[256];
-extern float shiftLookup[32];
-
-void InitLUTs();
-
-#endif
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _LOOKUPTABLES_H +#define _LOOKUPTABLES_H + +#include "Common.h" + +extern const int lut3to8[8]; +extern const int lut4to8[16]; +extern const int lut5to8[32]; +extern int lut6to8[64]; +extern float lutu8tosfloat[256]; +extern float lutu8toufloat[256]; +extern float luts8tosfloat[256]; +extern float shiftLookup[32]; + +void InitLUTs(); + +#endif diff --git a/Source/Core/VideoCommon/Src/NativeVertexFormat.h b/Source/Core/VideoCommon/Src/NativeVertexFormat.h index 3aee5cd753..bcfb9fd95d 100644 --- a/Source/Core/VideoCommon/Src/NativeVertexFormat.h +++ b/Source/Core/VideoCommon/Src/NativeVertexFormat.h @@ -1,105 +1,105 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef _NATIVEVERTEXFORMAT_H
-#define _NATIVEVERTEXFORMAT_H
-
-#include "PluginSpecs.h"
-
-// m_components
-enum {
- VB_HAS_POSMTXIDX =(1<<1),
- VB_HAS_TEXMTXIDX0=(1<<2),
- VB_HAS_TEXMTXIDX1=(1<<3),
- VB_HAS_TEXMTXIDX2=(1<<4),
- VB_HAS_TEXMTXIDX3=(1<<5),
- VB_HAS_TEXMTXIDX4=(1<<6),
- VB_HAS_TEXMTXIDX5=(1<<7),
- VB_HAS_TEXMTXIDX6=(1<<8),
- VB_HAS_TEXMTXIDX7=(1<<9),
- VB_HAS_TEXMTXIDXALL=(0xff<<2),
-
- //VB_HAS_POS=0, // Implied, it always has pos! don't bother testing
- VB_HAS_NRM0=(1<<10),
- VB_HAS_NRM1=(1<<11),
- VB_HAS_NRM2=(1<<12),
- VB_HAS_NRMALL=(7<<10),
-
- VB_HAS_COL0=(1<<13),
- VB_HAS_COL1=(1<<14),
-
- VB_HAS_UV0=(1<<15),
- VB_HAS_UV1=(1<<16),
- VB_HAS_UV2=(1<<17),
- VB_HAS_UV3=(1<<18),
- VB_HAS_UV4=(1<<19),
- VB_HAS_UV5=(1<<20),
- VB_HAS_UV6=(1<<21),
- VB_HAS_UV7=(1<<22),
- VB_HAS_UVALL=(0xff<<15),
- VB_HAS_UVTEXMTXSHIFT=13,
-};
-
-#define LOADERDECL __cdecl
-typedef void (LOADERDECL *TPipelineFunction)();
-
-enum VarType {
- VAR_BYTE,
- VAR_UNSIGNED_BYTE,
- VAR_SHORT,
- VAR_UNSIGNED_SHORT,
- VAR_FLOAT,
-};
-
-struct PortableVertexDeclaration
-{
- int stride;
-
- int num_normals;
- int normal_offset[3];
- VarType normal_gl_type;
- int normal_gl_size;
- VarType color_gl_type; // always GL_UNSIGNED_BYTE
- int color_offset[2];
- VarType texcoord_gl_type[8];
- int texcoord_gl_size[8];
- int texcoord_offset[8];
- int texcoord_size[8];
- int posmtx_offset;
-};
-
-// The implementation of this class is specific for GL/DX, so NativeVertexFormat.cpp
-// is in the respective plugin, not here in VideoCommon.
-
-// Note that this class can't just invent arbitrary vertex formats out of its input -
-// all the data loading code must always be made compatible.
-class NativeVertexFormat
-{
- u8* m_compiledCode;
- PortableVertexDeclaration vtx_decl;
-public:
- NativeVertexFormat();
- ~NativeVertexFormat();
-
- void Initialize(const PortableVertexDeclaration &vtx_decl);
- void SetupVertexPointers() const;
-
- // TODO: move these in under private:
- u32 m_components; // VB_HAS_X. Bitmask telling what vertex components are present.
-};
-
-#endif // _NATIVEVERTEXFORMAT_H
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _NATIVEVERTEXFORMAT_H +#define _NATIVEVERTEXFORMAT_H + +#include "PluginSpecs.h" + +// m_components +enum { + VB_HAS_POSMTXIDX =(1<<1), + VB_HAS_TEXMTXIDX0=(1<<2), + VB_HAS_TEXMTXIDX1=(1<<3), + VB_HAS_TEXMTXIDX2=(1<<4), + VB_HAS_TEXMTXIDX3=(1<<5), + VB_HAS_TEXMTXIDX4=(1<<6), + VB_HAS_TEXMTXIDX5=(1<<7), + VB_HAS_TEXMTXIDX6=(1<<8), + VB_HAS_TEXMTXIDX7=(1<<9), + VB_HAS_TEXMTXIDXALL=(0xff<<2), + + //VB_HAS_POS=0, // Implied, it always has pos! don't bother testing + VB_HAS_NRM0=(1<<10), + VB_HAS_NRM1=(1<<11), + VB_HAS_NRM2=(1<<12), + VB_HAS_NRMALL=(7<<10), + + VB_HAS_COL0=(1<<13), + VB_HAS_COL1=(1<<14), + + VB_HAS_UV0=(1<<15), + VB_HAS_UV1=(1<<16), + VB_HAS_UV2=(1<<17), + VB_HAS_UV3=(1<<18), + VB_HAS_UV4=(1<<19), + VB_HAS_UV5=(1<<20), + VB_HAS_UV6=(1<<21), + VB_HAS_UV7=(1<<22), + VB_HAS_UVALL=(0xff<<15), + VB_HAS_UVTEXMTXSHIFT=13, +}; + +#define LOADERDECL __cdecl +typedef void (LOADERDECL *TPipelineFunction)(); + +enum VarType { + VAR_BYTE, + VAR_UNSIGNED_BYTE, + VAR_SHORT, + VAR_UNSIGNED_SHORT, + VAR_FLOAT, +}; + +struct PortableVertexDeclaration +{ + int stride; + + int num_normals; + int normal_offset[3]; + VarType normal_gl_type; + int normal_gl_size; + VarType color_gl_type; // always GL_UNSIGNED_BYTE + int color_offset[2]; + VarType texcoord_gl_type[8]; + int texcoord_gl_size[8]; + int texcoord_offset[8]; + int texcoord_size[8]; + int posmtx_offset; +}; + +// The implementation of this class is specific for GL/DX, so NativeVertexFormat.cpp +// is in the respective plugin, not here in VideoCommon. + +// Note that this class can't just invent arbitrary vertex formats out of its input - +// all the data loading code must always be made compatible. +class NativeVertexFormat +{ + u8* m_compiledCode; + PortableVertexDeclaration vtx_decl; +public: + NativeVertexFormat(); + ~NativeVertexFormat(); + + void Initialize(const PortableVertexDeclaration &vtx_decl); + void SetupVertexPointers() const; + + // TODO: move these in under private: + u32 m_components; // VB_HAS_X. Bitmask telling what vertex components are present. +}; + +#endif // _NATIVEVERTEXFORMAT_H diff --git a/Source/Core/VideoCommon/Src/OpcodeDecoding.h b/Source/Core/VideoCommon/Src/OpcodeDecoding.h index 3219714887..f2502e6b49 100644 --- a/Source/Core/VideoCommon/Src/OpcodeDecoding.h +++ b/Source/Core/VideoCommon/Src/OpcodeDecoding.h @@ -1,51 +1,51 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef _OPCODE_DECODING_H
-#define _OPCODE_DECODING_H
-
-#define GX_NOP 0x00
-
-#define GX_LOAD_BP_REG 0x61
-#define GX_LOAD_CP_REG 0x08
-#define GX_LOAD_XF_REG 0x10
-#define GX_LOAD_INDX_A 0x20
-#define GX_LOAD_INDX_B 0x28
-#define GX_LOAD_INDX_C 0x30
-#define GX_LOAD_INDX_D 0x38
-
-#define GX_CMD_CALL_DL 0x40
-#define GX_CMD_INVL_VC 0x48
-
-#define GX_PRIMITIVE_MASK 0x78
-#define GX_PRIMITIVE_SHIFT 3
-#define GX_VAT_MASK 0x07
-
-//these are defined 1/8th of their real values and without their top bit
-#define GX_DRAW_QUADS 0x0 //0x80
-#define GX_DRAW_TRIANGLES 0x2 //0x90
-#define GX_DRAW_TRIANGLE_STRIP 0x3 //0x98
-#define GX_DRAW_TRIANGLE_FAN 0x4 //0xA0
-#define GX_DRAW_LINES 0x5 //0xA8
-#define GX_DRAW_LINE_STRIP 0x6 //0xB0
-#define GX_DRAW_POINTS 0x7 //0xB8
-
-void OpcodeDecoder_Init();
-void OpcodeDecoder_Shutdown();
-void OpcodeDecoder_Run();
-
-#endif
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _OPCODE_DECODING_H +#define _OPCODE_DECODING_H + +#define GX_NOP 0x00 + +#define GX_LOAD_BP_REG 0x61 +#define GX_LOAD_CP_REG 0x08 +#define GX_LOAD_XF_REG 0x10 +#define GX_LOAD_INDX_A 0x20 +#define GX_LOAD_INDX_B 0x28 +#define GX_LOAD_INDX_C 0x30 +#define GX_LOAD_INDX_D 0x38 + +#define GX_CMD_CALL_DL 0x40 +#define GX_CMD_INVL_VC 0x48 + +#define GX_PRIMITIVE_MASK 0x78 +#define GX_PRIMITIVE_SHIFT 3 +#define GX_VAT_MASK 0x07 + +//these are defined 1/8th of their real values and without their top bit +#define GX_DRAW_QUADS 0x0 //0x80 +#define GX_DRAW_TRIANGLES 0x2 //0x90 +#define GX_DRAW_TRIANGLE_STRIP 0x3 //0x98 +#define GX_DRAW_TRIANGLE_FAN 0x4 //0xA0 +#define GX_DRAW_LINES 0x5 //0xA8 +#define GX_DRAW_LINE_STRIP 0x6 //0xB0 +#define GX_DRAW_POINTS 0x7 //0xB8 + +void OpcodeDecoder_Init(); +void OpcodeDecoder_Shutdown(); +void OpcodeDecoder_Run(); + +#endif diff --git a/Source/Core/VideoCommon/Src/PixelShader.h b/Source/Core/VideoCommon/Src/PixelShader.h index ae397d01b4..9823a2870b 100644 --- a/Source/Core/VideoCommon/Src/PixelShader.h +++ b/Source/Core/VideoCommon/Src/PixelShader.h @@ -1,44 +1,44 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef GCOGL_PIXELSHADER
-#define GCOGL_PIXELSHADER
-
-#include "Common.h"
-
-#define I_COLORS "color"
-#define I_KCOLORS "k"
-#define I_ALPHA "alphaRef"
-#define I_TEXDIMS "texdim"
-#define I_ZBIAS "czbias"
-#define I_INDTEXSCALE "cindscale"
-#define I_INDTEXMTX "cindmtx"
-
-#define C_COLORS 0
-#define C_KCOLORS (C_COLORS+4)
-#define C_ALPHA (C_KCOLORS+4)
-#define C_TEXDIMS (C_ALPHA+1)
-#define C_ZBIAS (C_TEXDIMS+8)
-#define C_INDTEXSCALE (C_ZBIAS+2)
-#define C_INDTEXMTX (C_INDTEXSCALE+2)
-#define C_ENVCONST_END (C_INDTEXMTX+6)
-
-#define C_COLORMATRIX (C_INDTEXMTX+6)
-
-char *GeneratePixelShader(u32 texture_mask, bool has_zbuffer_target, bool bRenderZToCol0);
-
-#endif
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef GCOGL_PIXELSHADER +#define GCOGL_PIXELSHADER + +#include "Common.h" + +#define I_COLORS "color" +#define I_KCOLORS "k" +#define I_ALPHA "alphaRef" +#define I_TEXDIMS "texdim" +#define I_ZBIAS "czbias" +#define I_INDTEXSCALE "cindscale" +#define I_INDTEXMTX "cindmtx" + +#define C_COLORS 0 +#define C_KCOLORS (C_COLORS+4) +#define C_ALPHA (C_KCOLORS+4) +#define C_TEXDIMS (C_ALPHA+1) +#define C_ZBIAS (C_TEXDIMS+8) +#define C_INDTEXSCALE (C_ZBIAS+2) +#define C_INDTEXMTX (C_INDTEXSCALE+2) +#define C_ENVCONST_END (C_INDTEXMTX+6) + +#define C_COLORMATRIX (C_INDTEXMTX+6) + +char *GeneratePixelShader(u32 texture_mask, bool has_zbuffer_target, bool bRenderZToCol0); + +#endif diff --git a/Source/Core/VideoCommon/Src/Profiler.h b/Source/Core/VideoCommon/Src/Profiler.h index db7524bca6..30cbbd8ead 100644 --- a/Source/Core/VideoCommon/Src/Profiler.h +++ b/Source/Core/VideoCommon/Src/Profiler.h @@ -1,78 +1,78 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-
-// Zerofrog's Mini Internal Profiler
-
-#ifndef _PROFILER_H
-#define _PROFILER_H
-
-#include <string>
-
-#include "Common.h"
-
-// #define DVPROFILE // comment out to disable profiling
-
-extern int g_bWriteProfile; // global variable to enable/disable profiling (if DVPROFILE is defined)
-
-// IMPORTANT: For every Register there must be an End. Use the below DVProfileFunc utility class for safety.
-void DVProfRegister(const char* pname); // first checks if this profiler exists in g_listProfilers
-void DVProfEnd(u32 dwUserData);
-
-void DVProfWrite(const char* pfilename, u32 frames = 0);
-void DVProfGenReport(std::string *report);
-void DVProfClear(); // clears all the profilers
-
-#if defined(DVPROFILE) && defined(_WIN32)
-
-#ifdef _MSC_VER
-
-#ifndef __PRETTY_FUNCTION__
-#define __PRETTY_FUNCTION__ __FUNCTION__
-#endif
-
-#endif
-
-#define DVSTARTPROFILE() DVProfileFunc _pf(__PRETTY_FUNCTION__);
-#define DVSTARTSUBPROFILE(name) DVProfileFunc _pf(name);
-
-class DVProfileFunc
-{
-public:
- u32 dwUserData;
- DVProfileFunc(const char* pname) { DVProfRegister(pname); dwUserData = 0; }
- DVProfileFunc(const char* pname, u32 dwUserData) : dwUserData(dwUserData) { DVProfRegister(pname); }
- ~DVProfileFunc() { DVProfEnd(dwUserData); }
-};
-
-#else
-
-#define DVSTARTPROFILE()
-#define DVSTARTSUBPROFILE(name)
-
-class DVProfileFunc
-{
-public:
- u32 dwUserData;
- __forceinline DVProfileFunc(const char* pname) {}
- __forceinline DVProfileFunc(const char* pname, u32 _dwUserData) { }
- ~DVProfileFunc() {}
-};
-
-#endif
-
-#endif
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +// Zerofrog's Mini Internal Profiler + +#ifndef _PROFILER_H +#define _PROFILER_H + +#include <string> + +#include "Common.h" + +// #define DVPROFILE // comment out to disable profiling + +extern int g_bWriteProfile; // global variable to enable/disable profiling (if DVPROFILE is defined) + +// IMPORTANT: For every Register there must be an End. Use the below DVProfileFunc utility class for safety. +void DVProfRegister(const char* pname); // first checks if this profiler exists in g_listProfilers +void DVProfEnd(u32 dwUserData); + +void DVProfWrite(const char* pfilename, u32 frames = 0); +void DVProfGenReport(std::string *report); +void DVProfClear(); // clears all the profilers + +#if defined(DVPROFILE) && defined(_WIN32) + +#ifdef _MSC_VER + +#ifndef __PRETTY_FUNCTION__ +#define __PRETTY_FUNCTION__ __FUNCTION__ +#endif + +#endif + +#define DVSTARTPROFILE() DVProfileFunc _pf(__PRETTY_FUNCTION__); +#define DVSTARTSUBPROFILE(name) DVProfileFunc _pf(name); + +class DVProfileFunc +{ +public: + u32 dwUserData; + DVProfileFunc(const char* pname) { DVProfRegister(pname); dwUserData = 0; } + DVProfileFunc(const char* pname, u32 dwUserData) : dwUserData(dwUserData) { DVProfRegister(pname); } + ~DVProfileFunc() { DVProfEnd(dwUserData); } +}; + +#else + +#define DVSTARTPROFILE() +#define DVSTARTSUBPROFILE(name) + +class DVProfileFunc +{ +public: + u32 dwUserData; + __forceinline DVProfileFunc(const char* pname) {} + __forceinline DVProfileFunc(const char* pname, u32 _dwUserData) { } + ~DVProfileFunc() {} +}; + +#endif + +#endif diff --git a/Source/Core/VideoCommon/Src/Statistics.h b/Source/Core/VideoCommon/Src/Statistics.h index fe4a1e201c..f4747f922e 100644 --- a/Source/Core/VideoCommon/Src/Statistics.h +++ b/Source/Core/VideoCommon/Src/Statistics.h @@ -1,80 +1,80 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef _STATISTICS_H
-#define _STATISTICS_H
-
-struct Statistics
-{
- int numPixelShadersCreated;
- int numPixelShadersAlive;
- int numVertexShadersCreated;
- int numVertexShadersAlive;
-
- int numTexturesCreated;
- int numTexturesAlive;
-
- int numRenderTargetsCreated;
- int numRenderTargetsAlive;
-
- int numDListsCalled;
- int numDListsCreated;
- int numDListsAlive;
-
- int numVertexLoaders;
-
- struct ThisFrame
- {
- int numBPLoads;
- int numCPLoads;
- int numXFLoads;
-
- int numBPLoadsInDL;
- int numCPLoadsInDL;
- int numXFLoadsInDL;
-
- int numDLs;
- int numPrims;
- int numDLPrims;
- int numShaderChanges;
-
- int numPrimitiveJoins;
- int numDrawCalls;
- int numBufferSplits;
-
- int numDListsCalled;
- };
- ThisFrame thisFrame;
- void ResetFrame();
- static void SwapDL();
-};
-
-extern Statistics stats;
-
-#define STATISTICS
-
-#ifdef STATISTICS
-#define INCSTAT(a) (a)++;
-#define ADDSTAT(a,b) (a)+=(b);
-#define SETSTAT(a,x) (a)=(int)(x);
-#else
-#define INCSTAT(a) ;
-#define ADDSTAT(a,b) ;
-#define SETSTAT(a,x) ;
-#endif
-
-#endif // _STATISTICS_H
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _STATISTICS_H +#define _STATISTICS_H + +struct Statistics +{ + int numPixelShadersCreated; + int numPixelShadersAlive; + int numVertexShadersCreated; + int numVertexShadersAlive; + + int numTexturesCreated; + int numTexturesAlive; + + int numRenderTargetsCreated; + int numRenderTargetsAlive; + + int numDListsCalled; + int numDListsCreated; + int numDListsAlive; + + int numVertexLoaders; + + struct ThisFrame + { + int numBPLoads; + int numCPLoads; + int numXFLoads; + + int numBPLoadsInDL; + int numCPLoadsInDL; + int numXFLoadsInDL; + + int numDLs; + int numPrims; + int numDLPrims; + int numShaderChanges; + + int numPrimitiveJoins; + int numDrawCalls; + int numBufferSplits; + + int numDListsCalled; + }; + ThisFrame thisFrame; + void ResetFrame(); + static void SwapDL(); +}; + +extern Statistics stats; + +#define STATISTICS + +#ifdef STATISTICS +#define INCSTAT(a) (a)++; +#define ADDSTAT(a,b) (a)+=(b); +#define SETSTAT(a,x) (a)=(int)(x); +#else +#define INCSTAT(a) ; +#define ADDSTAT(a,b) ; +#define SETSTAT(a,x) ; +#endif + +#endif // _STATISTICS_H diff --git a/Source/Core/VideoCommon/Src/TextureDecoder.h b/Source/Core/VideoCommon/Src/TextureDecoder.h index b981f3384c..9fdfd36850 100644 --- a/Source/Core/VideoCommon/Src/TextureDecoder.h +++ b/Source/Core/VideoCommon/Src/TextureDecoder.h @@ -1,85 +1,85 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef _TEXTUREDECODER_H
-#define _TEXTUREDECODER_H
-
-enum
-{
- TMEM_SIZE = 1024*1024,
- HALFTMEM_SIZE = 512*1024
-};
-extern u8 texMem[TMEM_SIZE];
-
-enum TextureFormat
-{
- GX_TF_I4 = 0x0,
- GX_TF_I8 = 0x1,
- GX_TF_IA4 = 0x2,
- GX_TF_IA8 = 0x3,
- GX_TF_RGB565 = 0x4,
- GX_TF_RGB5A3 = 0x5,
- GX_TF_RGBA8 = 0x6,
- GX_TF_C4 = 0x8,
- GX_TF_C8 = 0x9,
- GX_TF_C14X2 = 0xA,
- GX_TF_CMPR = 0xE,
-
- _GX_TF_CTF = 0x20, // copy-texture-format only (simply means linear?)
- _GX_TF_ZTF = 0x10, // Z-texture-format
-
- // these formats are also valid when copying targets
- GX_CTF_R4 = 0x0 | _GX_TF_CTF,
- GX_CTF_RA4 = 0x2 | _GX_TF_CTF,
- GX_CTF_RA8 = 0x3 | _GX_TF_CTF,
- GX_CTF_YUVA8 = 0x6 | _GX_TF_CTF,
- GX_CTF_A8 = 0x7 | _GX_TF_CTF,
- GX_CTF_R8 = 0x8 | _GX_TF_CTF,
- GX_CTF_G8 = 0x9 | _GX_TF_CTF,
- GX_CTF_B8 = 0xA | _GX_TF_CTF,
- GX_CTF_RG8 = 0xB | _GX_TF_CTF,
- GX_CTF_GB8 = 0xC | _GX_TF_CTF,
-
- GX_TF_Z8 = 0x1 | _GX_TF_ZTF,
- GX_TF_Z16 = 0x3 | _GX_TF_ZTF,
- GX_TF_Z24X8 = 0x6 | _GX_TF_ZTF,
-
- GX_CTF_Z4 = 0x0 | _GX_TF_ZTF | _GX_TF_CTF,
- GX_CTF_Z8M = 0x9 | _GX_TF_ZTF | _GX_TF_CTF,
- GX_CTF_Z8L = 0xA | _GX_TF_ZTF | _GX_TF_CTF,
- GX_CTF_Z16L = 0xC | _GX_TF_ZTF | _GX_TF_CTF,
-};
-
-int TexDecoder_GetTexelSizeInNibbles(int format);
-int TexDecoder_GetTextureSizeInBytes(int width, int height, int format);
-int TexDecoder_GetBlockWidthInTexels(int format);
-int TexDecoder_GetPaletteSize(int fmt);
-
-enum PC_TexFormat
-{
- PC_TEX_FMT_NONE = 0,
- PC_TEX_FMT_BGRA32 = 1,
-};
-
-PC_TexFormat TexDecoder_Decode(u8 *dst, const u8 *src, int width, int height, int texformat, int tlutaddr, int tlutfmt);
-
-u32 TexDecoder_GetSafeTextureHash(const u8 *src, int width, int height, int texformat, u32 seed=0);
-u32 TexDecoder_GetTlutHash(const u16 *src, int len);
-
-void TexDecoder_SetTexFmtOverlayOptions(bool enable, bool center);
-
-#endif
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _TEXTUREDECODER_H +#define _TEXTUREDECODER_H + +enum +{ + TMEM_SIZE = 1024*1024, + HALFTMEM_SIZE = 512*1024 +}; +extern u8 texMem[TMEM_SIZE]; + +enum TextureFormat +{ + GX_TF_I4 = 0x0, + GX_TF_I8 = 0x1, + GX_TF_IA4 = 0x2, + GX_TF_IA8 = 0x3, + GX_TF_RGB565 = 0x4, + GX_TF_RGB5A3 = 0x5, + GX_TF_RGBA8 = 0x6, + GX_TF_C4 = 0x8, + GX_TF_C8 = 0x9, + GX_TF_C14X2 = 0xA, + GX_TF_CMPR = 0xE, + + _GX_TF_CTF = 0x20, // copy-texture-format only (simply means linear?) + _GX_TF_ZTF = 0x10, // Z-texture-format + + // these formats are also valid when copying targets + GX_CTF_R4 = 0x0 | _GX_TF_CTF, + GX_CTF_RA4 = 0x2 | _GX_TF_CTF, + GX_CTF_RA8 = 0x3 | _GX_TF_CTF, + GX_CTF_YUVA8 = 0x6 | _GX_TF_CTF, + GX_CTF_A8 = 0x7 | _GX_TF_CTF, + GX_CTF_R8 = 0x8 | _GX_TF_CTF, + GX_CTF_G8 = 0x9 | _GX_TF_CTF, + GX_CTF_B8 = 0xA | _GX_TF_CTF, + GX_CTF_RG8 = 0xB | _GX_TF_CTF, + GX_CTF_GB8 = 0xC | _GX_TF_CTF, + + GX_TF_Z8 = 0x1 | _GX_TF_ZTF, + GX_TF_Z16 = 0x3 | _GX_TF_ZTF, + GX_TF_Z24X8 = 0x6 | _GX_TF_ZTF, + + GX_CTF_Z4 = 0x0 | _GX_TF_ZTF | _GX_TF_CTF, + GX_CTF_Z8M = 0x9 | _GX_TF_ZTF | _GX_TF_CTF, + GX_CTF_Z8L = 0xA | _GX_TF_ZTF | _GX_TF_CTF, + GX_CTF_Z16L = 0xC | _GX_TF_ZTF | _GX_TF_CTF, +}; + +int TexDecoder_GetTexelSizeInNibbles(int format); +int TexDecoder_GetTextureSizeInBytes(int width, int height, int format); +int TexDecoder_GetBlockWidthInTexels(int format); +int TexDecoder_GetPaletteSize(int fmt); + +enum PC_TexFormat +{ + PC_TEX_FMT_NONE = 0, + PC_TEX_FMT_BGRA32 = 1, +}; + +PC_TexFormat TexDecoder_Decode(u8 *dst, const u8 *src, int width, int height, int texformat, int tlutaddr, int tlutfmt); + +u32 TexDecoder_GetSafeTextureHash(const u8 *src, int width, int height, int texformat, u32 seed=0); +u32 TexDecoder_GetTlutHash(const u16 *src, int len); + +void TexDecoder_SetTexFmtOverlayOptions(bool enable, bool center); + +#endif diff --git a/Source/Core/VideoCommon/Src/VertexShader.h b/Source/Core/VideoCommon/Src/VertexShader.h index 1c89374132..309a6ab8b5 100644 --- a/Source/Core/VideoCommon/Src/VertexShader.h +++ b/Source/Core/VideoCommon/Src/VertexShader.h @@ -1,51 +1,51 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef GCOGL_VERTEXSHADER_H
-#define GCOGL_VERTEXSHADER_H
-
-#include "XFMemory.h"
-
-#define SHADER_POSMTX_ATTRIB 1
-#define SHADER_NORM1_ATTRIB 6
-#define SHADER_NORM2_ATTRIB 7
-
-
-// shader variables
-#define I_POSNORMALMATRIX "cpnmtx"
-#define I_PROJECTION "cproj"
-#define I_MATERIALS "cmtrl"
-#define I_LIGHTS "clights"
-#define I_TEXMATRICES "ctexmtx"
-#define I_TRANSFORMMATRICES "ctrmtx"
-#define I_NORMALMATRICES "cnmtx"
-#define I_POSTTRANSFORMMATRICES "cpostmtx"
-#define I_FOGPARAMS "cfog"
-
-#define C_POSNORMALMATRIX 0
-#define C_PROJECTION (C_POSNORMALMATRIX+6)
-#define C_MATERIALS (C_PROJECTION+4)
-#define C_LIGHTS (C_MATERIALS+4)
-#define C_TEXMATRICES (C_LIGHTS+40)
-#define C_TRANSFORMMATRICES (C_TEXMATRICES+24)
-#define C_NORMALMATRICES (C_TRANSFORMMATRICES+64)
-#define C_POSTTRANSFORMMATRICES (C_NORMALMATRICES+32)
-#define C_FOGPARAMS (C_POSTTRANSFORMMATRICES+64)
-
-char *GenerateVertexShader(u32 components, bool has_zbuffer_target);
-
-#endif
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef GCOGL_VERTEXSHADER_H +#define GCOGL_VERTEXSHADER_H + +#include "XFMemory.h" + +#define SHADER_POSMTX_ATTRIB 1 +#define SHADER_NORM1_ATTRIB 6 +#define SHADER_NORM2_ATTRIB 7 + + +// shader variables +#define I_POSNORMALMATRIX "cpnmtx" +#define I_PROJECTION "cproj" +#define I_MATERIALS "cmtrl" +#define I_LIGHTS "clights" +#define I_TEXMATRICES "ctexmtx" +#define I_TRANSFORMMATRICES "ctrmtx" +#define I_NORMALMATRICES "cnmtx" +#define I_POSTTRANSFORMMATRICES "cpostmtx" +#define I_FOGPARAMS "cfog" + +#define C_POSNORMALMATRIX 0 +#define C_PROJECTION (C_POSNORMALMATRIX+6) +#define C_MATERIALS (C_PROJECTION+4) +#define C_LIGHTS (C_MATERIALS+4) +#define C_TEXMATRICES (C_LIGHTS+40) +#define C_TRANSFORMMATRICES (C_TEXMATRICES+24) +#define C_NORMALMATRICES (C_TRANSFORMMATRICES+64) +#define C_POSTTRANSFORMMATRICES (C_NORMALMATRICES+32) +#define C_FOGPARAMS (C_POSTTRANSFORMMATRICES+64) + +char *GenerateVertexShader(u32 components, bool has_zbuffer_target); + +#endif diff --git a/Source/Core/VideoCommon/Src/VideoState.h b/Source/Core/VideoCommon/Src/VideoState.h index 2fd1d5f366..28230f0021 100644 --- a/Source/Core/VideoCommon/Src/VideoState.h +++ b/Source/Core/VideoCommon/Src/VideoState.h @@ -1,26 +1,26 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef __VIDEOSTATE_H
-#define __VIDEOSTATE_H
-
-#include "Common.h"
-#include "ChunkFile.h"
-
-void VideoCommon_DoState(PointerWrap &p);
-
-#endif
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef __VIDEOSTATE_H +#define __VIDEOSTATE_H + +#include "Common.h" +#include "ChunkFile.h" + +void VideoCommon_DoState(PointerWrap &p); + +#endif diff --git a/Source/Core/VideoCommon/Src/XFBConvert.h b/Source/Core/VideoCommon/Src/XFBConvert.h index 1756d3af0a..f1a41a245e 100644 --- a/Source/Core/VideoCommon/Src/XFBConvert.h +++ b/Source/Core/VideoCommon/Src/XFBConvert.h @@ -1,31 +1,31 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef _XFB_CONVERT
-#define _XFB_CONVERT
-
-#include "Common.h"
-
-void InitXFBConvTables();
-
-// Converts 4:2:2 YUV (YUYV) data to 32-bit RGBA data.
-void ConvertFromXFB(u32 *dst, const u8* _pXFB, int width, int height);
-
-// Converts 32-bit RGBA data to 4:2:2 YUV (YUYV) data.
-void ConvertToXFB(u32 *dst, const u8* _pEFB, int width, int height);
-
-#endif
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _XFB_CONVERT +#define _XFB_CONVERT + +#include "Common.h" + +void InitXFBConvTables(); + +// Converts 4:2:2 YUV (YUYV) data to 32-bit RGBA data. +void ConvertFromXFB(u32 *dst, const u8* _pXFB, int width, int height); + +// Converts 32-bit RGBA data to 4:2:2 YUV (YUYV) data. +void ConvertToXFB(u32 *dst, const u8* _pEFB, int width, int height); + +#endif diff --git a/Source/Core/VideoCommon/Src/XFMemory.h b/Source/Core/VideoCommon/Src/XFMemory.h index 398b0caa7d..92b78ae890 100644 --- a/Source/Core/VideoCommon/Src/XFMemory.h +++ b/Source/Core/VideoCommon/Src/XFMemory.h @@ -1,204 +1,204 @@ -// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef _XFMEMORY_H
-#define _XFMEMORY_H
-
-#include "Common.h"
-
-/////////////
-// Lighting
-/////////////
-
-#define XF_TEXPROJ_ST 0
-#define XF_TEXPROJ_STQ 1
-
-#define XF_TEXINPUT_AB11 0
-#define XF_TEXINPUT_ABC1 1
-
-#define XF_TEXGEN_REGULAR 0
-#define XF_TEXGEN_EMBOSS_MAP 1 // used when bump mapping
-#define XF_TEXGEN_COLOR_STRGBC0 2
-#define XF_TEXGEN_COLOR_STRGBC1 3
-
-#define XF_SRCGEOM_INROW 0 // input is abc
-#define XF_SRCNORMAL_INROW 1 // input is abc
-#define XF_SRCCOLORS_INROW 2
-#define XF_SRCBINORMAL_T_INROW 3 // input is abc
-#define XF_SRCBINORMAL_B_INROW 4 // input is abc
-#define XF_SRCTEX0_INROW 5
-#define XF_SRCTEX1_INROW 6
-#define XF_SRCTEX2_INROW 7
-#define XF_SRCTEX3_INROW 8
-#define XF_SRCTEX4_INROW 9
-#define XF_SRCTEX5_INROW 10
-#define XF_SRCTEX6_INROW 11
-#define XF_SRCTEX7_INROW 12
-
-#define GX_SRC_REG 0
-#define GX_SRC_VTX 1
-
-struct Light
-{
- u32 useless[3];
- u32 color; //rgba
- float a0; //attenuation
- float a1;
- float a2;
- float k0; //k stuff
- float k1;
- float k2;
- union
- {
- struct {
- float dpos[3];
- float ddir[3]; // specular lights only
- };
- struct {
- float sdir[3];
- float shalfangle[3]; // specular lights only
- };
- };
-};
-
-#define LIGHTDIF_NONE 0
-#define LIGHTDIF_SIGN 1
-#define LIGHTDIF_CLAMP 2
-
-#define LIGHTATTN_SPEC 0 // specular attenuation
-#define LIGHTATTN_SPOT 1 // distance/spotlight attenuation
-#define LIGHTATTN_NONE 2
-#define LIGHTATTN_DIR 3
-
-union LitChannel
-{
- struct
- {
- unsigned matsource : 1;
- unsigned enablelighting : 1;
- unsigned lightMask0_3 : 4;
- unsigned ambsource : 1;
- unsigned diffusefunc : 2; // LIGHTDIF_X
- unsigned attnfunc : 2; // LIGHTATTN_X
- unsigned lightMask4_7 : 4;
- };
- struct
- {
- u32 hex : 15;
- u32 unused : 17;
- };
- struct
- {
- u32 dummy0 : 7;
- u32 lightparams : 4;
- u32 dummy1 : 21;
- };
- unsigned int GetFullLightMask() const
- {
- return enablelighting ? (lightMask0_3 | (lightMask4_7 << 4)) : 0;
- }
-};
-
-struct ColorChannel
-{
- u32 ambColor;
- u32 matColor;
- LitChannel color;
- LitChannel alpha;
-};
-
-union INVTXSPEC
-{
- struct
- {
- unsigned numcolors : 2;
- unsigned numnormals : 2; // 0 - nothing, 1 - just normal, 2 - normals and binormals
- unsigned numtextures : 4;
- unsigned unused : 24;
- };
- u32 hex;
-};
-
-union TexMtxInfo
-{
- struct
- {
- unsigned unknown : 1;
- unsigned projection : 1; // XF_TEXPROJ_X
- unsigned inputform : 2; // XF_TEXINPUT_X
- unsigned texgentype : 3; // XF_TEXGEN_X
- unsigned sourcerow : 5; // XF_SRCGEOM_X
- unsigned embosssourceshift : 3; // what generated texcoord to use
- unsigned embosslightshift : 3; // light index that is used
- };
- u32 hex;
-};
-
-union PostMtxInfo
-{
- struct
- {
- unsigned index : 6; // base row of dual transform matrix
- unsigned unused : 2;
- unsigned normalize : 1; // normalize before send operation
- };
- u32 hex;
-};
-
-struct TexCoordInfo
-{
- TexMtxInfo texmtxinfo;
- PostMtxInfo postmtxinfo;
-};
-
-struct XFRegisters
-{
- int numTexGens;
- int nNumChans;
- INVTXSPEC hostinfo; // number of textures,colors,normals from vertex input
- ColorChannel colChans[2]; //C0A0 C1A1
- TexCoordInfo texcoords[8];
- bool bEnableDualTexTransform;
- float rawViewport[6];
- float rawProjection[7];
-};
-
-#define XFMEM_SIZE 0x8000
-#define XFMEM_POSMATRICES 0x000
-#define XFMEM_POSMATRICES_END 0x100
-#define XFMEM_NORMALMATRICES 0x400
-#define XFMEM_NORMALMATRICES_END 0x460
-#define XFMEM_POSTMATRICES 0x500
-#define XFMEM_POSTMATRICES_END 0x600
-#define XFMEM_LIGHTS 0x600
-#define XFMEM_LIGHTS_END 0x680
-
-struct Viewport
-{
- float wd;
- float ht;
- float nearZ;
- float xOrig;
- float yOrig;
- float farZ;
-};
-
-extern XFRegisters xfregs;
-extern u32 xfmem[XFMEM_SIZE];
-
-#endif
-
+// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _XFMEMORY_H +#define _XFMEMORY_H + +#include "Common.h" + +///////////// +// Lighting +///////////// + +#define XF_TEXPROJ_ST 0 +#define XF_TEXPROJ_STQ 1 + +#define XF_TEXINPUT_AB11 0 +#define XF_TEXINPUT_ABC1 1 + +#define XF_TEXGEN_REGULAR 0 +#define XF_TEXGEN_EMBOSS_MAP 1 // used when bump mapping +#define XF_TEXGEN_COLOR_STRGBC0 2 +#define XF_TEXGEN_COLOR_STRGBC1 3 + +#define XF_SRCGEOM_INROW 0 // input is abc +#define XF_SRCNORMAL_INROW 1 // input is abc +#define XF_SRCCOLORS_INROW 2 +#define XF_SRCBINORMAL_T_INROW 3 // input is abc +#define XF_SRCBINORMAL_B_INROW 4 // input is abc +#define XF_SRCTEX0_INROW 5 +#define XF_SRCTEX1_INROW 6 +#define XF_SRCTEX2_INROW 7 +#define XF_SRCTEX3_INROW 8 +#define XF_SRCTEX4_INROW 9 +#define XF_SRCTEX5_INROW 10 +#define XF_SRCTEX6_INROW 11 +#define XF_SRCTEX7_INROW 12 + +#define GX_SRC_REG 0 +#define GX_SRC_VTX 1 + +struct Light +{ + u32 useless[3]; + u32 color; //rgba + float a0; //attenuation + float a1; + float a2; + float k0; //k stuff + float k1; + float k2; + union + { + struct { + float dpos[3]; + float ddir[3]; // specular lights only + }; + struct { + float sdir[3]; + float shalfangle[3]; // specular lights only + }; + }; +}; + +#define LIGHTDIF_NONE 0 +#define LIGHTDIF_SIGN 1 +#define LIGHTDIF_CLAMP 2 + +#define LIGHTATTN_SPEC 0 // specular attenuation +#define LIGHTATTN_SPOT 1 // distance/spotlight attenuation +#define LIGHTATTN_NONE 2 +#define LIGHTATTN_DIR 3 + +union LitChannel +{ + struct + { + unsigned matsource : 1; + unsigned enablelighting : 1; + unsigned lightMask0_3 : 4; + unsigned ambsource : 1; + unsigned diffusefunc : 2; // LIGHTDIF_X + unsigned attnfunc : 2; // LIGHTATTN_X + unsigned lightMask4_7 : 4; + }; + struct + { + u32 hex : 15; + u32 unused : 17; + }; + struct + { + u32 dummy0 : 7; + u32 lightparams : 4; + u32 dummy1 : 21; + }; + unsigned int GetFullLightMask() const + { + return enablelighting ? (lightMask0_3 | (lightMask4_7 << 4)) : 0; + } +}; + +struct ColorChannel +{ + u32 ambColor; + u32 matColor; + LitChannel color; + LitChannel alpha; +}; + +union INVTXSPEC +{ + struct + { + unsigned numcolors : 2; + unsigned numnormals : 2; // 0 - nothing, 1 - just normal, 2 - normals and binormals + unsigned numtextures : 4; + unsigned unused : 24; + }; + u32 hex; +}; + +union TexMtxInfo +{ + struct + { + unsigned unknown : 1; + unsigned projection : 1; // XF_TEXPROJ_X + unsigned inputform : 2; // XF_TEXINPUT_X + unsigned texgentype : 3; // XF_TEXGEN_X + unsigned sourcerow : 5; // XF_SRCGEOM_X + unsigned embosssourceshift : 3; // what generated texcoord to use + unsigned embosslightshift : 3; // light index that is used + }; + u32 hex; +}; + +union PostMtxInfo +{ + struct + { + unsigned index : 6; // base row of dual transform matrix + unsigned unused : 2; + unsigned normalize : 1; // normalize before send operation + }; + u32 hex; +}; + +struct TexCoordInfo +{ + TexMtxInfo texmtxinfo; + PostMtxInfo postmtxinfo; +}; + +struct XFRegisters +{ + int numTexGens; + int nNumChans; + INVTXSPEC hostinfo; // number of textures,colors,normals from vertex input + ColorChannel colChans[2]; //C0A0 C1A1 + TexCoordInfo texcoords[8]; + bool bEnableDualTexTransform; + float rawViewport[6]; + float rawProjection[7]; +}; + +#define XFMEM_SIZE 0x8000 +#define XFMEM_POSMATRICES 0x000 +#define XFMEM_POSMATRICES_END 0x100 +#define XFMEM_NORMALMATRICES 0x400 +#define XFMEM_NORMALMATRICES_END 0x460 +#define XFMEM_POSTMATRICES 0x500 +#define XFMEM_POSTMATRICES_END 0x600 +#define XFMEM_LIGHTS 0x600 +#define XFMEM_LIGHTS_END 0x680 + +struct Viewport +{ + float wd; + float ht; + float nearZ; + float xOrig; + float yOrig; + float farZ; +}; + +extern XFRegisters xfregs; +extern u32 xfmem[XFMEM_SIZE]; + +#endif + |
