mirror of
https://github.com/WinDurango/WinDurango.git
synced 2026-01-31 00:55:17 +01:00
Merge pull request #91 from AleBello7276/main
This commit is contained in:
92
dlls/d3d11_x/ID3D11BufferWrapper.cpp
Normal file
92
dlls/d3d11_x/ID3D11BufferWrapper.cpp
Normal file
@@ -0,0 +1,92 @@
|
||||
#include "pch.h"
|
||||
#include "ID3DWrappers.h"
|
||||
|
||||
HRESULT d3d11x::ID3D11BufferWrapper::QueryInterface(REFIID riid, void** ppvObject)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
ULONG d3d11x::ID3D11BufferWrapper::AddRef( )
|
||||
{
|
||||
return InterlockedIncrement(&m_RefCount);
|
||||
}
|
||||
|
||||
ULONG d3d11x::ID3D11BufferWrapper::Release( )
|
||||
{
|
||||
ULONG refCount = InterlockedDecrement(&m_RefCount);
|
||||
if (refCount == 0)
|
||||
delete this;
|
||||
return refCount;
|
||||
}
|
||||
|
||||
|
||||
void __stdcall d3d11x::ID3D11BufferWrapper::GetDevice(ID3D11Device** ppDevice)
|
||||
{
|
||||
// Probably not necessary but just to be sure -AleBlbl
|
||||
::ID3D11Device** device = nullptr;
|
||||
this->m_realBuffer->GetDevice(device);
|
||||
ppDevice = reinterpret_cast<ID3D11Device**>(ppDevice);
|
||||
}
|
||||
|
||||
HRESULT __stdcall d3d11x::ID3D11BufferWrapper::GetPrivateData(REFGUID guid, UINT* pDataSize, void* pData)
|
||||
{
|
||||
return m_realBuffer->GetPrivateData(guid, pDataSize, pData);
|
||||
}
|
||||
|
||||
HRESULT __stdcall d3d11x::ID3D11BufferWrapper::SetPrivateData(REFGUID guid, UINT DataSize, const void* pData)
|
||||
{
|
||||
return m_realBuffer->SetPrivateData(guid, DataSize, pData);
|
||||
}
|
||||
|
||||
HRESULT __stdcall d3d11x::ID3D11BufferWrapper::SetPrivateDataInterface(REFGUID guid, const IUnknown* pData)
|
||||
{
|
||||
return m_realBuffer->SetPrivateDataInterface(guid, pData);
|
||||
}
|
||||
|
||||
HRESULT __stdcall d3d11x::ID3D11BufferWrapper::SetName(const wchar_t* name)
|
||||
{
|
||||
printf("[ID3D11RenderTargetViewWrapper]: SetName STUB\n");
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
void __stdcall d3d11x::ID3D11BufferWrapper::GetType(D3D11_RESOURCE_DIMENSION* pResourceDimension)
|
||||
{
|
||||
return m_realBuffer->GetType(pResourceDimension);
|
||||
}
|
||||
|
||||
void __stdcall d3d11x::ID3D11BufferWrapper::SetEvictionPriority(UINT EvictionPriority)
|
||||
{
|
||||
return m_realBuffer->SetEvictionPriority(EvictionPriority);
|
||||
}
|
||||
|
||||
UINT __stdcall d3d11x::ID3D11BufferWrapper::GetEvictionPriority(void)
|
||||
{
|
||||
return m_realBuffer->GetEvictionPriority( );
|
||||
}
|
||||
|
||||
void __stdcall d3d11x::ID3D11BufferWrapper::GetDescriptor(D3D11X_DESCRIPTOR_RESOURCE* descriptor)
|
||||
{
|
||||
printf("[ID3D11Texture2DWrapper]: GetDescriptor STUB\n");
|
||||
}
|
||||
|
||||
void __stdcall d3d11x::ID3D11BufferWrapper::GetDesc(D3D11_BUFFER_DESC* pDesc)
|
||||
{
|
||||
return m_realBuffer->GetDesc(pDesc);
|
||||
}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
#include "pch.h"
|
||||
#include "ID3DDeviceContext.h"
|
||||
#include "ID3DWrappers.h"
|
||||
|
||||
|
||||
namespace d3d11x
|
||||
{
|
||||
|
||||
}
|
||||
@@ -17,6 +17,40 @@ namespace d3d11x
|
||||
struct _D3D11X_MSAA_SAMPLE_PRIORITIES;
|
||||
struct _D3D11X_MSAA_SAMPLE_POSITIONS;
|
||||
|
||||
|
||||
class ID3D11BufferWrapper : public ID3D11Buffer_X
|
||||
{
|
||||
public:
|
||||
ID3D11Buffer* m_realBuffer;
|
||||
|
||||
ID3D11BufferWrapper(::ID3D11Buffer* buf) : m_realBuffer(buf)
|
||||
{
|
||||
m_RefCount = 1;
|
||||
}
|
||||
|
||||
|
||||
// IGraphicsUnknown
|
||||
HRESULT QueryInterface(REFIID riid, void** ppvObject) override;
|
||||
ULONG AddRef( ) override;
|
||||
ULONG Release( ) override;
|
||||
|
||||
// ID3D11DeviceChild
|
||||
void STDMETHODCALLTYPE GetDevice(_Outptr_ ID3D11Device** ppDevice) override;
|
||||
HRESULT STDMETHODCALLTYPE GetPrivateData(_In_ REFGUID guid, _Inout_ UINT* pDataSize, _Out_writes_bytes_opt_(*pDataSize) void* pData) override;
|
||||
HRESULT STDMETHODCALLTYPE SetPrivateData(_In_ REFGUID guid, _In_ UINT DataSize, _In_reads_bytes_opt_(DataSize) const void* pData) override;
|
||||
HRESULT STDMETHODCALLTYPE SetPrivateDataInterface(_In_ REFGUID guid, _In_opt_ const IUnknown* pData) override;
|
||||
HRESULT STDMETHODCALLTYPE SetName(const wchar_t* name) override;
|
||||
|
||||
// ID3D11Resource
|
||||
void STDMETHODCALLTYPE GetType(_Out_ D3D11_RESOURCE_DIMENSION* pResourceDimension) override;
|
||||
void STDMETHODCALLTYPE SetEvictionPriority(_In_ UINT EvictionPriority) override;
|
||||
UINT STDMETHODCALLTYPE GetEvictionPriority(void) override;
|
||||
void STDMETHODCALLTYPE GetDescriptor(D3D11X_DESCRIPTOR_RESOURCE* descriptor) override;
|
||||
|
||||
// ID3D11Buffer
|
||||
void STDMETHODCALLTYPE GetDesc(_Out_ D3D11_BUFFER_DESC* pDesc) override;
|
||||
};
|
||||
|
||||
|
||||
class ID3D11Texture2DWrapper : public ID3D11Texture2D_X
|
||||
{
|
||||
@@ -105,7 +139,21 @@ namespace d3d11x
|
||||
_In_range_(0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot) UINT NumBuffers,
|
||||
_In_reads_opt_(NumBuffers) ID3D11Buffer* const* ppConstantBuffers)
|
||||
{
|
||||
m_realDeviceCtx->VSSetConstantBuffers(StartSlot, NumBuffers, 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->VSSetConstantBuffers(StartSlot, NumBuffers, modifiedBuffers);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_realDeviceCtx->VSSetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
}
|
||||
|
||||
}
|
||||
virtual void STDMETHODCALLTYPE PSSetShaderResources(
|
||||
_In_range_(0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1) UINT StartSlot,
|
||||
@@ -154,21 +202,35 @@ namespace d3d11x
|
||||
_In_ UINT Subresource,
|
||||
_In_ D3D11_MAP MapType,
|
||||
_In_ UINT MapFlags,
|
||||
_Out_opt_ D3D11_MAPPED_SUBRESOURCE* pMappedResource) {
|
||||
return m_realDeviceCtx->Map(pResource, Subresource, MapType, MapFlags, pMappedResource);
|
||||
_Out_opt_ D3D11_MAPPED_SUBRESOURCE* pMappedResource)
|
||||
{
|
||||
return m_realDeviceCtx->Map(reinterpret_cast<ID3D11BufferWrapper*>(pResource)->m_realBuffer, Subresource, MapType, MapFlags, pMappedResource);
|
||||
}
|
||||
|
||||
virtual void STDMETHODCALLTYPE Unmap(
|
||||
_In_ ID3D11Resource* pResource,
|
||||
_In_ UINT Subresource) {
|
||||
m_realDeviceCtx->Unmap(pResource, Subresource);
|
||||
m_realDeviceCtx->Unmap(reinterpret_cast<ID3D11BufferWrapper*>(pResource)->m_realBuffer, Subresource);
|
||||
}
|
||||
|
||||
virtual void STDMETHODCALLTYPE PSSetConstantBuffers(
|
||||
_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->PSSetConstantBuffers(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->PSSetConstantBuffers(StartSlot, NumBuffers, modifiedBuffers);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_realDeviceCtx->PSSetConstantBuffers(StartSlot, NumBuffers, ppConstantBuffers);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void STDMETHODCALLTYPE IASetInputLayout(
|
||||
@@ -283,9 +345,23 @@ namespace d3d11x
|
||||
virtual void STDMETHODCALLTYPE OMSetRenderTargets(
|
||||
_In_range_(0, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT) UINT NumViews,
|
||||
_In_reads_opt_(NumViews) ID3D11RenderTargetView* const* ppRenderTargetViews,
|
||||
_In_opt_ ID3D11DepthStencilView* pDepthStencilView) {
|
||||
_In_opt_ ID3D11DepthStencilView* pDepthStencilView)
|
||||
{
|
||||
if (ppRenderTargetViews != NULL)
|
||||
{
|
||||
ID3D11RenderTargetView** modifiedViews = new ID3D11RenderTargetView * [ NumViews ];
|
||||
for (UINT i = 0; i < NumViews; ++i)
|
||||
{
|
||||
modifiedViews[ i ] = reinterpret_cast<ID3D11RenderTargetViewWrapper*>(ppRenderTargetViews[ i ])->m_realTarget;
|
||||
}
|
||||
m_realDeviceCtx->OMSetRenderTargets(NumViews, modifiedViews, pDepthStencilView);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_realDeviceCtx->OMSetRenderTargets(NumViews, ppRenderTargetViews, pDepthStencilView);
|
||||
}
|
||||
|
||||
m_realDeviceCtx->OMSetRenderTargets(NumViews, &(reinterpret_cast<ID3D11RenderTargetViewWrapper*>(*ppRenderTargetViews))->m_realTarget, pDepthStencilView);
|
||||
|
||||
}
|
||||
|
||||
virtual void STDMETHODCALLTYPE OMSetRenderTargetsAndUnorderedAccessViews(
|
||||
@@ -1052,8 +1128,10 @@ namespace d3d11x
|
||||
|
||||
virtual void STDMETHODCALLTYPE TiledResourceBarrier(
|
||||
_In_opt_ ID3D11DeviceChild* pTiledResourceOrViewAccessBeforeBarrier,
|
||||
_In_opt_ ID3D11DeviceChild* pTiledResourceOrViewAccessAfterBarrier) {
|
||||
m_realDeviceCtx->TiledResourceBarrier(pTiledResourceOrViewAccessBeforeBarrier, pTiledResourceOrViewAccessAfterBarrier);
|
||||
_In_opt_ ID3D11DeviceChild* pTiledResourceOrViewAccessAfterBarrier)
|
||||
{
|
||||
m_realDeviceCtx->TiledResourceBarrier(reinterpret_cast<ID3D11RenderTargetViewWrapper*>(pTiledResourceOrViewAccessBeforeBarrier)->m_realTarget,
|
||||
reinterpret_cast<ID3D11RenderTargetViewWrapper*>(pTiledResourceOrViewAccessAfterBarrier)->m_realTarget);
|
||||
}
|
||||
|
||||
virtual BOOL STDMETHODCALLTYPE IsAnnotationEnabled(void) {
|
||||
|
||||
@@ -97,4 +97,13 @@ namespace d3d11x
|
||||
_Out_ D3D11_RENDER_TARGET_VIEW_DESC* pDesc) PURE;
|
||||
|
||||
};
|
||||
|
||||
struct ID3D11Buffer_X : ID3D11Resource_X
|
||||
{
|
||||
public:
|
||||
virtual void STDMETHODCALLTYPE GetDesc(
|
||||
/* [annotation] */
|
||||
_Out_ D3D11_BUFFER_DESC* pDesc) = 0;
|
||||
|
||||
};
|
||||
}
|
||||
@@ -103,7 +103,7 @@
|
||||
<ClCompile Include="d3d11_x.cpp" />
|
||||
<ClCompile Include="d3d_x\d3d11_x_device.cpp" />
|
||||
<ClCompile Include="dllmain.cpp" />
|
||||
<ClCompile Include="ID3D11DeviceContextWrapper.cpp" />
|
||||
<ClCompile Include="ID3D11BufferWrapper.cpp" />
|
||||
<ClCompile Include="ID3D11RenderTargetViewWrapper.cpp" />
|
||||
<ClCompile Include="ID3D11Texture2DWrapper.cpp" />
|
||||
<ClCompile Include="ID3DWrappers.cpp" />
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
<ClCompile Include="ID3DWrappers.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ID3D11DeviceContextWrapper.cpp">
|
||||
<ClCompile Include="ID3D11BufferWrapper.cpp">
|
||||
<Filter>Source Files\ID3D</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
|
||||
@@ -82,6 +82,29 @@ void d3d11x::D3D11DeviceXWrapperX::GetImmediateContext(ID3D11DeviceContext** ppI
|
||||
*ppImmediateContext = reinterpret_cast<d3d11x::ID3D11DeviceContext*>(new d3d11x::ID3D11DeviceContextXWrapper(ctx));
|
||||
}
|
||||
|
||||
HRESULT d3d11x::D3D11DeviceXWrapperX::CreateDeferredContext(UINT ContextFlags, d3d11x::ID3D11DeviceContext** ppDeferredContext)
|
||||
{
|
||||
::ID3D11DeviceContext2* cxt2{};
|
||||
HRESULT hr = m_realDevice->CreateDeferredContext(ContextFlags, (::ID3D11DeviceContext**) & cxt2);
|
||||
// (*ppDeferredContext)->QueryInterface(IID_PPV_ARGS(&cxt2));
|
||||
*ppDeferredContext = reinterpret_cast<d3d11x::ID3D11DeviceContext*>(new d3d11x::ID3D11DeviceContextXWrapper(cxt2));
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT d3d11x::D3D11DeviceXWrapperX::CreateBuffer(
|
||||
const D3D11_BUFFER_DESC* pDesc,
|
||||
const D3D11_SUBRESOURCE_DATA* pInitialData,
|
||||
d3d11x::ID3D11Buffer_X** ppBuffer)
|
||||
{
|
||||
// return m_realDevice->CreateBuffer(pDesc, pInitialData, ppBuffer);
|
||||
|
||||
ID3D11Buffer* buffer = nullptr;
|
||||
HRESULT hr = m_realDevice->CreateBuffer(pDesc, pInitialData, &buffer);
|
||||
*reinterpret_cast<ID3D11Buffer_X**>(ppBuffer) = new ID3D11BufferWrapper(buffer);
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
void d3d11x::D3D11DeviceXWrapperX::GetImmediateContextX(
|
||||
_Out_ ID3D11DeviceContextX** ppImmediateContextX)
|
||||
|
||||
@@ -94,6 +94,8 @@ namespace d3d11x
|
||||
IUnknown* m_pUnknown;
|
||||
};
|
||||
|
||||
class ID3D11Buffer_X;
|
||||
class ID3D11BufferWrapper;
|
||||
class ID3D11RenderTargetView_X;
|
||||
class ID3D11RenderTargetViewWrapper;
|
||||
class IDXGIDeviceWrapper;
|
||||
@@ -132,7 +134,7 @@ namespace d3d11x
|
||||
|
||||
virtual HRESULT CreateBuffer(_In_ const D3D11_BUFFER_DESC* pDesc,
|
||||
_In_opt_ const D3D11_SUBRESOURCE_DATA* pInitialData,
|
||||
_Out_opt_ ID3D11Buffer** ppBuffer) = 0;
|
||||
_Out_opt_ d3d11x::ID3D11Buffer_X** ppBuffer) = 0;
|
||||
|
||||
virtual HRESULT CreateTexture1D(_In_ const D3D11_TEXTURE1D_DESC* pDesc,
|
||||
_In_reads_opt_(_Inexpressible_(pDesc->MipLevels* pDesc->ArraySize)) const D3D11_SUBRESOURCE_DATA* pInitialData,
|
||||
@@ -248,7 +250,7 @@ namespace d3d11x
|
||||
_In_ const D3D11_COUNTER_DESC* pCounterDesc,
|
||||
_Out_opt_ ID3D11Counter** ppCounter) = 0;
|
||||
|
||||
virtual HRESULT CreateDeferredContext(UINT ContextFlags, _Out_opt_ ::ID3D11DeviceContext** ppDeferredContext) = 0;
|
||||
virtual HRESULT CreateDeferredContext(UINT ContextFlags, _Out_opt_ d3d11x::ID3D11DeviceContext** ppDeferredContext) = 0;
|
||||
|
||||
virtual HRESULT OpenSharedResource(
|
||||
_In_ HANDLE hResource,
|
||||
@@ -446,9 +448,7 @@ namespace d3d11x
|
||||
HRESULT CreateBuffer(
|
||||
const D3D11_BUFFER_DESC* pDesc,
|
||||
const D3D11_SUBRESOURCE_DATA* pInitialData,
|
||||
ID3D11Buffer** ppBuffer) override {
|
||||
return m_realDevice->CreateBuffer(pDesc, pInitialData, ppBuffer);
|
||||
}
|
||||
d3d11x::ID3D11Buffer_X** ppBuffer) override;
|
||||
|
||||
HRESULT CreateTexture1D(
|
||||
const D3D11_TEXTURE1D_DESC* pDesc,
|
||||
@@ -608,11 +608,9 @@ namespace d3d11x
|
||||
}
|
||||
|
||||
// @Patoke todo: unwrap
|
||||
// @Aleblbl done, check cpp file
|
||||
HRESULT CreateDeferredContext(
|
||||
UINT ContextFlags,
|
||||
::ID3D11DeviceContext** ppDeferredContext) override {
|
||||
return m_realDevice->CreateDeferredContext(ContextFlags, ppDeferredContext);
|
||||
}
|
||||
UINT ContextFlags, d3d11x::ID3D11DeviceContext** ppDeferredContext) override;
|
||||
|
||||
HRESULT OpenSharedResource(
|
||||
HANDLE hResource,
|
||||
|
||||
Reference in New Issue
Block a user