mirror of
https://github.com/WinDurango/WinDurango.git
synced 2026-01-31 00:55:17 +01:00
[d3d11x] proper optional checks for some wrappers
[d3d11x] make sure QueryInterface calls aren't leaking PC pointers [d3d11x] add debug logs for AddRef and Release in search of bad ref counting [d3d11x] properly grab the shader slot from the PacketHeader [d3d11x] properly unwrap Set calls [d3d11x] properly wrap Get calls [kernelx] remove debug logs
This commit is contained in:
@@ -3,32 +3,33 @@
|
||||
|
||||
HRESULT d3d11x::ID3D11BufferWrapper::QueryInterface(REFIID riid, void** ppvObject)
|
||||
{
|
||||
// DEBUG
|
||||
char iidstr[ sizeof("{AAAAAAAA-BBBB-CCCC-DDEE-FFGGHHIIJJKK}") ];
|
||||
OLECHAR iidwstr[ sizeof(iidstr) ];
|
||||
StringFromGUID2(riid, iidwstr, ARRAYSIZE(iidwstr));
|
||||
WideCharToMultiByte(CP_UTF8, 0, iidwstr, -1, iidstr, sizeof(iidstr), nullptr, nullptr);
|
||||
printf("[ID3D11BufferWrapper] QueryInterface: %s\n", iidstr);
|
||||
|
||||
if (riid == __uuidof(::ID3D11Buffer))
|
||||
{
|
||||
*ppvObject = this;
|
||||
AddRef( );
|
||||
return S_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
// DEBUG
|
||||
char iidstr[ sizeof("{AAAAAAAA-BBBB-CCCC-DDEE-FFGGHHIIJJKK}") ];
|
||||
OLECHAR iidwstr[ sizeof(iidstr) ];
|
||||
StringFromGUID2(riid, iidwstr, ARRAYSIZE(iidwstr));
|
||||
WideCharToMultiByte(CP_UTF8, 0, iidwstr, -1, iidstr, sizeof(iidstr), nullptr, nullptr);
|
||||
printf("[IDXGIDeviceWrapper] QueryInterface: %s\n", iidstr);
|
||||
}
|
||||
|
||||
return m_realBuffer->QueryInterface(riid, ppvObject);
|
||||
*ppvObject = nullptr;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG d3d11x::ID3D11BufferWrapper::AddRef( )
|
||||
{
|
||||
printf("[ID3D11BufferWrapper] --> AddRef\n");
|
||||
return InterlockedIncrement(&m_RefCount);
|
||||
}
|
||||
|
||||
ULONG d3d11x::ID3D11BufferWrapper::Release( )
|
||||
{
|
||||
printf("[ID3D11BufferWrapper] --> Release\n");
|
||||
ULONG refCount = InterlockedDecrement(&m_RefCount);
|
||||
if (refCount == 0)
|
||||
delete this;
|
||||
|
||||
@@ -20,16 +20,19 @@ namespace d3d11x
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
return m_realTexture->QueryInterface(riid, ppvObject);
|
||||
*ppvObject = nullptr;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG ID3D11Texture1DWrapper::AddRef( )
|
||||
{
|
||||
printf("[ID3D11Texture1DWrapper] --> AddRef\n");
|
||||
return InterlockedIncrement(&m_RefCount);
|
||||
}
|
||||
|
||||
ULONG ID3D11Texture1DWrapper::Release( )
|
||||
{
|
||||
printf("[ID3D11Texture1DWrapper] --> AddRef\n");
|
||||
ULONG refCount = InterlockedDecrement(&m_RefCount);
|
||||
if (refCount == 0)
|
||||
delete this;
|
||||
@@ -107,16 +110,19 @@ namespace d3d11x
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
return m_realTexture->QueryInterface(riid, ppvObject);
|
||||
*ppvObject = nullptr;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG ID3D11Texture2DWrapper::AddRef( )
|
||||
{
|
||||
printf("[ID3D11Texture2DWrapper] --> AddRef\n");
|
||||
return InterlockedIncrement(&m_RefCount);
|
||||
}
|
||||
|
||||
ULONG ID3D11Texture2DWrapper::Release( )
|
||||
{
|
||||
printf("[ID3D11Texture2DWrapper] --> AddRef\n");
|
||||
ULONG refCount = InterlockedDecrement(&m_RefCount);
|
||||
if (refCount == 0)
|
||||
delete this;
|
||||
@@ -194,16 +200,19 @@ namespace d3d11x
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
return m_realTexture->QueryInterface(riid, ppvObject);
|
||||
*ppvObject = nullptr;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG ID3D11Texture3DWrapper::AddRef( )
|
||||
{
|
||||
printf("[ID3D11Texture3DWrapper] --> AddRef\n");
|
||||
return InterlockedIncrement(&m_RefCount);
|
||||
}
|
||||
|
||||
ULONG ID3D11Texture3DWrapper::Release( )
|
||||
{
|
||||
printf("[ID3D11Texture3DWrapper] --> AddRef\n");
|
||||
ULONG refCount = InterlockedDecrement(&m_RefCount);
|
||||
if (refCount == 0)
|
||||
delete this;
|
||||
|
||||
@@ -21,16 +21,19 @@ namespace d3d11x
|
||||
printf("[IDXGIDeviceWrapper] QueryInterface: %s\n", iidstr);
|
||||
|
||||
|
||||
return m_realTarget->QueryInterface(riid, ppvObject);
|
||||
*ppvObject = nullptr;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG ID3D11RenderTargetViewWrapper::AddRef( )
|
||||
{
|
||||
printf("[ID3D11RenderTargetViewWrapper] --> AddRef\n");
|
||||
return InterlockedIncrement(&m_RefCount);
|
||||
}
|
||||
|
||||
ULONG ID3D11RenderTargetViewWrapper::Release( )
|
||||
{
|
||||
printf("[ID3D11RenderTargetViewWrapper] --> AddRef\n");
|
||||
ULONG refCount = InterlockedDecrement(&m_RefCount);
|
||||
if (refCount == 0)
|
||||
delete this;
|
||||
@@ -94,16 +97,19 @@ namespace d3d11x
|
||||
WideCharToMultiByte(CP_UTF8, 0, iidwstr, -1, iidstr, sizeof(iidstr), nullptr, nullptr);
|
||||
printf("[IDXGIDeviceWrapper] QueryInterface: %s\n", iidstr);
|
||||
|
||||
return m_realTarget->QueryInterface(riid, ppvObject);
|
||||
*ppvObject = nullptr;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG ID3D11DepthStencilViewWrapper::AddRef( )
|
||||
{
|
||||
printf("[ID3D11DepthStencilViewWrapper] --> AddRef\n");
|
||||
return InterlockedIncrement(&m_RefCount);
|
||||
}
|
||||
|
||||
ULONG ID3D11DepthStencilViewWrapper::Release( )
|
||||
{
|
||||
printf("[ID3D11DepthStencilViewWrapper] --> AddRef\n");
|
||||
ULONG refCount = InterlockedDecrement(&m_RefCount);
|
||||
if (refCount == 0)
|
||||
delete this;
|
||||
@@ -167,16 +173,19 @@ namespace d3d11x
|
||||
WideCharToMultiByte(CP_UTF8, 0, iidwstr, -1, iidstr, sizeof(iidstr), nullptr, nullptr);
|
||||
printf("[IDXGIDeviceWrapper] QueryInterface: %s\n", iidstr);
|
||||
|
||||
return m_realTarget->QueryInterface(riid, ppvObject);
|
||||
*ppvObject = nullptr;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG ID3D11ShaderResourceViewWrapper::AddRef( )
|
||||
{
|
||||
printf("[ID3D11ShaderResourceViewWrapper] --> AddRef\n");
|
||||
return InterlockedIncrement(&m_RefCount);
|
||||
}
|
||||
|
||||
ULONG ID3D11ShaderResourceViewWrapper::Release( )
|
||||
{
|
||||
printf("[ID3D11ShaderResourceViewWrapper] --> AddRef\n");
|
||||
ULONG refCount = InterlockedDecrement(&m_RefCount);
|
||||
if (refCount == 0)
|
||||
delete this;
|
||||
@@ -240,16 +249,19 @@ namespace d3d11x
|
||||
WideCharToMultiByte(CP_UTF8, 0, iidwstr, -1, iidstr, sizeof(iidstr), nullptr, nullptr);
|
||||
printf("[IDXGIDeviceWrapper] QueryInterface: %s\n", iidstr);
|
||||
|
||||
return m_realTarget->QueryInterface(riid, ppvObject);
|
||||
*ppvObject = nullptr;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG ID3D11UnorderedAccessViewWrapper::AddRef( )
|
||||
{
|
||||
printf("[ID3D11UnorderedAccessViewWrapper] --> AddRef\n");
|
||||
return InterlockedIncrement(&m_RefCount);
|
||||
}
|
||||
|
||||
ULONG ID3D11UnorderedAccessViewWrapper::Release( )
|
||||
{
|
||||
printf("[ID3D11UnorderedAccessViewWrapper] --> AddRef\n");
|
||||
ULONG refCount = InterlockedDecrement(&m_RefCount);
|
||||
if (refCount == 0)
|
||||
delete this;
|
||||
|
||||
@@ -11,16 +11,19 @@ namespace d3d11x {
|
||||
WideCharToMultiByte(CP_UTF8, 0, iidwstr, -1, iidstr, sizeof(iidstr), nullptr, nullptr);
|
||||
printf("[ID3D11ResourceWrapperX] QueryInterface: %s\n", iidstr);
|
||||
|
||||
return m_realResource->QueryInterface(riid, ppvObject);
|
||||
}
|
||||
*ppvObject = nullptr;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG ID3D11ResourceWrapperX::AddRef( )
|
||||
{
|
||||
printf("[ID3D11ResourceWrapperX] --> AddRef\n");
|
||||
return InterlockedIncrement(&m_RefCount);
|
||||
}
|
||||
|
||||
ULONG ID3D11ResourceWrapperX::Release( )
|
||||
{
|
||||
printf("[ID3D11ResourceWrapperX] --> AddRef\n");
|
||||
ULONG refCount = InterlockedDecrement(&m_RefCount);
|
||||
if (refCount == 0)
|
||||
delete this;
|
||||
|
||||
@@ -341,7 +341,6 @@ namespace d3d11x
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot) UINT NumBuffers,
|
||||
_In_reads_opt_(NumBuffers) ID3D11Buffer* const* ppConstantBuffers)
|
||||
{
|
||||
|
||||
if (ppConstantBuffers != NULL)
|
||||
{
|
||||
ID3D11Buffer** modifiedBuffers = new ID3D11Buffer * [ NumBuffers ];
|
||||
@@ -367,21 +366,19 @@ namespace d3d11x
|
||||
return;
|
||||
}
|
||||
|
||||
UINT slot = (PacketHeader - 0x6B40) >> 5;
|
||||
UINT slot = ((PacketHeader & 0xFFFF) - 0x6B40) >> 5;
|
||||
UINT NumViews = (PacketHeader >> 19) + 1;
|
||||
|
||||
// @Patoke todo
|
||||
//if (NumViews <= 1)
|
||||
//{
|
||||
// return;
|
||||
//}
|
||||
|
||||
if (ppShaderResourceViews != NULL)
|
||||
{
|
||||
ID3D11ShaderResourceView** modifiedViews = new ID3D11ShaderResourceView * [NumViews] {};
|
||||
for (UINT i = 0; i < NumViews; ++i)
|
||||
ID3D11ShaderResourceView** modifiedViews = new ID3D11ShaderResourceView * [NumViews] {0};
|
||||
|
||||
for (UINT i = 0; i < NumViews; i++)
|
||||
{
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11ShaderResourceViewWrapper*>(ppShaderResourceViews[ i ])->m_realTarget;
|
||||
if (ppShaderResourceViews[ i ] == nullptr)
|
||||
modifiedViews[ i ] = nullptr;
|
||||
else
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11ShaderResourceViewWrapper*>(ppShaderResourceViews[ i ])->m_realTarget;
|
||||
}
|
||||
m_realDeviceCtx->PSSetShaderResources(slot, NumViews, modifiedViews);
|
||||
}
|
||||
@@ -508,8 +505,21 @@ namespace d3d11x
|
||||
virtual void STDMETHODCALLTYPE GSSetConstantBuffers(
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1) UINT StartSlot,
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot) UINT NumBuffers,
|
||||
_In_reads_opt_(NumBuffers) ID3D11Buffer* const* ppConstantBuffers) {
|
||||
m_realDeviceCtx->GSSetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
_In_reads_opt_(NumBuffers) ID3D11Buffer* const* ppConstantBuffers)
|
||||
{
|
||||
if (ppConstantBuffers != NULL)
|
||||
{
|
||||
ID3D11Buffer** modifiedBuffers = new ID3D11Buffer * [ NumBuffers ];
|
||||
for (UINT i = 0; i < NumBuffers; ++i)
|
||||
{
|
||||
modifiedBuffers[ i ] = reinterpret_cast<ID3D11BufferWrapper*>(ppConstantBuffers[ i ])->m_realBuffer;
|
||||
}
|
||||
m_realDeviceCtx->GSSetConstantBuffers(StartSlot, NumBuffers, modifiedBuffers);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_realDeviceCtx->GSSetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void STDMETHODCALLTYPE GSSetShader(
|
||||
@@ -530,15 +540,19 @@ namespace d3d11x
|
||||
return;
|
||||
}
|
||||
|
||||
UINT slot = (PacketHeader - 0x1D80) >> 5;
|
||||
UINT slot = ((PacketHeader & 0xFFFF) - 0x1D80) >> 5;
|
||||
UINT NumViews = (PacketHeader >> 19) + 1;
|
||||
|
||||
if (ppShaderResourceViews != NULL)
|
||||
{
|
||||
ID3D11ShaderResourceView** modifiedViews = new ID3D11ShaderResourceView * [ NumViews ];
|
||||
for (UINT i = 0; i < NumViews; ++i)
|
||||
ID3D11ShaderResourceView** modifiedViews = new ID3D11ShaderResourceView * [NumViews] {0};
|
||||
|
||||
for (UINT i = 0; i < NumViews; i++)
|
||||
{
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11ShaderResourceViewWrapper*>(ppShaderResourceViews[ i ])->m_realTarget;
|
||||
if (ppShaderResourceViews[ i ] == nullptr)
|
||||
modifiedViews[ i ] = nullptr;
|
||||
else
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11ShaderResourceViewWrapper*>(ppShaderResourceViews[ i ])->m_realTarget;
|
||||
}
|
||||
m_realDeviceCtx->VSSetShaderResources(slot, NumViews, modifiedViews);
|
||||
}
|
||||
@@ -589,15 +603,19 @@ namespace d3d11x
|
||||
return;
|
||||
}
|
||||
|
||||
UINT slot = (PacketHeader - 0x57D0) >> 5;
|
||||
UINT slot = ((PacketHeader & 0xFFFF) - 0x57D0) >> 5;
|
||||
UINT NumViews = (PacketHeader >> 19) + 1;
|
||||
|
||||
if (ppShaderResourceViews != NULL)
|
||||
{
|
||||
ID3D11ShaderResourceView** modifiedViews = new ID3D11ShaderResourceView * [ NumViews ];
|
||||
for (UINT i = 0; i < NumViews; ++i)
|
||||
ID3D11ShaderResourceView** modifiedViews = new ID3D11ShaderResourceView * [NumViews] {0};
|
||||
|
||||
for (UINT i = 0; i < NumViews; i++)
|
||||
{
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11ShaderResourceViewWrapper*>(ppShaderResourceViews[ i ])->m_realTarget;
|
||||
if (ppShaderResourceViews[ i ] == nullptr)
|
||||
modifiedViews[ i ] = nullptr;
|
||||
else
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11ShaderResourceViewWrapper*>(ppShaderResourceViews[ i ])->m_realTarget;
|
||||
}
|
||||
m_realDeviceCtx->GSSetShaderResources(slot, NumViews, modifiedViews);
|
||||
}
|
||||
@@ -625,10 +643,15 @@ namespace d3d11x
|
||||
|
||||
if (ppRenderTargetViews != NULL)
|
||||
{
|
||||
ID3D11RenderTargetView** modifiedViews = new ID3D11RenderTargetView * [ NumViews ];
|
||||
for (UINT i = 0; i < NumViews; ++i)
|
||||
ID3D11RenderTargetView** modifiedViews = new ID3D11RenderTargetView * [NumViews] {0};
|
||||
|
||||
UINT i = 0;
|
||||
for (ID3D11RenderTargetView* view = *ppRenderTargetViews; view; view++, i++)
|
||||
{
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11RenderTargetViewWrapper*>(ppRenderTargetViews[ i ])->m_realTarget;
|
||||
if (i >= NumViews)
|
||||
break;
|
||||
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11RenderTargetViewWrapper*>(view)->m_realTarget;
|
||||
}
|
||||
m_realDeviceCtx->OMSetRenderTargets(NumViews, modifiedViews, depthStencilView);
|
||||
}
|
||||
@@ -636,8 +659,6 @@ namespace d3d11x
|
||||
{
|
||||
m_realDeviceCtx->OMSetRenderTargets(NumViews, ppRenderTargetViews, depthStencilView);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
virtual void STDMETHODCALLTYPE OMSetRenderTargetsAndUnorderedAccessViews(
|
||||
@@ -819,15 +840,19 @@ namespace d3d11x
|
||||
return;
|
||||
}
|
||||
|
||||
UINT slot = (PacketHeader - 0x30F0) >> 5;
|
||||
UINT slot = ((PacketHeader & 0xFFFF) - 0x30F0) >> 5;
|
||||
UINT NumViews = (PacketHeader >> 19) + 1;
|
||||
|
||||
if (ppShaderResourceViews != NULL)
|
||||
{
|
||||
ID3D11ShaderResourceView** modifiedViews = new ID3D11ShaderResourceView * [ NumViews ];
|
||||
for (UINT i = 0; i < NumViews; ++i)
|
||||
ID3D11ShaderResourceView** modifiedViews = new ID3D11ShaderResourceView * [NumViews] {0};
|
||||
|
||||
for (UINT i = 0; i < NumViews; i++)
|
||||
{
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11ShaderResourceViewWrapper*>(ppShaderResourceViews[ i ])->m_realTarget;
|
||||
if (ppShaderResourceViews[ i ] == nullptr)
|
||||
modifiedViews[ i ] = nullptr;
|
||||
else
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11ShaderResourceViewWrapper*>(ppShaderResourceViews[ i ])->m_realTarget;
|
||||
}
|
||||
m_realDeviceCtx->HSSetShaderResources(slot, NumViews, modifiedViews);
|
||||
}
|
||||
@@ -854,7 +879,8 @@ namespace d3d11x
|
||||
virtual void STDMETHODCALLTYPE HSSetConstantBuffers(
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1) UINT StartSlot,
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot) UINT NumBuffers,
|
||||
_In_reads_opt_(NumBuffers) ID3D11Buffer* const* ppConstantBuffers) {
|
||||
_In_reads_opt_(NumBuffers) ID3D11Buffer* const* ppConstantBuffers)
|
||||
{
|
||||
if (ppConstantBuffers != NULL)
|
||||
{
|
||||
ID3D11Buffer** modifiedBuffers = new ID3D11Buffer * [ NumBuffers ];
|
||||
@@ -880,15 +906,19 @@ namespace d3d11x
|
||||
return;
|
||||
}
|
||||
|
||||
UINT slot = (PacketHeader - 0x4460) >> 5;
|
||||
UINT slot = ((PacketHeader & 0xFFFF) - 0x4460) >> 5;
|
||||
UINT NumViews = (PacketHeader >> 19) + 1;
|
||||
|
||||
if (ppShaderResourceViews != NULL)
|
||||
{
|
||||
ID3D11ShaderResourceView** modifiedViews = new ID3D11ShaderResourceView * [ NumViews ];
|
||||
for (UINT i = 0; i < NumViews; ++i)
|
||||
ID3D11ShaderResourceView** modifiedViews = new ID3D11ShaderResourceView * [NumViews] {0};
|
||||
|
||||
for (UINT i = 0; i < NumViews; i++)
|
||||
{
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11ShaderResourceViewWrapper*>(ppShaderResourceViews[ i ])->m_realTarget;
|
||||
if (ppShaderResourceViews[ i ] == nullptr)
|
||||
modifiedViews[ i ] = nullptr;
|
||||
else
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11ShaderResourceViewWrapper*>(ppShaderResourceViews[ i ])->m_realTarget;
|
||||
}
|
||||
m_realDeviceCtx->HSSetShaderResources(slot, NumViews, modifiedViews);
|
||||
}
|
||||
@@ -915,7 +945,8 @@ namespace d3d11x
|
||||
virtual void STDMETHODCALLTYPE DSSetConstantBuffers(
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1) UINT StartSlot,
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot) UINT NumBuffers,
|
||||
_In_reads_opt_(NumBuffers) ID3D11Buffer* const* ppConstantBuffers) {
|
||||
_In_reads_opt_(NumBuffers) ID3D11Buffer* const* ppConstantBuffers)
|
||||
{
|
||||
if (ppConstantBuffers != NULL)
|
||||
{
|
||||
ID3D11Buffer** modifiedBuffers = new ID3D11Buffer * [ NumBuffers ];
|
||||
@@ -941,15 +972,19 @@ namespace d3d11x
|
||||
return;
|
||||
}
|
||||
|
||||
UINT slot = (PacketHeader - 0x140) >> 5;
|
||||
UINT slot = ((PacketHeader & 0xFFFF) - 0x140) >> 5;
|
||||
UINT NumViews = (PacketHeader >> 19) + 1;
|
||||
|
||||
if (ppShaderResourceViews != NULL)
|
||||
{
|
||||
ID3D11ShaderResourceView** modifiedViews = new ID3D11ShaderResourceView * [ NumViews ];
|
||||
for (UINT i = 0; i < NumViews; ++i)
|
||||
ID3D11ShaderResourceView** modifiedViews = new ID3D11ShaderResourceView * [NumViews] {0};
|
||||
|
||||
for (UINT i = 0; i < NumViews; i++)
|
||||
{
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11ShaderResourceViewWrapper*>(ppShaderResourceViews[ i ])->m_realTarget;
|
||||
if (ppShaderResourceViews[ i ] == nullptr)
|
||||
modifiedViews[ i ] = nullptr;
|
||||
else
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11ShaderResourceViewWrapper*>(ppShaderResourceViews[ i ])->m_realTarget;
|
||||
}
|
||||
m_realDeviceCtx->HSSetShaderResources(slot, NumViews, modifiedViews);
|
||||
}
|
||||
@@ -984,7 +1019,8 @@ namespace d3d11x
|
||||
virtual void STDMETHODCALLTYPE CSSetConstantBuffers(
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1) UINT StartSlot,
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot) UINT NumBuffers,
|
||||
_In_reads_opt_(NumBuffers) ID3D11Buffer* const* ppConstantBuffers) {
|
||||
_In_reads_opt_(NumBuffers) ID3D11Buffer* const* ppConstantBuffers)
|
||||
{
|
||||
if (ppConstantBuffers != NULL)
|
||||
{
|
||||
ID3D11Buffer** modifiedBuffers = new ID3D11Buffer * [ NumBuffers ];
|
||||
@@ -1004,7 +1040,22 @@ namespace d3d11x
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1) UINT StartSlot,
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot) UINT NumBuffers,
|
||||
_Out_writes_opt_(NumBuffers) ID3D11Buffer** ppConstantBuffers) {
|
||||
m_realDeviceCtx->VSGetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
|
||||
if (ppConstantBuffers != NULL)
|
||||
{
|
||||
ID3D11Buffer** unwrappedBuffers = new ID3D11Buffer * [NumBuffers] {0};
|
||||
|
||||
m_realDeviceCtx->VSGetConstantBuffers(StartSlot, NumBuffers, unwrappedBuffers);
|
||||
|
||||
for (UINT i = 0; i < NumBuffers; ++i)
|
||||
{
|
||||
ppConstantBuffers[ i ] = reinterpret_cast<ID3D11Buffer*>(new ID3D11BufferWrapper(unwrappedBuffers[ i ]));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_realDeviceCtx->VSGetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void STDMETHODCALLTYPE PSGetShaderResources(
|
||||
@@ -1039,7 +1090,21 @@ namespace d3d11x
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1) UINT StartSlot,
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot) UINT NumBuffers,
|
||||
_Out_writes_opt_(NumBuffers) ID3D11Buffer** ppConstantBuffers) {
|
||||
m_realDeviceCtx->PSGetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
if (ppConstantBuffers != NULL)
|
||||
{
|
||||
ID3D11Buffer** unwrappedBuffers = new ID3D11Buffer * [NumBuffers] {0};
|
||||
|
||||
m_realDeviceCtx->PSGetConstantBuffers(StartSlot, NumBuffers, unwrappedBuffers);
|
||||
|
||||
for (UINT i = 0; i < NumBuffers; ++i)
|
||||
{
|
||||
ppConstantBuffers[ i ] = reinterpret_cast<ID3D11Buffer*>(new ID3D11BufferWrapper(unwrappedBuffers[ i ]));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_realDeviceCtx->PSGetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void STDMETHODCALLTYPE IAGetInputLayout(
|
||||
@@ -1067,7 +1132,22 @@ namespace d3d11x
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1) UINT StartSlot,
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot) UINT NumBuffers,
|
||||
_Out_writes_opt_(NumBuffers) ID3D11Buffer** ppConstantBuffers) {
|
||||
m_realDeviceCtx->GSGetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
|
||||
if (ppConstantBuffers != NULL)
|
||||
{
|
||||
ID3D11Buffer** unwrappedBuffers = new ID3D11Buffer * [NumBuffers] {0};
|
||||
|
||||
m_realDeviceCtx->GSGetConstantBuffers(StartSlot, NumBuffers, unwrappedBuffers);
|
||||
|
||||
for (UINT i = 0; i < NumBuffers; ++i)
|
||||
{
|
||||
ppConstantBuffers[ i ] = reinterpret_cast<ID3D11Buffer*>(new ID3D11BufferWrapper(unwrappedBuffers[ i ]));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_realDeviceCtx->GSGetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void STDMETHODCALLTYPE GSGetShader(
|
||||
@@ -1125,7 +1205,7 @@ namespace d3d11x
|
||||
|
||||
::ID3D11RenderTargetView* target = nullptr;
|
||||
m_realDeviceCtx->OMGetRenderTargets(NumViews, &target, ppDepthStencilView);
|
||||
*ppRenderTargetViews = reinterpret_cast<ID3D11RenderTargetView_X*>(new ID3D11RenderTargetViewWrapper(target));
|
||||
*ppRenderTargetViews = ppRenderTargetViews ? reinterpret_cast<ID3D11RenderTargetView_X*>(new ID3D11RenderTargetViewWrapper(target)) : nullptr;
|
||||
|
||||
}
|
||||
|
||||
@@ -1200,7 +1280,22 @@ namespace d3d11x
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1) UINT StartSlot,
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot) UINT NumBuffers,
|
||||
_Out_writes_opt_(NumBuffers) ID3D11Buffer** ppConstantBuffers) {
|
||||
m_realDeviceCtx->HSGetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
|
||||
if (ppConstantBuffers != NULL)
|
||||
{
|
||||
ID3D11Buffer** unwrappedBuffers = new ID3D11Buffer * [NumBuffers] {0};
|
||||
|
||||
m_realDeviceCtx->HSGetConstantBuffers(StartSlot, NumBuffers, unwrappedBuffers);
|
||||
|
||||
for (UINT i = 0; i < NumBuffers; ++i)
|
||||
{
|
||||
ppConstantBuffers[ i ] = reinterpret_cast<ID3D11Buffer*>(new ID3D11BufferWrapper(unwrappedBuffers[ i ]));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_realDeviceCtx->HSGetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void STDMETHODCALLTYPE DSGetShaderResources(
|
||||
@@ -1228,7 +1323,22 @@ namespace d3d11x
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1) UINT StartSlot,
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot) UINT NumBuffers,
|
||||
_Out_writes_opt_(NumBuffers) ID3D11Buffer** ppConstantBuffers) {
|
||||
m_realDeviceCtx->DSGetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
|
||||
if (ppConstantBuffers != NULL)
|
||||
{
|
||||
ID3D11Buffer** unwrappedBuffers = new ID3D11Buffer * [NumBuffers] {0};
|
||||
|
||||
m_realDeviceCtx->DSGetConstantBuffers(StartSlot, NumBuffers, unwrappedBuffers);
|
||||
|
||||
for (UINT i = 0; i < NumBuffers; ++i)
|
||||
{
|
||||
ppConstantBuffers[ i ] = reinterpret_cast<ID3D11Buffer*>(new ID3D11BufferWrapper(unwrappedBuffers[ i ]));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_realDeviceCtx->DSGetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void STDMETHODCALLTYPE CSGetShaderResources(
|
||||
@@ -1263,7 +1373,22 @@ namespace d3d11x
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1) UINT StartSlot,
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot) UINT NumBuffers,
|
||||
_Out_writes_opt_(NumBuffers) ID3D11Buffer** ppConstantBuffers) {
|
||||
m_realDeviceCtx->CSGetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
|
||||
if (ppConstantBuffers != NULL)
|
||||
{
|
||||
ID3D11Buffer** unwrappedBuffers = new ID3D11Buffer * [NumBuffers] {0};
|
||||
|
||||
m_realDeviceCtx->CSGetConstantBuffers(StartSlot, NumBuffers, unwrappedBuffers);
|
||||
|
||||
for (UINT i = 0; i < NumBuffers; ++i)
|
||||
{
|
||||
ppConstantBuffers[ i ] = reinterpret_cast<ID3D11Buffer*>(new ID3D11BufferWrapper(unwrappedBuffers[ i ]));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_realDeviceCtx->CSGetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void STDMETHODCALLTYPE ClearState(void) {
|
||||
|
||||
@@ -23,16 +23,19 @@ namespace d3d11x
|
||||
WideCharToMultiByte(CP_UTF8, 0, iidwstr, -1, iidstr, sizeof(iidstr), nullptr, nullptr);
|
||||
printf("[IDXGIDeviceWrapper] QueryInterface: %s\n", iidstr);
|
||||
|
||||
return m_realAdapter->QueryInterface(riid, ppvObject);
|
||||
*ppvObject = nullptr;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG IDXGIAdapterWrapper::AddRef( )
|
||||
{
|
||||
printf("[IDXGIAdapterWrapper] --> AddRef\n");
|
||||
return InterlockedIncrement(&m_RefCount);
|
||||
}
|
||||
|
||||
ULONG IDXGIAdapterWrapper::Release( )
|
||||
{
|
||||
printf("[IDXGIAdapterWrapper] --> AddRef\n");
|
||||
ULONG refCount = InterlockedDecrement(&m_RefCount);
|
||||
if (refCount == 0)
|
||||
delete this;
|
||||
|
||||
@@ -20,7 +20,8 @@ namespace d3d11x
|
||||
WideCharToMultiByte(CP_UTF8, 0, iidwstr, -1, iidstr, sizeof(iidstr), nullptr, nullptr);
|
||||
printf("[IDXGIDeviceWrapper] QueryInterface: %s\n", iidstr);
|
||||
|
||||
return m_realDevice->QueryInterface(riid, ppvObject);
|
||||
*ppvObject = nullptr;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,11 +29,13 @@ namespace d3d11x
|
||||
|
||||
ULONG IDXGIDeviceWrapper::AddRef( )
|
||||
{
|
||||
printf("[IDXGIDeviceWrapper] --> AddRef\n");
|
||||
return InterlockedIncrement(&m_RefCount);
|
||||
}
|
||||
|
||||
ULONG IDXGIDeviceWrapper::Release( )
|
||||
{
|
||||
printf("[IDXGIDeviceWrapper] --> AddRef\n");
|
||||
ULONG refCount = InterlockedDecrement(&m_RefCount);
|
||||
if (refCount == 0)
|
||||
delete this;
|
||||
|
||||
@@ -26,18 +26,21 @@ namespace d3d11x
|
||||
printf("[IDXGIFactoryWrapper] QueryInterface: %s\n", iidstr);
|
||||
|
||||
|
||||
return m_realFactory->QueryInterface(riid, ppvObject);
|
||||
}
|
||||
*ppvObject = nullptr;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
ULONG IDXGIFactoryWrapper::AddRef( )
|
||||
{
|
||||
printf("[IDXGIFactoryWrapper] --> AddRef\n");
|
||||
return InterlockedIncrement(&m_RefCount);
|
||||
}
|
||||
|
||||
ULONG IDXGIFactoryWrapper::Release( )
|
||||
{
|
||||
printf("[IDXGIFactoryWrapper] --> AddRef\n");
|
||||
ULONG refCount = InterlockedDecrement(&m_RefCount);
|
||||
if (refCount == 0)
|
||||
delete this;
|
||||
|
||||
@@ -21,17 +21,20 @@ namespace d3d11x
|
||||
WideCharToMultiByte(CP_UTF8, 0, iidwstr, -1, iidstr, sizeof(iidstr), nullptr, nullptr);
|
||||
printf("[IDXGIDeviceWrapper] QueryInterface: %s\n", iidstr);
|
||||
|
||||
return m_realSwapchain->QueryInterface(riid, ppvObject);
|
||||
*ppvObject = nullptr;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
|
||||
ULONG IDXGISwapChainWrapper::AddRef( )
|
||||
{
|
||||
printf("[IDXGISwapChainWrapper] --> AddRef\n");
|
||||
return InterlockedIncrement(&m_RefCount);
|
||||
}
|
||||
|
||||
ULONG IDXGISwapChainWrapper::Release( )
|
||||
{
|
||||
printf("[IDXGISwapChainWrapper] --> AddRef\n");
|
||||
ULONG refCount = InterlockedDecrement(&m_RefCount);
|
||||
if (refCount == 0)
|
||||
delete this;
|
||||
|
||||
@@ -47,7 +47,11 @@ HRESULT d3d11x::D3D11DeviceXWrapperX::CreateTexture1D(
|
||||
ID3D11Texture1D* texture1d = nullptr;
|
||||
HRESULT hr = m_realDevice->CreateTexture1D(pDesc, pInitialData, &texture1d);
|
||||
|
||||
*ppTexture1D = SUCCEEDED(hr) ? new ID3D11Texture1DWrapper(texture1d) : nullptr;
|
||||
ERROR_LOG_FUNC( );
|
||||
if (ppTexture1D != nullptr)
|
||||
{
|
||||
*ppTexture1D = SUCCEEDED(hr) ? new ID3D11Texture1DWrapper(texture1d) : nullptr;
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
@@ -60,8 +64,13 @@ HRESULT d3d11x::D3D11DeviceXWrapperX::CreateTexture2D(
|
||||
ID3D11Texture2D* texture2d = nullptr;
|
||||
HRESULT hr = m_realDevice->CreateTexture2D(pDesc, pInitialData, &texture2d);
|
||||
|
||||
printf("[CreateTexture2D] created texture at 0x%llX\n", texture2d);
|
||||
|
||||
ERROR_LOG_FUNC( );
|
||||
*ppTexture2D = SUCCEEDED(hr) ? new ID3D11Texture2DWrapper(texture2d) : nullptr;
|
||||
if (ppTexture2D != nullptr)
|
||||
{
|
||||
*ppTexture2D = SUCCEEDED(hr) ? new ID3D11Texture2DWrapper(texture2d) : nullptr;
|
||||
}
|
||||
|
||||
// @Patoke todo: crashing on texture create with DXGI_ERROR_DEVICE_REMOVED and DXGI_ERROR_DRIVER_INTERNAL_ERROR
|
||||
if (FAILED(hr))
|
||||
@@ -69,6 +78,8 @@ HRESULT d3d11x::D3D11DeviceXWrapperX::CreateTexture2D(
|
||||
HRESULT device_result = m_realDevice->GetDeviceRemovedReason( );
|
||||
ERROR_LOG_HRES(device_result);
|
||||
__debugbreak( );
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
return hr;
|
||||
@@ -83,8 +94,10 @@ HRESULT d3d11x::D3D11DeviceXWrapperX::CreateTexture3D(
|
||||
HRESULT hr = m_realDevice->CreateTexture3D(pDesc, pInitialData, &texture3d);
|
||||
|
||||
ERROR_LOG_FUNC( );
|
||||
*ppTexture3D = SUCCEEDED(hr) ? new ID3D11Texture3DWrapper(texture3d) : nullptr;
|
||||
|
||||
if (ppTexture3D != nullptr)
|
||||
{
|
||||
*ppTexture3D = SUCCEEDED(hr) ? new ID3D11Texture3DWrapper(texture3d) : nullptr;
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ void FixRelativePath(LPCWSTR& lpFileName)
|
||||
|
||||
HFILE WINAPI OpenFile_Hook(LPCSTR lpFileName, LPOFSTRUCT lpReOpenBuff, UINT uStyle)
|
||||
{
|
||||
printf("[OpenFile] try read file %s\n", lpFileName);
|
||||
//FixRelativePath(lpFileName);
|
||||
|
||||
return TrueOpenFile(lpFileName, lpReOpenBuff, uStyle);
|
||||
}
|
||||
@@ -72,14 +72,7 @@ HANDLE WINAPI CreateFileW_Hook(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD
|
||||
{
|
||||
FixRelativePath(lpFileName);
|
||||
|
||||
HANDLE res = TrueCreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
|
||||
|
||||
if (res == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
printf("[CreateFileW] failed to read file 0x%X | %ls\n", GetLastError(), lpFileName);
|
||||
}
|
||||
|
||||
return res;
|
||||
return TrueCreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
|
||||
}
|
||||
|
||||
DWORD WINAPI GetFileAttributesW_Hook(LPCWSTR lpFileName)
|
||||
|
||||
Reference in New Issue
Block a user