summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorXTra.KrazzY <XTra.KrazzY@gmail.com>2009-09-24 13:52:45 +0000
committerXTra.KrazzY <XTra.KrazzY@gmail.com>2009-09-24 13:52:45 +0000
commitebfceb16b9192daa907ce50fff7faeb62cedc6de (patch)
treeaaa686712f06e816ebf816a9c31a072865849552 /Source
parent750ad4fb5d031ae83559c8339e69a2e66065a304 (diff)
Some leftover work from unfinished DX9 Access EFB. In DSP HLE, 0x0004,7,b,c are almost done, all that's left to do is resample from 0x50 to _Size.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4313 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source')
-rw-r--r--Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_Zelda_Synth.cpp40
-rw-r--r--Source/Plugins/Plugin_VideoDX9/Src/Render.cpp27
2 files changed, 59 insertions, 8 deletions
diff --git a/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_Zelda_Synth.cpp b/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_Zelda_Synth.cpp
index c2947e1bcc..a1f2024029 100644
--- a/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_Zelda_Synth.cpp
+++ b/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_Zelda_Synth.cpp
@@ -116,6 +116,32 @@ void CUCode_Zelda::RenderSynth_Constant(ZeldaVoicePB &PB, s32* _Buffer, int _Siz
_Buffer[i] = (s32)PB.RatioInt;
}
+// A piece of code from LLE so we can see how the wrap register affects the sound
+
+// HORRIBLE UGLINESS, someone please fix.
+// See http://code.google.com/p/dolphin-emu/source/detail?r=3125
+inline u16 ToMask(u16 a)
+{
+ a = a | (a >> 8);
+ a = a | (a >> 4);
+ a = a | (a >> 2);
+ return a | (a >> 1);
+}
+
+inline s16 AddValueToReg(s16 reg, s32 value)
+{
+ s16 tmp = reg;
+ u16 tmb = ToMask(0x003f);
+
+ for(int i = 0; i < value; i++) {
+ if ((tmp & tmb) == tmb)
+ tmp ^= 0x003f;
+ else
+ tmp++;
+ }
+
+ return tmp;
+}
void CUCode_Zelda::RenderSynth_WaveTable(ZeldaVoicePB &PB, s32* _Buffer, int _Size)
{
@@ -139,24 +165,24 @@ void CUCode_Zelda::RenderSynth_WaveTable(ZeldaVoicePB &PB, s32* _Buffer, int _Si
break;
}
- // TODO: What about the 0x003f wrap register?
+ // TODO: Resample this!
+ WARN_LOG(DSPHLE, "Synthesizing the incomplete format 0x%04x", PB.Format);
- //WARN_LOG(DSPHLE, "Not synthesizing un-REd format 0x%04x", PB.Format);
u64 ACC0 = PB.CurSampleFrac << 6;
- ACC0 &= 0x3f0000;
+ ACC0 &= 0xffff003fffff;
- address += (ACC0 >> 16);
- ACC0 &= 0xffff;
+ address = AddValueToReg(address, ((ACC0 >> 16) & 0xffff));
+ ACC0 &= 0xffff0000ffff;
for(int i = 0; i < _Size; i++)
{
_Buffer[i] = m_MiscTable[address];
ACC0 += PB.RatioInt << 5;
- address += ((ACC0 >> 16) & 0x003f);
+ address = AddValueToReg(address, ((ACC0 >> 16) & 0xffff));
- ACC0 &= 0xffff;
+ ACC0 &= 0xffff0000ffff;
}
ACC0 = address << 16;
diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp b/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp
index 504117860f..effcd36a43 100644
--- a/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp
+++ b/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp
@@ -142,6 +142,7 @@ bool Renderer::Init()
for (int stage = 0; stage < 8; stage++)
D3D::SetSamplerState(stage, D3DSAMP_MAXANISOTROPY, g_ActiveConfig.iMaxAnisotropy);
+ D3D::dev->Clear(0, NULL, D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(255,255,255),1.0f,0);
D3D::dev->Clear(0, NULL, D3DCLEAR_TARGET, 0x0, 0, 0);
D3D::dev->SetRenderTarget(0, FBManager::GetEFBColorRTSurface());
@@ -465,7 +466,31 @@ u32 Renderer::AccessEFB(EFBAccessType type, int x, int y)
int srcY = (targetPixelRc.top + targetPixelRc.bottom) / 2;
u32 z = 0;
- // glReadPixels(srcX, srcY, 1, 1, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, &z);
+ float val = 0.0f;
+
+ LPDIRECT3DSURFACE9 pZBuffer = NULL;
+ if (D3D::dev->GetDepthStencilSurface(&pZBuffer) == D3DERR_NOTFOUND)
+ pZBuffer = NULL;
+
+ //D3DLOCKED_RECT drect;
+ //HRESULT hr;
+
+ if(!pZBuffer) {
+ PanicAlert("No Z-Buffer!");
+ return 0;
+ }
+
+ // TODO: Fix
+ //if((hr = pZBuffer->LockRect(0, &drect, NULL, NULL)) != D3D_OK)
+ // PanicAlert("IT WAS AS I THOUGHT, %s", hr == D3DERR_WASSTILLDRAWING ? "Still drawing" :
+ // hr == D3DERR_INVALIDCALL ? "Invalid call" : "w00t");
+
+ //val = ((float *)drect.pBits)[0];
+
+ //pZBuffer->UnlockRect(0);
+
+ // [0.0, 1.0] ==> [0, 0xFFFFFFFF]
+ z = val * 0xFFFFFFFF;
// Scale the 32-bit value returned by glReadPixels to a 24-bit
// value (GC uses a 24-bit Z-buffer).