summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon
diff options
context:
space:
mode:
authorbushing <bushing@gmail.com>2008-12-08 04:46:09 +0000
committerbushing <bushing@gmail.com>2008-12-08 04:46:09 +0000
commit30c883bcfc65761dc9fb61fea16a25fb61a7e220 (patch)
treef0e77927cfb598e860faf386c7c8089c38a9b726 /Source/Core/VideoCommon
parente6fe5ec42f025a710918c1aaf8643da36a13bb3e (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.h1680
-rw-r--r--Source/Core/VideoCommon/Src/CPMemory.h522
-rw-r--r--Source/Core/VideoCommon/Src/DataReader.h152
-rw-r--r--Source/Core/VideoCommon/Src/Fifo.h70
-rw-r--r--Source/Core/VideoCommon/Src/LookUpTables.h68
-rw-r--r--Source/Core/VideoCommon/Src/NativeVertexFormat.h210
-rw-r--r--Source/Core/VideoCommon/Src/OpcodeDecoding.h102
-rw-r--r--Source/Core/VideoCommon/Src/PixelShader.h88
-rw-r--r--Source/Core/VideoCommon/Src/Profiler.h156
-rw-r--r--Source/Core/VideoCommon/Src/Statistics.h160
-rw-r--r--Source/Core/VideoCommon/Src/TextureDecoder.h170
-rw-r--r--Source/Core/VideoCommon/Src/VertexShader.h102
-rw-r--r--Source/Core/VideoCommon/Src/VideoState.h52
-rw-r--r--Source/Core/VideoCommon/Src/XFBConvert.h62
-rw-r--r--Source/Core/VideoCommon/Src/XFMemory.h408
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
+