mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-21 22:54:16 +01:00
[d3d9] Add a device compatibility mode for d3d8
This commit is contained in:
parent
83dc4678df
commit
0632da1935
@ -32,6 +32,10 @@ namespace dxvk {
|
|||||||
m_device->m_implicitSwapchain->SetApiName(name);
|
m_device->m_implicitSwapchain->SetApiName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DxvkD3D8Bridge::SetD3D8CompatibilityMode(const bool compatMode) {
|
||||||
|
m_device->SetD3D8CompatibilityMode(compatMode);
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT DxvkD3D8Bridge::UpdateTextureFromBuffer(
|
HRESULT DxvkD3D8Bridge::UpdateTextureFromBuffer(
|
||||||
IDirect3DSurface9* pDestSurface,
|
IDirect3DSurface9* pDestSurface,
|
||||||
IDirect3DSurface9* pSrcSurface,
|
IDirect3DSurface9* pSrcSurface,
|
||||||
@ -104,4 +108,4 @@ namespace dxvk {
|
|||||||
const Config* DxvkD3D8InterfaceBridge::GetConfig() const {
|
const Config* DxvkD3D8InterfaceBridge::GetConfig() const {
|
||||||
return &m_interface->GetInstance()->config();
|
return &m_interface->GetInstance()->config();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,13 @@ IDxvkD3D8Bridge : public IUnknown {
|
|||||||
*/
|
*/
|
||||||
virtual void SetAPIName(const char* name) = 0;
|
virtual void SetAPIName(const char* name) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Enables or disables D3D9-specific device features and validations
|
||||||
|
*
|
||||||
|
* \param [in] compatibility state
|
||||||
|
*/
|
||||||
|
virtual void SetD3D8CompatibilityMode(const bool compatMode) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Updates a D3D9 surface from a D3D9 buffer
|
* \brief Updates a D3D9 surface from a D3D9 buffer
|
||||||
*
|
*
|
||||||
@ -83,6 +90,7 @@ namespace dxvk {
|
|||||||
void** ppvObject);
|
void** ppvObject);
|
||||||
|
|
||||||
void SetAPIName(const char* name);
|
void SetAPIName(const char* name);
|
||||||
|
void SetD3D8CompatibilityMode(const bool compatMode);
|
||||||
|
|
||||||
HRESULT UpdateTextureFromBuffer(
|
HRESULT UpdateTextureFromBuffer(
|
||||||
IDirect3DSurface9* pDestSurface,
|
IDirect3DSurface9* pDestSurface,
|
||||||
|
@ -2360,7 +2360,8 @@ namespace dxvk {
|
|||||||
try {
|
try {
|
||||||
const Com<D3D9StateBlock> sb = new D3D9StateBlock(this, ConvertStateBlockType(Type));
|
const Com<D3D9StateBlock> sb = new D3D9StateBlock(this, ConvertStateBlockType(Type));
|
||||||
*ppSB = sb.ref();
|
*ppSB = sb.ref();
|
||||||
m_losableResourceCounter++;
|
if (!m_isD3D8Compatible)
|
||||||
|
m_losableResourceCounter++;
|
||||||
|
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
@ -2392,7 +2393,8 @@ namespace dxvk {
|
|||||||
return D3DERR_INVALIDCALL;
|
return D3DERR_INVALIDCALL;
|
||||||
|
|
||||||
*ppSB = m_recorder.ref();
|
*ppSB = m_recorder.ref();
|
||||||
m_losableResourceCounter++;
|
if (!m_isD3D8Compatible)
|
||||||
|
m_losableResourceCounter++;
|
||||||
m_recorder = nullptr;
|
m_recorder = nullptr;
|
||||||
|
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
|
@ -970,6 +970,17 @@ namespace dxvk {
|
|||||||
void TouchMappedTexture(D3D9CommonTexture* pTexture);
|
void TouchMappedTexture(D3D9CommonTexture* pTexture);
|
||||||
void RemoveMappedTexture(D3D9CommonTexture* pTexture);
|
void RemoveMappedTexture(D3D9CommonTexture* pTexture);
|
||||||
|
|
||||||
|
bool IsD3D8Compatible() const {
|
||||||
|
return m_isD3D8Compatible;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetD3D8CompatibilityMode(bool compatMode) {
|
||||||
|
if (compatMode)
|
||||||
|
Logger::info("The D3D9 device is now operating in D3D8 compatibility mode.");
|
||||||
|
|
||||||
|
m_isD3D8Compatible = compatMode;
|
||||||
|
}
|
||||||
|
|
||||||
// Device Lost
|
// Device Lost
|
||||||
bool IsDeviceLost() const {
|
bool IsDeviceLost() const {
|
||||||
return m_deviceLostState != D3D9DeviceLostState::Ok;
|
return m_deviceLostState != D3D9DeviceLostState::Ok;
|
||||||
@ -1318,9 +1329,10 @@ namespace dxvk {
|
|||||||
D3D9ShaderMasks m_psShaderMasks = FixedFunctionMask;
|
D3D9ShaderMasks m_psShaderMasks = FixedFunctionMask;
|
||||||
|
|
||||||
bool m_isSWVP;
|
bool m_isSWVP;
|
||||||
bool m_amdATOC = false;
|
bool m_isD3D8Compatible = false;
|
||||||
bool m_nvATOC = false;
|
bool m_amdATOC = false;
|
||||||
bool m_ffZTest = false;
|
bool m_nvATOC = false;
|
||||||
|
bool m_ffZTest = false;
|
||||||
|
|
||||||
VkImageLayout m_hazardLayout = VK_IMAGE_LAYOUT_GENERAL;
|
VkImageLayout m_hazardLayout = VK_IMAGE_LAYOUT_GENERAL;
|
||||||
|
|
||||||
|
@ -18,7 +18,8 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
D3D9StateBlock::~D3D9StateBlock() {
|
D3D9StateBlock::~D3D9StateBlock() {
|
||||||
m_parent->DecrementLosableCounter();
|
if (!m_parent->IsD3D8Compatible())
|
||||||
|
m_parent->DecrementLosableCounter();
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE D3D9StateBlock::QueryInterface(
|
HRESULT STDMETHODCALLTYPE D3D9StateBlock::QueryInterface(
|
||||||
@ -575,4 +576,4 @@ namespace dxvk {
|
|||||||
this->Capture();
|
this->Capture();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user