From 53b9a723acd3e6d26f4c7a2479c5b0a144d71db1 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Wed, 9 Mar 2022 23:32:47 +0000 Subject: [PATCH] [d3d9] Set initial dirty state flags We had a bug where initial state values caused the data to not get sent to the backend. Let's fix that going forward and dirty everything we possibly can on device creation. --- src/d3d9/d3d9_device.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index e927ecf8..9a8947d6 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -107,6 +107,36 @@ namespace dxvk { CreateConstantBuffers(); m_availableMemory = DetermineInitialTextureMemory(); + + // Initially set all the dirty flags so we + // always end up giving the backend *something* to work with. + m_flags.set(D3D9DeviceFlag::DirtyFramebuffer); + m_flags.set(D3D9DeviceFlag::DirtyClipPlanes); + m_flags.set(D3D9DeviceFlag::DirtyDepthStencilState); + m_flags.set(D3D9DeviceFlag::DirtyBlendState); + m_flags.set(D3D9DeviceFlag::DirtyRasterizerState); + m_flags.set(D3D9DeviceFlag::DirtyDepthBias); + m_flags.set(D3D9DeviceFlag::DirtyAlphaTestState); + m_flags.set(D3D9DeviceFlag::DirtyInputLayout); + m_flags.set(D3D9DeviceFlag::DirtyViewportScissor); + m_flags.set(D3D9DeviceFlag::DirtyMultiSampleState); + + m_flags.set(D3D9DeviceFlag::DirtyFogState); + m_flags.set(D3D9DeviceFlag::DirtyFogColor); + m_flags.set(D3D9DeviceFlag::DirtyFogDensity); + m_flags.set(D3D9DeviceFlag::DirtyFogScale); + m_flags.set(D3D9DeviceFlag::DirtyFogEnd); + + m_flags.set(D3D9DeviceFlag::DirtyFFVertexData); + m_flags.set(D3D9DeviceFlag::DirtyFFVertexBlend); + m_flags.set(D3D9DeviceFlag::DirtyFFVertexShader); + m_flags.set(D3D9DeviceFlag::DirtyFFPixelShader); + m_flags.set(D3D9DeviceFlag::DirtyFFViewport); + m_flags.set(D3D9DeviceFlag::DirtyFFPixelData); + m_flags.set(D3D9DeviceFlag::DirtyProgVertexShader); + m_flags.set(D3D9DeviceFlag::DirtySharedPixelShaderData); + m_flags.set(D3D9DeviceFlag::DirtyDepthBounds); + m_flags.set(D3D9DeviceFlag::DirtyPointScale); }