Merge pull request #91 from AleBello7276/main

This commit is contained in:
Tyler Jaacks
2025-01-06 23:53:50 -06:00
committed by GitHub
8 changed files with 221 additions and 30 deletions

View 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);
}

View File

@@ -1,9 +0,0 @@
#include "pch.h"
#include "ID3DDeviceContext.h"
#include "ID3DWrappers.h"
namespace d3d11x
{
}

View File

@@ -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) {

View File

@@ -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;
};
}

View File

@@ -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" />

View File

@@ -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>

View File

@@ -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)

View File

@@ -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,