dx: don't resize main framebuffer when rendering to texture
dx9 and dx11 renderers were wrongly resizing main framebuffer to 0,0 when rendering to a texture. Fix for MINIDUMP-1W
This commit is contained in:
parent
3441a9ccf0
commit
a8c5af8425
|
@ -411,14 +411,13 @@ void DX11Renderer::setupPixelShaderConstants()
|
||||||
|
|
||||||
bool DX11Renderer::Render()
|
bool DX11Renderer::Render()
|
||||||
{
|
{
|
||||||
resize(pvrrc.framebufferWidth, pvrrc.framebufferHeight);
|
|
||||||
|
|
||||||
// make sure to unbind the framebuffer view before setting it as render target
|
// make sure to unbind the framebuffer view before setting it as render target
|
||||||
ID3D11ShaderResourceView *nullView = nullptr;
|
ID3D11ShaderResourceView *nullView = nullptr;
|
||||||
deviceContext->PSSetShaderResources(0, 1, &nullView);
|
deviceContext->PSSetShaderResources(0, 1, &nullView);
|
||||||
bool is_rtt = pvrrc.isRTT;
|
bool is_rtt = pvrrc.isRTT;
|
||||||
if (!is_rtt)
|
if (!is_rtt)
|
||||||
{
|
{
|
||||||
|
resize(pvrrc.framebufferWidth, pvrrc.framebufferHeight);
|
||||||
deviceContext->OMSetRenderTargets(1, &fbRenderTarget.get(), depthTexView);
|
deviceContext->OMSetRenderTargets(1, &fbRenderTarget.get(), depthTexView);
|
||||||
deviceContext->ClearDepthStencilView(depthTexView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 0.f, 0);
|
deviceContext->ClearDepthStencilView(depthTexView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 0.f, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -945,7 +945,6 @@ bool D3DRenderer::Render()
|
||||||
{
|
{
|
||||||
if (!theDXContext.isReady())
|
if (!theDXContext.isReady())
|
||||||
return false;
|
return false;
|
||||||
resize(pvrrc.framebufferWidth, pvrrc.framebufferHeight);
|
|
||||||
|
|
||||||
bool is_rtt = pvrrc.isRTT;
|
bool is_rtt = pvrrc.isRTT;
|
||||||
|
|
||||||
|
@ -959,6 +958,7 @@ bool D3DRenderer::Render()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
resize(pvrrc.framebufferWidth, pvrrc.framebufferHeight);
|
||||||
rc = SUCCEEDED(device->SetRenderTarget(0, framebufferSurface));
|
rc = SUCCEEDED(device->SetRenderTarget(0, framebufferSurface));
|
||||||
verify(rc);
|
verify(rc);
|
||||||
D3DVIEWPORT9 viewport;
|
D3DVIEWPORT9 viewport;
|
||||||
|
@ -1105,6 +1105,8 @@ void D3DRenderer::resize(int w, int h)
|
||||||
{
|
{
|
||||||
if (width == (u32)w && height == (u32)h)
|
if (width == (u32)w && height == (u32)h)
|
||||||
return;
|
return;
|
||||||
|
if (!config::EmulateFramebuffer)
|
||||||
|
// TODO use different surfaces in full fb emulation to avoid resizing twice per frame
|
||||||
NOTICE_LOG(RENDERER, "D3DRenderer::resize: %d x %d -> %d x %d", width, height, w, h);
|
NOTICE_LOG(RENDERER, "D3DRenderer::resize: %d x %d -> %d x %d", width, height, w, h);
|
||||||
width = w;
|
width = w;
|
||||||
height = h;
|
height = h;
|
||||||
|
|
|
@ -31,6 +31,7 @@ DXContext theDXContext;
|
||||||
|
|
||||||
bool DXContext::init(bool keepCurrentWindow)
|
bool DXContext::init(bool keepCurrentWindow)
|
||||||
{
|
{
|
||||||
|
NOTICE_LOG(RENDERER, "DX9 Context initializing");
|
||||||
GraphicsContext::instance = this;
|
GraphicsContext::instance = this;
|
||||||
#ifdef USE_SDL
|
#ifdef USE_SDL
|
||||||
if (!keepCurrentWindow && !sdl_recreate_window(0))
|
if (!keepCurrentWindow && !sdl_recreate_window(0))
|
||||||
|
@ -95,6 +96,7 @@ bool DXContext::init(bool keepCurrentWindow)
|
||||||
|
|
||||||
void DXContext::term()
|
void DXContext::term()
|
||||||
{
|
{
|
||||||
|
NOTICE_LOG(RENDERER, "DX9 Context terminating");
|
||||||
GraphicsContext::instance = nullptr;
|
GraphicsContext::instance = nullptr;
|
||||||
overlay.term();
|
overlay.term();
|
||||||
imguiDriver.reset();
|
imguiDriver.reset();
|
||||||
|
|
Loading…
Reference in New Issue