summaryrefslogtreecommitdiff
path: root/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp
diff options
context:
space:
mode:
authorRodolfo Osvaldo Bogado <rodolfoosvaldobogado@gmail.com>2009-11-22 02:37:00 +0000
committerRodolfo Osvaldo Bogado <rodolfoosvaldobogado@gmail.com>2009-11-22 02:37:00 +0000
commit19d7bb2c844149a434b3ee573a84a267c59b140b (patch)
tree1758f6c28479b1f8605352edb70f049fa2f2a5b7 /Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp
parent7fa29f0b66be853ea79047929037c3df54bf4824 (diff)
big commit, implemented depth textures with hardware support in D3D, so now they will be correct as in opengl. please test a lot because i only tested the ati path, nvidia path is "Theoretical" :).
Also reimplemented screen clearing as a color quad to support alpha blending when clearing as in the original hardware. the funny thing is how is implemented peeking, as locking depth textures is not supported, implemented peeking copying the values form the depth texture to a r32f render target and then reading back the data. please a lot of testing to this commit. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4599 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp')
-rw-r--r--Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp36
1 files changed, 22 insertions, 14 deletions
diff --git a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp
index 827df1da62..6140767986 100644
--- a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp
+++ b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp
@@ -341,29 +341,29 @@ have_texture:
{
case 0: // Z4
case 1: // Z8
- colmat[0] = colmat[4] = colmat[8] = colmat[12] = 255.0f/254.0f;
+ colmat[0] = colmat[4] = colmat[8] = colmat[12] =1.0f;
break;
case 3: // Z16 //?
- colmat[1] = colmat[5] = colmat[9] = colmat[12] = 255.0f/254.0f;
+ colmat[1] = colmat[5] = colmat[9] = colmat[12] = 1.0f;
case 11: // Z16 (reverse order)
- colmat[0] = colmat[4] = colmat[8] = colmat[13] = 255.0f/254.0f;
+ colmat[0] = colmat[4] = colmat[8] = colmat[13] = 1.0f;
break;
case 6: // Z24X8
- colmat[0] = colmat[5] = colmat[10] = 255.0f/254.0f;
+ colmat[0] = colmat[5] = colmat[10] = 1.0f;
break;
case 9: // Z8M
- colmat[1] = colmat[5] = colmat[9] = colmat[13] = 255.0f/254.0f;
+ colmat[1] = colmat[5] = colmat[9] = colmat[13] = 1.0f;
break;
case 10: // Z8L
- colmat[2] = colmat[6] = colmat[10] = colmat[14] = 255.0f/254.0f;
+ colmat[2] = colmat[6] = colmat[10] = colmat[14] = 1.0f;
break;
case 12: // Z16L
- colmat[2] = colmat[6] = colmat[10] = colmat[13] = 255.0f/254.0f;
+ colmat[2] = colmat[6] = colmat[10] = colmat[13] = 1.0f;
break;
default:
ERROR_LOG(VIDEO, "Unknown copy zbuf format: 0x%x", copyfmt);
- colmat[2] = colmat[5] = colmat[8] = 255.0f/254.0f;
+ colmat[2] = colmat[5] = colmat[8] = 1.0f;
break;
}
}
@@ -448,8 +448,6 @@ have_texture:
LPDIRECT3DSURFACE9 Rendersurf = NULL;
tex->GetSurfaceLevel(0,&Rendersurf);
D3D::dev->SetDepthStencilSurface(NULL);
- if(D3D::GetCaps().NumSimultaneousRTs > 1)
- D3D::dev->SetRenderTarget(1, NULL);
D3D::dev->SetRenderTarget(0, Rendersurf);
D3DVIEWPORT9 vp;
@@ -476,12 +474,22 @@ have_texture:
sourcerect.left = targetSource.left;
sourcerect.right = targetSource.right;
sourcerect.top = targetSource.top;
-
- D3D::drawShadedTexQuad(read_texture,&sourcerect, Renderer::GetTargetWidth() , Renderer::GetTargetHeight(),&destrect,(FBManager::GetEFBDepthRTSurfaceFormat() == D3DFMT_R32F && bFromZBuffer)? PixelShaderCache::GetDepthMatrixProgram(): PixelShaderCache::GetColorMatrixProgram(),VertexShaderCache::GetSimpleVertexSahder());
+ if(bFromZBuffer)
+ {
+ D3D::dev->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);
+ D3D::dev->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
+ D3D::dev->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);
+ }
+ D3DFORMAT bformat = FBManager::GetEFBDepthRTSurfaceFormat();
+ D3D::drawShadedTexQuad(read_texture,&sourcerect, Renderer::GetTargetWidth() , Renderer::GetTargetHeight(),&destrect,((bformat != FOURCC_RAWZ && bformat != D3DFMT_D24X8) && bFromZBuffer)? PixelShaderCache::GetDepthMatrixProgram(): PixelShaderCache::GetColorMatrixProgram(),VertexShaderCache::GetSimpleVertexShader());
+ if(bFromZBuffer)
+ {
+ D3D::RefreshSamplerState(0, D3DSAMP_MINFILTER);
+ D3D::RefreshSamplerState(0, D3DSAMP_MAGFILTER);
+ D3D::RefreshSamplerState(0, D3DSAMP_MIPFILTER);
+ }
D3D::dev->SetRenderTarget(0, FBManager::GetEFBColorRTSurface());
- if(D3D::GetCaps().NumSimultaneousRTs > 1)
- D3D::dev->SetRenderTarget(1, FBManager::GetEFBDepthEncodedSurface());
D3D::dev->SetDepthStencilSurface(FBManager::GetEFBDepthRTSurface());
VertexShaderManager::SetViewportChanged();
Renderer::RestoreAPIState();