summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorRodolfo Osvaldo Bogado <rodolfoosvaldobogado@gmail.com>2010-06-21 02:40:09 +0000
committerRodolfo Osvaldo Bogado <rodolfoosvaldobogado@gmail.com>2010-06-21 02:40:09 +0000
commitfde15c1bc633792bead817b2f87faf54477765b5 (patch)
tree23db593cb8df3e8fd9f6943b0fa33223676daaff /Source
parenta450fd45d83dda4109c16000933a69361667fcc9 (diff)
some fixes to depth test and screen clearing in dx11, now a lot of the remaining graphic errors should be fixed
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5756 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source')
-rw-r--r--Source/Plugins/Plugin_VideoDX11/Src/D3DUtil.cpp34
-rw-r--r--Source/Plugins/Plugin_VideoDX11/Src/Render.cpp22
2 files changed, 28 insertions, 28 deletions
diff --git a/Source/Plugins/Plugin_VideoDX11/Src/D3DUtil.cpp b/Source/Plugins/Plugin_VideoDX11/Src/D3DUtil.cpp
index 18a7513371..debb760fd9 100644
--- a/Source/Plugins/Plugin_VideoDX11/Src/D3DUtil.cpp
+++ b/Source/Plugins/Plugin_VideoDX11/Src/D3DUtil.cpp
@@ -484,6 +484,10 @@ void drawShadedTexQuad(ID3D11ShaderResourceView* texture,
D3D::context->Map(stqvb, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);
memcpy(map.pData, coords, sizeof(coords));
D3D::context->Unmap(stqvb, 0);
+ lastu1 = u1;
+ lastv1 = v1;
+ lastu2 = u2;
+ lastv2 = v2;
}
UINT stride = sizeof(STQVertex);
UINT offset = 0;
@@ -501,10 +505,7 @@ void drawShadedTexQuad(ID3D11ShaderResourceView* texture,
ID3D11ShaderResourceView* texres = NULL;
context->PSSetShaderResources(0, 1, &texres); // immediately unbind the texture
- lastu1 = u1;
- lastv1 = v1;
- lastu2 = u2;
- lastv2 = v2;
+
}
void drawShadedTexSubQuad(ID3D11ShaderResourceView* texture,
@@ -540,6 +541,14 @@ void drawShadedTexSubQuad(ID3D11ShaderResourceView* texture,
D3D::context->Map(stsqvb, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);
memcpy(map.pData, coords, sizeof(coords));
D3D::context->Unmap(stsqvb, 0);
+ lastu1 = u1;
+ lastv1 = v1;
+ lastu2 = u2;
+ lastv2 = v2;
+ lastrdest.left = rDest->left;
+ lastrdest.right = rDest->right;
+ lastrdest.top = rDest->top;
+ lastrdest.bottom = rDest->bottom;
}
UINT stride = sizeof(STSQVertex);
UINT offset = 0;
@@ -557,20 +566,12 @@ void drawShadedTexSubQuad(ID3D11ShaderResourceView* texture,
ID3D11ShaderResourceView* texres = NULL;
context->PSSetShaderResources(0, 1, &texres); // immediately unbind the texture
- lastu1 = u1;
- lastv1 = v1;
- lastu2 = u2;
- lastv2 = v2;
- lastrdest.left = rDest->left;
- lastrdest.right = rDest->right;
- lastrdest.top = rDest->top;
- lastrdest.bottom = rDest->bottom;
+
}
-// TODO: Check whether we're passing Color in the right order (should be RGBA)
void drawClearQuad(u32 Color, float z, ID3D11PixelShader* PShader, ID3D11VertexShader* Vshader, ID3D11InputLayout* layout)
{
- static u32 lastcol = 0;
+ static u32 lastcol = 0x15325376;
static float lastz = -15325.376f; // random value
if (lastcol != Color || lastz != z)
@@ -586,6 +587,8 @@ void drawClearQuad(u32 Color, float z, ID3D11PixelShader* PShader, ID3D11VertexS
context->Map(clearvb, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);
memcpy(map.pData, coords, sizeof(coords));
context->Unmap(clearvb, 0);
+ lastcol = Color;
+ lastz = z;
}
context->VSSetShader(Vshader, NULL, 0);
context->PSSetShader(PShader, NULL, 0);
@@ -598,8 +601,7 @@ void drawClearQuad(u32 Color, float z, ID3D11PixelShader* PShader, ID3D11VertexS
stateman->Apply();
context->Draw(4, 0);
- lastcol = Color;
- lastz = z;
+
}
diff --git a/Source/Plugins/Plugin_VideoDX11/Src/Render.cpp b/Source/Plugins/Plugin_VideoDX11/Src/Render.cpp
index 029040e4f9..f6ee09c31f 100644
--- a/Source/Plugins/Plugin_VideoDX11/Src/Render.cpp
+++ b/Source/Plugins/Plugin_VideoDX11/Src/Render.cpp
@@ -752,7 +752,7 @@ void UpdateViewport()
1.f); // xfregs.rawViewport[5] / 16777216.0f;
D3D::context->RSSetViewports(1, &vp);
}
-
+//Tino: color is pased in bgra mode so need to convert it to rgba
void Renderer::ClearScreen(const EFBRectangle& rc, bool colorEnable, bool alphaEnable, bool zEnable, u32 color, u32 z)
{
TargetRectangle targetRc = Renderer::ConvertEFBRectangle(rc);
@@ -765,13 +765,16 @@ void Renderer::ClearScreen(const EFBRectangle& rc, bool colorEnable, bool alphaE
// always set the scissor in case it was set by the game and has not been reset
D3D11_RECT sirc = CD3D11_RECT(targetRc.left, targetRc.top, targetRc.right, targetRc.bottom);
D3D::context->RSSetScissorRects(1, &sirc);
-
+ u32 rgbaColor = (color & 0xFF00FF00) | ((color >> 16) & 0xFF) | ((color << 16) & 0xFF0000);
D3D::stateman->PushDepthState(cleardepthstates[zEnable]);
D3D::stateman->PushRasterizerState(clearraststate);
- D3D::drawClearQuad(color, (z & 0xFFFFFF) / float(0xFFFFFF), PixelShaderCache::GetClearProgram(), VertexShaderCache::GetClearVertexShader(), VertexShaderCache::GetClearInputLayout());
+ D3D::stateman->PushBlendState(resetblendstate);
+ D3D::stateman->Apply();
+ D3D::drawClearQuad(rgbaColor, (z & 0xFFFFFF) / float(0xFFFFFF), PixelShaderCache::GetClearProgram(), VertexShaderCache::GetClearVertexShader(), VertexShaderCache::GetClearInputLayout());
D3D::stateman->PopDepthState();
D3D::stateman->PopRasterizerState();
+ D3D::stateman->PopBlendState();
UpdateViewport();
SetScissorRect();
}
@@ -1033,23 +1036,18 @@ void Renderer::ResetAPIState()
void Renderer::RestoreAPIState()
{
// TODO: How much of this is actually needed?
- // gets us back into a more game-like state.
-
- // TODO: check whether commenting these lines broke anything
-// D3D::gfxstate->rastdesc.ScissorEnable = TRUE;
+ // gets us back into a more game-like state.
UpdateViewport();
SetScissorRect();
-// if (bpmem.zmode.testenable) D3D::gfxstate->depthdesc.DepthEnable = TRUE;
-// if (bpmem.zmode.updateenable) D3D::gfxstate->depthdesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
SetColorMask();
SetLogicOpMode();
for (;resets;--resets)
{
D3D::stateman->PopBlendState();
D3D::stateman->PopDepthState();
- D3D::stateman->PopRasterizerState();
- D3D::gfxstate->ApplyState();
+ D3D::stateman->PopRasterizerState();
}
+ D3D::gfxstate->ApplyState();
}
void Renderer::SetGenerationMode()
@@ -1068,7 +1066,7 @@ void Renderer::SetDepthMode()
}
else
{
- D3D::gfxstate->depthdesc.DepthEnable = TRUE;
+ D3D::gfxstate->depthdesc.DepthEnable = FALSE;
D3D::gfxstate->depthdesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ZERO;
}
}