Delete various unused files.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5909 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
378d3aaa52
commit
a2e39a84f3
Binary file not shown.
Binary file not shown.
|
@ -893,10 +893,6 @@
|
|||
RelativePath=".\Src\stdafx.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Src\Vec3.h"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
|
|
|
@ -1,75 +0,0 @@
|
|||
// Copyright (C) 2003 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/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "CPStructs.h"
|
||||
#include "XFStructs.h"
|
||||
#include "VertexManager.h"
|
||||
#include "VertexLoader.h"
|
||||
|
||||
// PROBLEM - matrix switching within vbuffers may be stateful!
|
||||
|
||||
void CPUpdateMatricesA()
|
||||
{
|
||||
const float *flipmem = (const float *)xfmem;
|
||||
CTransformEngine::SetPosNormalMatrix(
|
||||
flipmem + MatrixIndexA.PosNormalMtxIdx * 4, //CHECK
|
||||
flipmem + 0x400 + 3 * (MatrixIndexA.PosNormalMtxIdx & 31)); //CHECK
|
||||
CTransformEngine::SetTexMatrix(0,flipmem + MatrixIndexA.Tex0MtxIdx * 4);
|
||||
CTransformEngine::SetTexMatrix(1,flipmem + MatrixIndexA.Tex1MtxIdx * 4);
|
||||
CTransformEngine::SetTexMatrix(2,flipmem + MatrixIndexA.Tex2MtxIdx * 4);
|
||||
CTransformEngine::SetTexMatrix(3,flipmem + MatrixIndexA.Tex3MtxIdx * 4);
|
||||
}
|
||||
|
||||
void CPUpdateMatricesB()
|
||||
{
|
||||
float *flipmem = (float *)xfmem;
|
||||
CTransformEngine::SetTexMatrix(4,flipmem + MatrixIndexB.Tex4MtxIdx * 4);
|
||||
CTransformEngine::SetTexMatrix(5,flipmem + MatrixIndexB.Tex5MtxIdx * 4);
|
||||
CTransformEngine::SetTexMatrix(6,flipmem + MatrixIndexB.Tex6MtxIdx * 4);
|
||||
CTransformEngine::SetTexMatrix(7,flipmem + MatrixIndexB.Tex7MtxIdx * 4);
|
||||
}
|
||||
|
||||
void LoadCPReg(u32 SubCmd, u32 Value)
|
||||
{
|
||||
switch (SubCmd & 0xF0)
|
||||
{
|
||||
case 0x30:
|
||||
MatrixIndexA.Hex = Value;
|
||||
CPUpdateMatricesA();
|
||||
break;
|
||||
case 0x40:
|
||||
MatrixIndexB.Hex = Value;
|
||||
CPUpdateMatricesB();
|
||||
break;
|
||||
|
||||
case 0x50:
|
||||
VertexManager::Flush(); VertexLoader::SetVtxDesc_Lo(Value);
|
||||
break;
|
||||
case 0x60:
|
||||
VertexManager::Flush(); VertexLoader::SetVtxDesc_Hi(Value);
|
||||
break;
|
||||
|
||||
case 0x70: g_VertexLoaders[SubCmd & 7].SetVAT_group0(Value); _assert_((SubCmd & 0x0F) < 8); break;
|
||||
case 0x80: g_VertexLoaders[SubCmd & 7].SetVAT_group1(Value); _assert_((SubCmd & 0x0F) < 8); break;
|
||||
case 0x90: g_VertexLoaders[SubCmd & 7].SetVAT_group2(Value); _assert_((SubCmd & 0x0F) < 8); break;
|
||||
|
||||
case 0xA0: arraybases[SubCmd & 0xF] = Value & 0xFFFFFFFF; break;
|
||||
case 0xB0: arraystrides[SubCmd & 0xF] = Value & 0xFF; break;
|
||||
}
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
// Copyright (C) 2003 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 _CPSTRUCTS_H
|
||||
#define _CPSTRUCTS_H
|
||||
|
||||
#include "Common.h"
|
||||
#include "CPMemory.h"
|
||||
#include "XFMemory.h"
|
||||
|
||||
void CPUpdateMatricesA();
|
||||
void CPUpdateMatricesB();
|
||||
void LoadCPReg(u32 SubCmd, u32 Value);
|
||||
|
||||
#endif
|
|
@ -1,468 +0,0 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
#if 0
|
||||
|
||||
#include "OpcodeDecoding.h"
|
||||
#include "VertexLoader.h"
|
||||
#include "VertexHandler.h"
|
||||
#include "DataReader.h"
|
||||
#include "BPStructs.h"
|
||||
#include "CPStructs.h"
|
||||
#include "XFStructs.h"
|
||||
#include "DLCompiler.h"
|
||||
#include "x86.h"
|
||||
#include "main.h"
|
||||
#include "Utils.h"
|
||||
|
||||
CompiledDList::CompiledDList(u32 _addr, u32 _size)
|
||||
{
|
||||
dataSize = 0;
|
||||
data = 0;
|
||||
code = 0;
|
||||
addr = _addr;
|
||||
size = _size;
|
||||
pass = 0;
|
||||
numBatches = 0;
|
||||
batches = 0;
|
||||
}
|
||||
|
||||
CompiledDList::~CompiledDList()
|
||||
{
|
||||
if (data)
|
||||
delete [] data;
|
||||
if (code)
|
||||
delete [] code;
|
||||
if (batches)
|
||||
delete [] batches;
|
||||
}
|
||||
|
||||
|
||||
bool CompiledDList::Call()
|
||||
{
|
||||
switch(pass) {
|
||||
case 0: // First compiling pass : find data size
|
||||
if (Pass1())
|
||||
{
|
||||
pass = 1;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
case 1: // Second compiling pass : actually compile
|
||||
//if pass1 succeeded, pass2 will too
|
||||
Pass2();
|
||||
pass = 2;
|
||||
return true;
|
||||
case 2: // Run pass - we have a compiled dlist, just call it
|
||||
Run();
|
||||
return true;
|
||||
default:
|
||||
//ERROR
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool CompiledDList::Pass1()
|
||||
{
|
||||
/* //find the size of code + data, if the dlist is worth recompiling etc
|
||||
// at the same time, do the ordinary stuff
|
||||
g_pDataReader = &dlistReader;
|
||||
OpcodeReaders::SetDListReader(addr, addr+size);
|
||||
dataSize = 0;
|
||||
codeSize = 0;
|
||||
numBatches = 0;
|
||||
bool lastIsPrim = false;
|
||||
while (OpcodeReaders::IsDListOKToRead())
|
||||
{
|
||||
int Cmd = g_pDataReader->Read8();
|
||||
switch(Cmd)
|
||||
{
|
||||
case GX_LOAD_CP_REG: //0x08
|
||||
{
|
||||
u32 SubCmd = g_pDataReader->Read8();
|
||||
u32 Value = g_pDataReader->Read32();
|
||||
LoadCPReg(SubCmd,Value);
|
||||
//COMPILER
|
||||
codeSize+=13;
|
||||
}
|
||||
break;
|
||||
|
||||
case GX_LOAD_XF_REG:
|
||||
{
|
||||
u32 Cmd2 = g_pDataReader->Read32();
|
||||
int dwTransferSize = ((Cmd2>>16)&15) + 1;
|
||||
DWORD dwAddress = Cmd2 & 0xFFFF;
|
||||
static u32 pData[16];
|
||||
for (int i=0; i<dwTransferSize; i++)
|
||||
pData[i] = g_pDataReader->Read32();
|
||||
LoadXFReg(dwTransferSize,dwAddress,pData);
|
||||
//COMPILER
|
||||
dataSize+=dwTransferSize;
|
||||
codeSize+=17;
|
||||
}
|
||||
break;
|
||||
|
||||
case GX_LOAD_BP_REG: //0x61
|
||||
{
|
||||
u32 cmd=g_pDataReader->Read32();
|
||||
LoadBPReg(cmd);
|
||||
codeSize+=9;
|
||||
}
|
||||
break;
|
||||
|
||||
case GX_LOAD_INDX_A: //used for position matrices
|
||||
LoadIndexedXF(g_pDataReader->Read32(),0xC);
|
||||
codeSize+=13;
|
||||
break;
|
||||
case GX_LOAD_INDX_B: //used for normal matrices
|
||||
LoadIndexedXF(g_pDataReader->Read32(),0xD);
|
||||
codeSize+=13;
|
||||
break;
|
||||
case GX_LOAD_INDX_C: //used for postmatrices
|
||||
LoadIndexedXF(g_pDataReader->Read32(),0xE);
|
||||
codeSize+=13;
|
||||
break;
|
||||
case GX_LOAD_INDX_D: //used for lights
|
||||
LoadIndexedXF(g_pDataReader->Read32(),0xF);
|
||||
codeSize+=13;
|
||||
break;
|
||||
|
||||
case GX_CMD_CALL_DL:
|
||||
MessageBox(0,"Display lists can't recurse!!","error",0);
|
||||
break;
|
||||
|
||||
case GX_CMD_INVL_VC:// Invalidate (vertex cache?)
|
||||
break;
|
||||
case GX_NOP:
|
||||
break;
|
||||
default:
|
||||
if (Cmd&0x80)
|
||||
{
|
||||
int primitive = (Cmd&GX_PRIMITIVE_MASK) >> GX_PRIMITIVE_SHIFT;
|
||||
if (lastIsPrim)
|
||||
{
|
||||
//join to last
|
||||
}
|
||||
else
|
||||
{
|
||||
//finish up last and commit
|
||||
}
|
||||
u16 numVertices = g_pDataReader->Read16();
|
||||
tempvarray.Reset();
|
||||
VertexLoader::SetVArray(&tempvarray);
|
||||
VertexLoader *loader = &VertexLoader[Cmd&GX_VAT_MASK];
|
||||
loader->Setup();
|
||||
loader->PrepareRun();
|
||||
int vsize = loader->GetVertexSize();
|
||||
loader->RunVertices(numVertices);
|
||||
CVertexHandler::DrawVertices(primitive, numVertices, &tempvarray);
|
||||
CVertexHandler::Flush();
|
||||
//COMPILER
|
||||
codeSize+=21;
|
||||
numBatches++;
|
||||
lastIsPrim = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (lastIsPrim)
|
||||
{
|
||||
//finish up last and commit
|
||||
}
|
||||
codeSize*=2;*/
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void CompiledDList::Pass2()
|
||||
{
|
||||
/* OpcodeReaders::SetDListReader(addr, addr+size);
|
||||
|
||||
data = new u32[dataSize];
|
||||
code = new u8[codeSize]; //at least
|
||||
|
||||
batches = new Batch[numBatches];
|
||||
int batchCount = 0;
|
||||
u32 *dataptr = data;
|
||||
|
||||
x86Init();
|
||||
x86SetPtr((s8*)code);
|
||||
//WC8(0xCC);
|
||||
|
||||
//actually do the recompiling, emit code and data, protect the memory
|
||||
// but again, at the same time do the ordinary stuff
|
||||
// so the compiled display list won't be run until the third time actually
|
||||
bool dump = false,lastIsGeom=false;
|
||||
FILE *f;
|
||||
|
||||
#ifndef TEASER
|
||||
if (dump)
|
||||
{
|
||||
f=fopen("D:\\dlistlogs.txt","a");
|
||||
fprintf(f,"===========================================\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
while (OpcodeReaders::IsDListOKToRead())
|
||||
{
|
||||
int Cmd = g_pDataReader->Read8();
|
||||
switch(Cmd)
|
||||
{
|
||||
case GX_LOAD_CP_REG: //0x08
|
||||
{
|
||||
lastIsGeom = false;
|
||||
u32 SubCmd = g_pDataReader->Read8();
|
||||
u32 Value = g_pDataReader->Read32();
|
||||
if (dump)
|
||||
fprintf(f,"CP | %02x %08x\n",SubCmd,Value);
|
||||
|
||||
LoadCPReg(SubCmd,Value);
|
||||
//COMPILER
|
||||
PUSH_WordToStack(Value);
|
||||
PUSH_WordToStack(SubCmd);
|
||||
CALLFunc((u32)LoadCPReg);
|
||||
}
|
||||
break;
|
||||
|
||||
case GX_LOAD_XF_REG:
|
||||
{
|
||||
lastIsGeom = false;
|
||||
u32 Cmd2 = g_pDataReader->Read32();
|
||||
int dwTransferSize = ((Cmd2>>16)&15) + 1;
|
||||
u32 dwAddress = Cmd2 & 0xFFFF;
|
||||
static u32 pData[16];
|
||||
|
||||
u32 *oldDataPtr = dataptr;
|
||||
|
||||
if (dump)
|
||||
{
|
||||
fprintf(f,"XF | %01xx %04x\n",dwTransferSize,dwAddress);
|
||||
for (int i=0; i<dwTransferSize; i++)
|
||||
fprintf(f, "%08x | %f\n",oldDataPtr[i], *((float*)oldDataPtr+i));
|
||||
}
|
||||
|
||||
|
||||
for (int i=0; i<dwTransferSize; i++) // a little compiler here too
|
||||
*dataptr++ = g_pDataReader->Read32();
|
||||
|
||||
|
||||
LoadXFReg(dwTransferSize,dwAddress,oldDataPtr);
|
||||
|
||||
//COMPILER
|
||||
PUSH_WordToStack((u32)oldDataPtr);
|
||||
PUSH_WordToStack(dwAddress);
|
||||
PUSH_WordToStack(dwTransferSize);
|
||||
CALLFunc((u32)LoadXFReg);
|
||||
}
|
||||
break;
|
||||
|
||||
case GX_LOAD_BP_REG: //0x61
|
||||
{
|
||||
lastIsGeom = false;
|
||||
u32 cmd=g_pDataReader->Read32();
|
||||
if (dump)
|
||||
fprintf(f,"BP | %08x\n",cmd);
|
||||
|
||||
LoadBPReg(cmd);
|
||||
//COMPILER
|
||||
PUSH_WordToStack(cmd);
|
||||
CALLFunc((u32)LoadBPReg);
|
||||
}
|
||||
break;
|
||||
|
||||
case GX_LOAD_INDX_A: //usually used for position matrices
|
||||
{
|
||||
lastIsGeom = false;
|
||||
u32 value = g_pDataReader->Read32();
|
||||
LoadIndexedXF(value,0xC);
|
||||
//COMPILER
|
||||
PUSH_WordToStack(0xC);
|
||||
PUSH_WordToStack(value);
|
||||
CALLFunc((u32)LoadIndexedXF);
|
||||
if (dump)
|
||||
fprintf(f,"LOADINDEXA | pos matrix\n");
|
||||
}
|
||||
break;
|
||||
case GX_LOAD_INDX_B: //usually used for normal matrices
|
||||
{
|
||||
lastIsGeom = false;
|
||||
u32 value = g_pDataReader->Read32();
|
||||
LoadIndexedXF(value,0xD);
|
||||
//COMPILER
|
||||
PUSH_WordToStack(0xD);
|
||||
PUSH_WordToStack(value);
|
||||
CALLFunc((u32)LoadIndexedXF);
|
||||
if (dump)
|
||||
fprintf(f,"LOADINDEXB | nrm matrix\n");
|
||||
}
|
||||
break;
|
||||
case GX_LOAD_INDX_C: //usually used for postmatrices
|
||||
{
|
||||
lastIsGeom = false;
|
||||
u32 value = g_pDataReader->Read32();
|
||||
LoadIndexedXF(value,0xE);
|
||||
//COMPILER
|
||||
PUSH_WordToStack(0xE);
|
||||
PUSH_WordToStack(value);
|
||||
CALLFunc((u32)LoadIndexedXF);
|
||||
if (dump)
|
||||
fprintf(f,"LOADINDEXC | post matrix\n");
|
||||
}
|
||||
break;
|
||||
case GX_LOAD_INDX_D: //usually used for lights
|
||||
{
|
||||
lastIsGeom = false;
|
||||
u32 value = g_pDataReader->Read32();
|
||||
LoadIndexedXF(value,0xF);
|
||||
//COMPILER
|
||||
PUSH_WordToStack(0xF);
|
||||
PUSH_WordToStack(value);
|
||||
CALLFunc((u32)LoadIndexedXF);
|
||||
if (dump)
|
||||
fprintf(f,"LOADINDEXD | light\n");
|
||||
}
|
||||
break;
|
||||
case GX_CMD_CALL_DL:
|
||||
// ERORRR
|
||||
break;
|
||||
|
||||
case GX_CMD_INVL_VC:// Invalidate (vertex cache?)
|
||||
if (dump)
|
||||
fprintf(f,"invalidate vc\n");
|
||||
break;
|
||||
case GX_NOP:
|
||||
if (dump)
|
||||
fprintf(f,"nop\n");
|
||||
break;
|
||||
default:
|
||||
if (Cmd&0x80)
|
||||
{
|
||||
int primitive = (Cmd&GX_PRIMITIVE_MASK) >> GX_PRIMITIVE_SHIFT;
|
||||
//if (lastIsGeom) INCSTAT(stats.numJoins);
|
||||
u16 numVertices = g_pDataReader->Read16();
|
||||
if (dump)
|
||||
fprintf(f,"DP: prim=%02x numv=%i\n",primitive,numVertices);
|
||||
DecodedVArray &va = batches[batchCount].varray;
|
||||
|
||||
VertexLoader *loader = &VertexLoader[Cmd&GX_VAT_MASK];
|
||||
TVtxDesc &vd = loader->GetVtxDesc();
|
||||
|
||||
VertexLoader::SetVArray(&va);
|
||||
loader->Setup();
|
||||
loader->PrepareRun();
|
||||
// va.numColors = loader->GetNumColors();
|
||||
// va.numUVs = loader->GetNumTCs();
|
||||
// va.numNormals = loader->GetNumNormals();
|
||||
//va.num
|
||||
va.Create(numVertices,vd.PosMatIdx,
|
||||
vd.Tex0MatIdx+vd.Tex1MatIdx+vd.Tex2MatIdx+vd.Tex3MatIdx+
|
||||
vd.Tex4MatIdx+vd.Tex5MatIdx+vd.Tex6MatIdx+vd.Tex7MatIdx,
|
||||
va.numNormals, va.numColors, va.numTCs);
|
||||
|
||||
int vsize = loader->GetVertexSize();
|
||||
loader->RunVertices(numVertices);
|
||||
CVertexHandler::DrawVertices(primitive, numVertices, &va);
|
||||
CVertexHandler::Flush();
|
||||
// YES we have now filled our varray
|
||||
//LETS COMPILE
|
||||
PUSH_WordToStack(primitive);
|
||||
PUSH_WordToStack(batchCount);
|
||||
PUSH_WordToStack((u32)this);
|
||||
CALLFunc((u32)DrawHelperHelper);
|
||||
batchCount++;
|
||||
lastIsGeom = true;
|
||||
if (dump)
|
||||
fprintf(f,"DRAW PRIMITIVE: prim=%02x numv=%i\n",primitive,numVertices);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (dump)
|
||||
{
|
||||
fprintf(f,"***************************************\n\n\n");
|
||||
}
|
||||
RET();
|
||||
if (dump)
|
||||
fclose(f);*/
|
||||
//we're done, next time just kick the compiled list off, much much faster than interpreting!
|
||||
}
|
||||
|
||||
void CompiledDList::DrawHelperHelper(CompiledDList *dl, int vno, int prim)
|
||||
{
|
||||
Batch &b = dl->batches[vno];
|
||||
CVertexHandler::DrawVertices(prim, b.varray.GetSize(), &b.varray);
|
||||
}
|
||||
|
||||
void CompiledDList::Run()
|
||||
{
|
||||
//run the code
|
||||
((void (*)())(code))();
|
||||
CVertexHandler::Flush();
|
||||
}
|
||||
|
||||
DListCache::DLCache DListCache::dlists;
|
||||
|
||||
|
||||
|
||||
void DListCache::Init()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void DListCache::Shutdown()
|
||||
{
|
||||
DLCache::iterator iter = dlists.begin();
|
||||
for (;iter!=dlists.end();iter++)
|
||||
iter->second.Destroy();
|
||||
dlists.clear();
|
||||
}
|
||||
|
||||
|
||||
void DListCache::Call(u32 _addr, u32 _size)
|
||||
{
|
||||
DLCache::iterator iter;
|
||||
iter = dlists.find(_addr);
|
||||
|
||||
if (iter != dlists.end())
|
||||
{
|
||||
if (iter->second.size == _size)
|
||||
{
|
||||
iter->second.dlist->Call();
|
||||
return;
|
||||
}
|
||||
else // wrong size, need to recompile
|
||||
{
|
||||
iter->second.Destroy();
|
||||
iter=dlists.erase(iter);
|
||||
}
|
||||
}
|
||||
|
||||
//Make an entry in the table
|
||||
DLCacheEntry entry;
|
||||
entry.dlist = new CompiledDList(_addr, _size);
|
||||
entry.dlist->Call();
|
||||
entry.frameCount = frameCount;
|
||||
entry.size = _size;
|
||||
dlists[_addr] = entry;
|
||||
|
||||
INCSTAT(stats.numDListsCreated);
|
||||
SETSTAT(stats.numDListsAlive,(int)dlists.size());
|
||||
}
|
||||
|
||||
void DListCache::Cleanup()
|
||||
{
|
||||
for (DLCache::iterator iter=dlists.begin(); iter!=dlists.end();iter++)
|
||||
{
|
||||
DLCacheEntry &entry = iter->second;
|
||||
if (entry.frameCount<frameCount-80)
|
||||
{
|
||||
entry.Destroy();
|
||||
iter = dlists.erase(iter);
|
||||
}
|
||||
}
|
||||
SETSTAT(stats.numDListsAlive,(int)dlists.size());
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,72 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#if 0
|
||||
|
||||
#include "D3DBase.h"
|
||||
#include "DecodedVArray.h"
|
||||
#include <map>
|
||||
|
||||
|
||||
class CompiledDList
|
||||
{
|
||||
u32 *data;
|
||||
int dataSize;
|
||||
int pass;
|
||||
int codeSize;
|
||||
u8 *code;
|
||||
|
||||
struct Batch
|
||||
{
|
||||
DecodedVArray varray;
|
||||
LPDIRECT3DINDEXBUFFER9 ibuffer;
|
||||
int numDraws;
|
||||
};
|
||||
Batch *batches;
|
||||
int numBatches;
|
||||
|
||||
u32 addr, size;
|
||||
bool Compile();
|
||||
bool Pass1();
|
||||
void Pass2();
|
||||
void Run();
|
||||
|
||||
public:
|
||||
CompiledDList(u32 _addr, u32 _size);
|
||||
~CompiledDList();
|
||||
bool Call();
|
||||
static void DrawHelperHelper(CompiledDList *dl, int vno, int prim);
|
||||
};
|
||||
|
||||
class DListCache
|
||||
{
|
||||
struct DLCacheEntry
|
||||
{
|
||||
CompiledDList *dlist;
|
||||
int frameCount;
|
||||
int pass;
|
||||
u32 size;
|
||||
DLCacheEntry()
|
||||
{
|
||||
pass=0;
|
||||
dlist=0;
|
||||
frameCount=0;
|
||||
}
|
||||
void Destroy()
|
||||
{
|
||||
if (dlist)
|
||||
delete dlist;
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::map<DWORD,DLCacheEntry> DLCache;
|
||||
|
||||
static DLCache dlists;
|
||||
|
||||
public:
|
||||
static void Init();
|
||||
static void Cleanup();
|
||||
static void Shutdown();
|
||||
static void Call(u32 _addr, u32 _size);
|
||||
};
|
||||
|
||||
#endif
|
|
@ -1,84 +0,0 @@
|
|||
#ifndef _RGBAFLOAT_H
|
||||
#define _RGBAFLOAT_H
|
||||
|
||||
struct RGBAFloat
|
||||
{
|
||||
float r,g,b,a;
|
||||
RGBAFloat(){a=r=g=b=1.0f;}
|
||||
RGBAFloat(float _r, float _g, float _b, float _a)
|
||||
{
|
||||
r=_r;g=_g;b=_b;a=_a;
|
||||
}
|
||||
void clamp()
|
||||
{
|
||||
if (r>1) r=1;
|
||||
if (g>1) g=1;
|
||||
if (b>1) b=1;
|
||||
if (a>1) a=1;
|
||||
if (r<0) r=0;
|
||||
if (g<0) g=0;
|
||||
if (b<0) b=0;
|
||||
if (a<0) a=0;
|
||||
}
|
||||
void convertToD3DColor(u32 &color)
|
||||
{
|
||||
clamp();
|
||||
color = (int(a*255)<<24) | (int(r*255)<<16) | (int(g*255)<<8) | (int(b*255));
|
||||
}
|
||||
void convertRGB_GC(u32 color)
|
||||
{
|
||||
r=((color>>24)&0xFF)/255.0f;
|
||||
g=((color>>16)&0xFF)/255.0f;
|
||||
b=((color>>8)&0xFF)/255.0f;
|
||||
}
|
||||
void convertRGB(u32 color)
|
||||
{
|
||||
r=((color>>16)&0xFF)/255.0f;
|
||||
g=((color>>8)&0xFF)/255.0f;
|
||||
b=((color)&0xFF)/255.0f;
|
||||
}
|
||||
void convertA(u32 color)
|
||||
{
|
||||
a=((color>>24)&0xFF)/255.0f;
|
||||
}
|
||||
void convertA_GC(u32 color)
|
||||
{
|
||||
a=((color)&0xFF)/255.0f;
|
||||
}
|
||||
void convert(u32 color)
|
||||
{
|
||||
convertRGB(color);
|
||||
convertA(color);
|
||||
}
|
||||
void convert_GC(u32 color)
|
||||
{
|
||||
convertRGB_GC(color);
|
||||
convertA_GC(color);
|
||||
}
|
||||
void operator *=(float f)
|
||||
{
|
||||
r*=f;g*=f;b*=f; a*=f;
|
||||
}
|
||||
RGBAFloat operator *(float f)
|
||||
{
|
||||
return RGBAFloat(r*f,g*f,b*f,a*f);
|
||||
}
|
||||
RGBAFloat operator *(RGBAFloat &o)
|
||||
{
|
||||
return RGBAFloat(r*o.r,g*o.g,b*o.b,a*o.a);
|
||||
}
|
||||
void operator *=(RGBAFloat &o)
|
||||
{
|
||||
r*=o.r;g*=o.g;b*=o.b;a*=o.a;
|
||||
}
|
||||
RGBAFloat operator +(RGBAFloat &o)
|
||||
{
|
||||
return RGBAFloat(r+o.r,g+o.g,b+o.b,a+o.a);
|
||||
}
|
||||
void operator +=(RGBAFloat &o)
|
||||
{
|
||||
r+=o.r;g+=o.g;b+=o.b;a+=o.a;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
|
@ -1,116 +0,0 @@
|
|||
// Copyright (C) 2003 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 _VEC3_H
|
||||
#define _VEC3_H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
class Vec3
|
||||
{
|
||||
public:
|
||||
float x,y,z;
|
||||
Vec3() { }
|
||||
explicit Vec3(float f) {x=y=z=f;}
|
||||
explicit Vec3(const float *f) {x=f[0]; y=f[1]; z=f[2];}
|
||||
Vec3(const float _x, const float _y, const float _z) {
|
||||
x=_x; y=_y; z=_z;
|
||||
}
|
||||
void set(const float _x, const float _y, const float _z) {
|
||||
x=_x; y=_y; z=_z;
|
||||
}
|
||||
Vec3 operator + (const Vec3 &other) const {
|
||||
return Vec3(x+other.x, y+other.y, z+other.z);
|
||||
}
|
||||
void operator += (const Vec3 &other) {
|
||||
x+=other.x; y+=other.y; z+=other.z;
|
||||
}
|
||||
Vec3 operator -(const Vec3 &v) const {
|
||||
return Vec3(x-v.x,y-v.y,z-v.z);
|
||||
}
|
||||
void operator -= (const Vec3 &other)
|
||||
{
|
||||
x-=other.x; y-=other.y; z-=other.z;
|
||||
}
|
||||
Vec3 operator -() const {
|
||||
return Vec3(-x,-y,-z);
|
||||
}
|
||||
|
||||
Vec3 operator * (const float f) const {
|
||||
return Vec3(x*f,y*f,z*f);
|
||||
}
|
||||
Vec3 operator / (const float f) const {
|
||||
float invf = (1.0f/f);
|
||||
return Vec3(x*invf,y*invf,z*invf);
|
||||
}
|
||||
void operator /= (const float f)
|
||||
{
|
||||
*this = *this / f;
|
||||
}
|
||||
float operator * (const Vec3 &other) const {
|
||||
return x*other.x + y*other.y + z*other.z;
|
||||
}
|
||||
void operator *= (const float f) {
|
||||
*this = *this * f;
|
||||
}
|
||||
Vec3 scaled_by(const Vec3 &other) const {
|
||||
return Vec3(x*other.x, y*other.y, z*other.z);
|
||||
}
|
||||
|
||||
Vec3 operator %(const Vec3 &v) const {
|
||||
return Vec3(y*v.z-z*v.y, z*v.x-x*v.z, x*v.y-y*v.x);
|
||||
}
|
||||
float length2() const {
|
||||
return x*x+y*y+z*z;
|
||||
}
|
||||
float length() const {
|
||||
return sqrtf(length2());
|
||||
}
|
||||
float distance2_to(Vec3 &other)
|
||||
{
|
||||
return (other-(*this)).length2();
|
||||
}
|
||||
Vec3 normalized() const {
|
||||
return (*this) / length();
|
||||
|
||||
}
|
||||
void normalize() {
|
||||
(*this) /= length();
|
||||
}
|
||||
float &operator [] (int i)
|
||||
{
|
||||
return *((&x) + i);
|
||||
}
|
||||
const float operator [] (const int i) const
|
||||
{
|
||||
return *((&x) + i);
|
||||
}
|
||||
bool operator == (const Vec3 &other) const
|
||||
{
|
||||
if (x==other.x && y==other.y && z==other.z)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
void setZero()
|
||||
{
|
||||
memset((void *)this,0,sizeof(float)*3);
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
|
@ -1,136 +0,0 @@
|
|||
// Copyright (C) 2003 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/
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "Profiler.h"
|
||||
#include "XFStructs.h"
|
||||
#include "Render.h"
|
||||
#include "main.h"
|
||||
#include "VertexManager.h"
|
||||
#include "Utils.h"
|
||||
|
||||
// LoadXFReg 0x10
|
||||
void LoadXFReg(u32 transferSize, u32 baseAddress, u32 *pData)
|
||||
{
|
||||
DVSTARTPROFILE();
|
||||
u32 address = baseAddress;
|
||||
for (int i = 0; i < (int)transferSize; i++)
|
||||
{
|
||||
address = baseAddress + i;
|
||||
|
||||
// Setup a Matrix
|
||||
if (address < 0x1000)
|
||||
{
|
||||
u32* p1 = &xfmem[address];
|
||||
memcpy(p1, &pData[i], transferSize*4);
|
||||
i += transferSize;
|
||||
}
|
||||
else if (address < 0x2000)
|
||||
{
|
||||
u32 data = pData[i];
|
||||
switch (address)
|
||||
{
|
||||
case 0x1006:
|
||||
//SetGPMetric
|
||||
break;
|
||||
case 0x1008: //__GXXfVtxSpecs, wrote 0004
|
||||
break;
|
||||
case 0x1009: //GXSetNumChans (no)
|
||||
break;
|
||||
case 0x100a: xfregs.colChans[0].ambColor = data; break; //GXSetChanAmbientcolor
|
||||
case 0x100b: xfregs.colChans[1].ambColor = data; break; //GXSetChanAmbientcolor
|
||||
case 0x100c: xfregs.colChans[0].matColor = data; break; //GXSetChanMatcolor (rgba)
|
||||
case 0x100d: xfregs.colChans[1].matColor = data; break; //GXSetChanMatcolor (rgba)
|
||||
|
||||
case 0x100e: xfregs.colChans[0].color.hex = data; break; //color0
|
||||
case 0x100f: xfregs.colChans[1].color.hex = data; break; //color1
|
||||
case 0x1010: xfregs.colChans[0].alpha.hex = data; break; //alpha0
|
||||
case 0x1011: xfregs.colChans[1].alpha.hex = data; break; //alpha1
|
||||
|
||||
case 0x1018:
|
||||
break;
|
||||
|
||||
case 0x101a:
|
||||
VertexManager::Flush();
|
||||
memcpy(xfregs.rawViewport, &pData[i], sizeof(xfregs.rawViewport));
|
||||
XFUpdateVP();
|
||||
i += 6;
|
||||
break;
|
||||
|
||||
case 0x1020:
|
||||
VertexManager::Flush();
|
||||
memcpy(xfregs.rawProjection, &pData[i], sizeof(xfregs.rawProjection));
|
||||
XFUpdatePJ();
|
||||
i += 7;
|
||||
return;
|
||||
|
||||
case 0x103f:
|
||||
xfregs.numTexGens = data;
|
||||
break;
|
||||
|
||||
case 0x1040: xfregs.texcoords[0].texmtxinfo.hex = data; break;
|
||||
case 0x1041: xfregs.texcoords[1].texmtxinfo.hex = data; break;
|
||||
case 0x1042: xfregs.texcoords[2].texmtxinfo.hex = data; break;
|
||||
case 0x1043: xfregs.texcoords[3].texmtxinfo.hex = data; break;
|
||||
case 0x1044: xfregs.texcoords[4].texmtxinfo.hex = data; break;
|
||||
case 0x1045: xfregs.texcoords[5].texmtxinfo.hex = data; break;
|
||||
case 0x1046: xfregs.texcoords[6].texmtxinfo.hex = data; break;
|
||||
case 0x1047: xfregs.texcoords[7].texmtxinfo.hex = data; break;
|
||||
|
||||
case 0x1050: xfregs.texcoords[0].postmtxinfo.hex = data; break;
|
||||
case 0x1051: xfregs.texcoords[1].postmtxinfo.hex = data; break;
|
||||
case 0x1052: xfregs.texcoords[2].postmtxinfo.hex = data; break;
|
||||
case 0x1053: xfregs.texcoords[3].postmtxinfo.hex = data; break;
|
||||
case 0x1054: xfregs.texcoords[4].postmtxinfo.hex = data; break;
|
||||
case 0x1055: xfregs.texcoords[5].postmtxinfo.hex = data; break;
|
||||
case 0x1056: xfregs.texcoords[6].postmtxinfo.hex = data; break;
|
||||
case 0x1057: xfregs.texcoords[7].postmtxinfo.hex = data; break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (address>=0x4000)
|
||||
{
|
||||
// MessageBox(NULL, "1", "1", MB_OK);
|
||||
//4010 __GXSetGenMode
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check docs for this sucker...
|
||||
void LoadIndexedXF(u32 val, int array)
|
||||
{
|
||||
DVSTARTPROFILE();
|
||||
|
||||
int index = val >> 16;
|
||||
int address = val & 0xFFF; //check mask
|
||||
int size = ((val >> 12) & 0xF)+1;
|
||||
//load stuff from array to address in xf mem
|
||||
for (int i = 0; i < size; i++)
|
||||
xfmem[address + i] = Memory_Read_U32(arraybases[array] + arraystrides[array]*index + i*4);
|
||||
}
|
||||
|
||||
void XFUpdateVP()
|
||||
{
|
||||
Renderer::SetViewport(xfregs.rawViewport);
|
||||
}
|
||||
|
||||
void XFUpdatePJ()
|
||||
{
|
||||
Renderer::SetProjection(xfregs.rawProjection, 0);
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
// Copyright (C) 2003 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 _XFSTRUCTS_H
|
||||
#define _XFSTRUCTS_H
|
||||
|
||||
#include "Common.h"
|
||||
#include "Vec3.h"
|
||||
#include "XFMemory.h"
|
||||
|
||||
void XFUpdateVP();
|
||||
void XFUpdatePJ();
|
||||
void LoadXFReg(u32 transferSize, u32 address, u32 *pData);
|
||||
void LoadIndexedXF(u32 val, int array);
|
||||
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -1,27 +0,0 @@
|
|||
/* bmp_io.h 16 May 1999 */
|
||||
|
||||
#ifndef _BMP_IO_H
|
||||
#define _BMP_IO_H
|
||||
|
||||
int bmp_read ( char *filein_name, int *xsize, int *ysize, int **rarray,
|
||||
int **garray, int **barray );
|
||||
int bmp_read_data ( FILE *filein, int xsize, int ysize, int *rarray,
|
||||
int *garray, int *barray );
|
||||
int bmp_read_header ( FILE *filein, int *xsize, int *ysize, int *psize );
|
||||
int bmp_read_palette ( FILE *filein, int psize );
|
||||
int bmp_read_test ( char *filein_name );
|
||||
|
||||
int bmp_write ( char *fileout_name, int xsize, int ysize, char* rgba );
|
||||
int bmp_write_data ( FILE *fileout, int xsize, int ysize, char *rarray, char *garray, char *barray );
|
||||
|
||||
int bmp_write_header ( FILE *fileout, int xsize, int ysize );
|
||||
int bmp_write_test ( char *fileout_name );
|
||||
|
||||
int read_u_long_int ( unsigned long int *u_long_int_val, FILE *filein );
|
||||
int read_u_short_int ( unsigned short int *u_short_int_val, FILE *filein );
|
||||
|
||||
int write_u_long_int ( unsigned long int u_long_int_val, FILE *fileout );
|
||||
int write_u_short_int ( unsigned short int u_short_int_val, FILE *fileout );
|
||||
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue