mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-11-05 13:37:06 +00:00
Wrap DXGI 1.5 passthrough, to ensure the wrapping ecosystem isn't broken
This commit is contained in:
1 parent
2c7791c7bd
commit
447b64fd14
11 files changed
+188
-92
No files matched your search
@@ -621,7 +621,7 @@ HRESULT WrappedID3D11Device::QueryInterface(REFIID riid, void **ppvObject)
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
IDXGIDevice *real = (IDXGIDevice *)(*ppvObject);
|
||||
*ppvObject = (IDXGIDevice *)(new WrappedIDXGIDevice3(real, this));
|
||||
*ppvObject = (IDXGIDevice *)(new WrappedIDXGIDevice4(real, this));
|
||||
return S_OK;
|
||||
}
|
||||
else
|
||||
@@ -637,7 +637,7 @@ HRESULT WrappedID3D11Device::QueryInterface(REFIID riid, void **ppvObject)
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
IDXGIDevice1 *real = (IDXGIDevice1 *)(*ppvObject);
|
||||
*ppvObject = (IDXGIDevice1 *)(new WrappedIDXGIDevice3(real, this));
|
||||
*ppvObject = (IDXGIDevice1 *)(new WrappedIDXGIDevice4(real, this));
|
||||
return S_OK;
|
||||
}
|
||||
else
|
||||
@@ -653,7 +653,7 @@ HRESULT WrappedID3D11Device::QueryInterface(REFIID riid, void **ppvObject)
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
IDXGIDevice2 *real = (IDXGIDevice2 *)(*ppvObject);
|
||||
*ppvObject = (IDXGIDevice2 *)(new WrappedIDXGIDevice3(real, this));
|
||||
*ppvObject = (IDXGIDevice2 *)(new WrappedIDXGIDevice4(real, this));
|
||||
return S_OK;
|
||||
}
|
||||
else
|
||||
@@ -669,7 +669,7 @@ HRESULT WrappedID3D11Device::QueryInterface(REFIID riid, void **ppvObject)
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
IDXGIDevice3 *real = (IDXGIDevice3 *)(*ppvObject);
|
||||
*ppvObject = (IDXGIDevice3 *)(new WrappedIDXGIDevice3(real, this));
|
||||
*ppvObject = (IDXGIDevice3 *)(new WrappedIDXGIDevice4(real, this));
|
||||
return S_OK;
|
||||
}
|
||||
else
|
||||
@@ -2408,7 +2408,7 @@ void WrappedID3D11Device::ReplayLog(uint32_t startEventID, uint32_t endEventID,
|
||||
RDCFATAL("Unexpected replay type");
|
||||
}
|
||||
|
||||
void WrappedID3D11Device::ReleaseSwapchainResources(WrappedIDXGISwapChain3 *swap)
|
||||
void WrappedID3D11Device::ReleaseSwapchainResources(WrappedIDXGISwapChain4 *swap)
|
||||
{
|
||||
for(int i = 0; i < swap->GetNumBackbuffers(); i++)
|
||||
{
|
||||
@@ -2444,7 +2444,7 @@ void WrappedID3D11Device::ReleaseSwapchainResources(WrappedIDXGISwapChain3 *swap
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedID3D11Device::Serialise_WrapSwapchainBuffer(WrappedIDXGISwapChain3 *swap,
|
||||
bool WrappedID3D11Device::Serialise_WrapSwapchainBuffer(WrappedIDXGISwapChain4 *swap,
|
||||
DXGI_SWAP_CHAIN_DESC *swapDesc, UINT buffer,
|
||||
IUnknown *realSurface)
|
||||
{
|
||||
@@ -2498,7 +2498,7 @@ bool WrappedID3D11Device::Serialise_WrapSwapchainBuffer(WrappedIDXGISwapChain3 *
|
||||
return true;
|
||||
}
|
||||
|
||||
IUnknown *WrappedID3D11Device::WrapSwapchainBuffer(WrappedIDXGISwapChain3 *swap,
|
||||
IUnknown *WrappedID3D11Device::WrapSwapchainBuffer(WrappedIDXGISwapChain4 *swap,
|
||||
DXGI_SWAP_CHAIN_DESC *swapDesc, UINT buffer,
|
||||
IUnknown *realSurface)
|
||||
{
|
||||
@@ -2659,7 +2659,7 @@ bool WrappedID3D11Device::EndFrameCapture(void *dev, void *wnd)
|
||||
|
||||
CaptureFailReason reason;
|
||||
|
||||
WrappedIDXGISwapChain3 *swap = NULL;
|
||||
WrappedIDXGISwapChain4 *swap = NULL;
|
||||
|
||||
if(wnd)
|
||||
{
|
||||
@@ -3198,7 +3198,7 @@ void WrappedID3D11Device::UnlockForChunkRemoval()
|
||||
}
|
||||
}
|
||||
|
||||
void WrappedID3D11Device::FirstFrame(WrappedIDXGISwapChain3 *swapChain)
|
||||
void WrappedID3D11Device::FirstFrame(WrappedIDXGISwapChain4 *swapChain)
|
||||
{
|
||||
DXGI_SWAP_CHAIN_DESC swapdesc;
|
||||
swapChain->GetDesc(&swapdesc);
|
||||
@@ -3212,7 +3212,7 @@ void WrappedID3D11Device::FirstFrame(WrappedIDXGISwapChain3 *swapChain)
|
||||
}
|
||||
}
|
||||
|
||||
HRESULT WrappedID3D11Device::Present(WrappedIDXGISwapChain3 *swap, UINT SyncInterval, UINT Flags)
|
||||
HRESULT WrappedID3D11Device::Present(WrappedIDXGISwapChain4 *swap, UINT SyncInterval, UINT Flags)
|
||||
{
|
||||
if((Flags & DXGI_PRESENT_TEST) != 0)
|
||||
return S_OK;
|
||||
|
||||
@@ -340,7 +340,7 @@ private:
|
||||
|
||||
static WrappedID3D11Device *m_pCurrentWrappedDevice;
|
||||
|
||||
map<WrappedIDXGISwapChain3 *, ID3D11RenderTargetView *> m_SwapChains;
|
||||
map<WrappedIDXGISwapChain4 *, ID3D11RenderTargetView *> m_SwapChains;
|
||||
|
||||
uint32_t m_FrameCounter;
|
||||
uint32_t m_FailedFrame;
|
||||
@@ -393,7 +393,7 @@ public:
|
||||
void LockForChunkRemoval();
|
||||
void UnlockForChunkRemoval();
|
||||
|
||||
void FirstFrame(WrappedIDXGISwapChain3 *swapChain);
|
||||
void FirstFrame(WrappedIDXGISwapChain4 *swapChain);
|
||||
|
||||
vector<DebugMessage> GetDebugMessages();
|
||||
void AddDebugMessage(DebugMessage msg);
|
||||
@@ -473,14 +473,14 @@ public:
|
||||
ID3D11ClassInstance *inst));
|
||||
|
||||
// Swap Chain
|
||||
IMPLEMENT_FUNCTION_SERIALISED(IUnknown *, WrapSwapchainBuffer(WrappedIDXGISwapChain3 *swap,
|
||||
IMPLEMENT_FUNCTION_SERIALISED(IUnknown *, WrapSwapchainBuffer(WrappedIDXGISwapChain4 *swap,
|
||||
DXGI_SWAP_CHAIN_DESC *desc,
|
||||
UINT buffer, IUnknown *realSurface));
|
||||
HRESULT Present(WrappedIDXGISwapChain3 *swap, UINT SyncInterval, UINT Flags);
|
||||
HRESULT Present(WrappedIDXGISwapChain4 *swap, UINT SyncInterval, UINT Flags);
|
||||
|
||||
void NewSwapchainBuffer(IUnknown *backbuffer);
|
||||
|
||||
void ReleaseSwapchainResources(WrappedIDXGISwapChain3 *swap);
|
||||
void ReleaseSwapchainResources(WrappedIDXGISwapChain4 *swap);
|
||||
|
||||
void InternalRef() { InterlockedIncrement(&m_InternalRefcount); }
|
||||
void InternalRelease() { InterlockedDecrement(&m_InternalRefcount); }
|
||||
|
||||
@@ -53,7 +53,7 @@ public:
|
||||
{
|
||||
bool success = true;
|
||||
|
||||
WrappedIDXGISwapChain3::RegisterD3DDeviceCallback(GetD3D11DeviceIfAlloc);
|
||||
WrappedIDXGISwapChain4::RegisterD3DDeviceCallback(GetD3D11DeviceIfAlloc);
|
||||
|
||||
// also require d3dcompiler_??.dll
|
||||
if(GetD3DCompiler() == NULL)
|
||||
@@ -258,7 +258,7 @@ private:
|
||||
wrap->GetImmediateContext(ppImmediateContext);
|
||||
|
||||
if(ppSwapChain && *ppSwapChain)
|
||||
*ppSwapChain = new WrappedIDXGISwapChain3(
|
||||
*ppSwapChain = new WrappedIDXGISwapChain4(
|
||||
*ppSwapChain, pSwapChainDesc ? pSwapChainDesc->OutputWindow : NULL, wrap);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1931,7 +1931,7 @@ ReplayCreateStatus D3D11_CreateReplayDevice(const char *logfile, IReplayDriver *
|
||||
{
|
||||
RDCDEBUG("Creating a D3D11 replay device");
|
||||
|
||||
WrappedIDXGISwapChain3::RegisterD3DDeviceCallback(GetD3D11DeviceIfAlloc);
|
||||
WrappedIDXGISwapChain4::RegisterD3DDeviceCallback(GetD3D11DeviceIfAlloc);
|
||||
|
||||
HMODULE lib = NULL;
|
||||
lib = LoadLibraryA("d3d11.dll");
|
||||
|
||||
@@ -143,22 +143,22 @@ public:
|
||||
return NULL;
|
||||
}
|
||||
// the rest forward to the device
|
||||
virtual void FirstFrame(WrappedIDXGISwapChain3 *swapChain) { m_pDevice->FirstFrame(swapChain); }
|
||||
virtual void FirstFrame(WrappedIDXGISwapChain4 *swapChain) { m_pDevice->FirstFrame(swapChain); }
|
||||
virtual void NewSwapchainBuffer(IUnknown *backbuffer)
|
||||
{
|
||||
m_pDevice->NewSwapchainBuffer(backbuffer);
|
||||
}
|
||||
virtual void ReleaseSwapchainResources(WrappedIDXGISwapChain3 *swapChain)
|
||||
virtual void ReleaseSwapchainResources(WrappedIDXGISwapChain4 *swapChain)
|
||||
{
|
||||
m_pDevice->ReleaseSwapchainResources(swapChain);
|
||||
}
|
||||
virtual IUnknown *WrapSwapchainBuffer(WrappedIDXGISwapChain3 *swap, DXGI_SWAP_CHAIN_DESC *swapDesc,
|
||||
virtual IUnknown *WrapSwapchainBuffer(WrappedIDXGISwapChain4 *swap, DXGI_SWAP_CHAIN_DESC *swapDesc,
|
||||
UINT buffer, IUnknown *realSurface)
|
||||
{
|
||||
return m_pDevice->WrapSwapchainBuffer(swap, swapDesc, buffer, realSurface);
|
||||
}
|
||||
|
||||
virtual HRESULT Present(WrappedIDXGISwapChain3 *swapChain, UINT SyncInterval, UINT Flags)
|
||||
virtual HRESULT Present(WrappedIDXGISwapChain4 *swapChain, UINT SyncInterval, UINT Flags)
|
||||
{
|
||||
return m_pDevice->Present(swapChain, SyncInterval, Flags);
|
||||
}
|
||||
|
||||
@@ -392,7 +392,7 @@ HRESULT WrappedID3D12Device::QueryInterface(REFIID riid, void **ppvObject)
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
IDXGIDevice *real = (IDXGIDevice *)(*ppvObject);
|
||||
*ppvObject = (IDXGIDevice *)(new WrappedIDXGIDevice3(real, this));
|
||||
*ppvObject = (IDXGIDevice *)(new WrappedIDXGIDevice4(real, this));
|
||||
return S_OK;
|
||||
}
|
||||
else
|
||||
@@ -408,7 +408,7 @@ HRESULT WrappedID3D12Device::QueryInterface(REFIID riid, void **ppvObject)
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
IDXGIDevice1 *real = (IDXGIDevice1 *)(*ppvObject);
|
||||
*ppvObject = (IDXGIDevice1 *)(new WrappedIDXGIDevice3(real, this));
|
||||
*ppvObject = (IDXGIDevice1 *)(new WrappedIDXGIDevice4(real, this));
|
||||
return S_OK;
|
||||
}
|
||||
else
|
||||
@@ -424,7 +424,7 @@ HRESULT WrappedID3D12Device::QueryInterface(REFIID riid, void **ppvObject)
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
IDXGIDevice2 *real = (IDXGIDevice2 *)(*ppvObject);
|
||||
*ppvObject = (IDXGIDevice2 *)(new WrappedIDXGIDevice3(real, this));
|
||||
*ppvObject = (IDXGIDevice2 *)(new WrappedIDXGIDevice4(real, this));
|
||||
return S_OK;
|
||||
}
|
||||
else
|
||||
@@ -440,7 +440,7 @@ HRESULT WrappedID3D12Device::QueryInterface(REFIID riid, void **ppvObject)
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
IDXGIDevice3 *real = (IDXGIDevice3 *)(*ppvObject);
|
||||
*ppvObject = (IDXGIDevice3 *)(new WrappedIDXGIDevice3(real, this));
|
||||
*ppvObject = (IDXGIDevice3 *)(new WrappedIDXGIDevice4(real, this));
|
||||
return S_OK;
|
||||
}
|
||||
else
|
||||
@@ -509,7 +509,7 @@ void WrappedID3D12Device::CheckForDeath()
|
||||
}
|
||||
}
|
||||
|
||||
void WrappedID3D12Device::FirstFrame(WrappedIDXGISwapChain3 *swap)
|
||||
void WrappedID3D12Device::FirstFrame(WrappedIDXGISwapChain4 *swap)
|
||||
{
|
||||
DXGI_SWAP_CHAIN_DESC swapdesc;
|
||||
swap->GetDesc(&swapdesc);
|
||||
@@ -529,7 +529,7 @@ void WrappedID3D12Device::ApplyBarriers(vector<D3D12_RESOURCE_BARRIER> &barriers
|
||||
GetResourceManager()->ApplyBarriers(barriers, m_ResourceStates);
|
||||
}
|
||||
|
||||
void WrappedID3D12Device::ReleaseSwapchainResources(WrappedIDXGISwapChain3 *swap)
|
||||
void WrappedID3D12Device::ReleaseSwapchainResources(WrappedIDXGISwapChain4 *swap)
|
||||
{
|
||||
for(int i = 0; i < swap->GetNumBackbuffers(); i++)
|
||||
{
|
||||
@@ -558,7 +558,7 @@ void WrappedID3D12Device::ReleaseSwapchainResources(WrappedIDXGISwapChain3 *swap
|
||||
}
|
||||
|
||||
bool WrappedID3D12Device::Serialise_WrapSwapchainBuffer(Serialiser *localSerialiser,
|
||||
WrappedIDXGISwapChain3 *swap,
|
||||
WrappedIDXGISwapChain4 *swap,
|
||||
DXGI_SWAP_CHAIN_DESC *swapDesc, UINT buffer,
|
||||
IUnknown *realSurface)
|
||||
{
|
||||
@@ -618,7 +618,7 @@ bool WrappedID3D12Device::Serialise_WrapSwapchainBuffer(Serialiser *localSeriali
|
||||
return true;
|
||||
}
|
||||
|
||||
IUnknown *WrappedID3D12Device::WrapSwapchainBuffer(WrappedIDXGISwapChain3 *swap,
|
||||
IUnknown *WrappedID3D12Device::WrapSwapchainBuffer(WrappedIDXGISwapChain4 *swap,
|
||||
DXGI_SWAP_CHAIN_DESC *swapDesc, UINT buffer,
|
||||
IUnknown *realSurface)
|
||||
{
|
||||
@@ -891,7 +891,7 @@ void WrappedID3D12Device::WriteToSubresource(WrappedID3D12Resource *Resource, UI
|
||||
}
|
||||
}
|
||||
|
||||
HRESULT WrappedID3D12Device::Present(WrappedIDXGISwapChain3 *swap, UINT SyncInterval, UINT Flags)
|
||||
HRESULT WrappedID3D12Device::Present(WrappedIDXGISwapChain4 *swap, UINT SyncInterval, UINT Flags)
|
||||
{
|
||||
if((Flags & DXGI_PRESENT_TEST) != 0)
|
||||
return S_OK;
|
||||
@@ -1123,7 +1123,7 @@ bool WrappedID3D12Device::EndFrameCapture(void *dev, void *wnd)
|
||||
if(m_State != WRITING_CAPFRAME)
|
||||
return true;
|
||||
|
||||
WrappedIDXGISwapChain3 *swap = NULL;
|
||||
WrappedIDXGISwapChain4 *swap = NULL;
|
||||
SwapPresentInfo swapInfo = {};
|
||||
|
||||
if(wnd)
|
||||
|
||||
@@ -320,10 +320,10 @@ private:
|
||||
int32_t lastPresentedBuffer;
|
||||
};
|
||||
|
||||
map<WrappedIDXGISwapChain3 *, SwapPresentInfo> m_SwapChains;
|
||||
map<WrappedIDXGISwapChain4 *, SwapPresentInfo> m_SwapChains;
|
||||
pair<ResourceId, DXGI_FORMAT> m_BackbufferFormat;
|
||||
|
||||
WrappedIDXGISwapChain3 *m_LastSwap;
|
||||
WrappedIDXGISwapChain4 *m_LastSwap;
|
||||
|
||||
UINT m_DescriptorIncrements[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES];
|
||||
|
||||
@@ -353,7 +353,7 @@ public:
|
||||
ResourceId GetResourceID() { return m_ResourceID; }
|
||||
Threading::CriticalSection &GetCapTransitionLock() { return m_CapTransitionLock; }
|
||||
void ReleaseSwapchainResources(IDXGISwapChain *swap, IUnknown **backbuffers, int numBackbuffers);
|
||||
void FirstFrame(WrappedIDXGISwapChain3 *swap);
|
||||
void FirstFrame(WrappedIDXGISwapChain4 *swap);
|
||||
FetchFrameRecord &GetFrameRecord() { return m_FrameRecord; }
|
||||
const FetchDrawcall *GetDrawcall(uint32_t eventID);
|
||||
|
||||
@@ -440,12 +440,12 @@ public:
|
||||
}
|
||||
// Swap Chain
|
||||
IMPLEMENT_FUNCTION_THREAD_SERIALISED(IUnknown *, WrapSwapchainBuffer,
|
||||
WrappedIDXGISwapChain3 *swap, DXGI_SWAP_CHAIN_DESC *desc,
|
||||
WrappedIDXGISwapChain4 *swap, DXGI_SWAP_CHAIN_DESC *desc,
|
||||
UINT buffer, IUnknown *realSurface);
|
||||
HRESULT Present(WrappedIDXGISwapChain3 *swap, UINT SyncInterval, UINT Flags);
|
||||
HRESULT Present(WrappedIDXGISwapChain4 *swap, UINT SyncInterval, UINT Flags);
|
||||
|
||||
void NewSwapchainBuffer(IUnknown *backbuffer) {}
|
||||
void ReleaseSwapchainResources(WrappedIDXGISwapChain3 *swap);
|
||||
void ReleaseSwapchainResources(WrappedIDXGISwapChain4 *swap);
|
||||
|
||||
void Map(WrappedID3D12Resource *Resource, UINT Subresource);
|
||||
void Unmap(WrappedID3D12Resource *Resource, UINT Subresource, byte *mapPtr,
|
||||
|
||||
@@ -96,7 +96,7 @@ public:
|
||||
{
|
||||
bool success = true;
|
||||
|
||||
WrappedIDXGISwapChain3::RegisterD3DDeviceCallback(GetD3D12DeviceIfAlloc);
|
||||
WrappedIDXGISwapChain4::RegisterD3DDeviceCallback(GetD3D12DeviceIfAlloc);
|
||||
|
||||
// also require d3dcompiler_??.dll
|
||||
if(GetD3DCompiler() == NULL)
|
||||
|
||||
@@ -1605,7 +1605,7 @@ ReplayCreateStatus D3D12_CreateReplayDevice(const char *logfile, IReplayDriver *
|
||||
{
|
||||
RDCDEBUG("Creating a D3D12 replay device");
|
||||
|
||||
WrappedIDXGISwapChain3::RegisterD3DDeviceCallback(GetD3D12DeviceIfAlloc);
|
||||
WrappedIDXGISwapChain4::RegisterD3DDeviceCallback(GetD3D12DeviceIfAlloc);
|
||||
|
||||
HMODULE lib = NULL;
|
||||
lib = LoadLibraryA("d3d12.dll");
|
||||
|
||||
@@ -40,19 +40,19 @@ string ToStrHelper<false, IID>::Get(const IID &el)
|
||||
return tostrBuf;
|
||||
}
|
||||
|
||||
WRAPPED_POOL_INST(WrappedIDXGIDevice3);
|
||||
WRAPPED_POOL_INST(WrappedIDXGIDevice4);
|
||||
|
||||
std::vector<D3DDeviceCallback> WrappedIDXGISwapChain3::m_D3DCallbacks;
|
||||
std::vector<D3DDeviceCallback> WrappedIDXGISwapChain4::m_D3DCallbacks;
|
||||
|
||||
ID3DDevice *GetD3DDevice(IUnknown *pDevice)
|
||||
{
|
||||
ID3DDevice *wrapDevice = NULL;
|
||||
|
||||
if(WrappedIDXGIDevice3::IsAlloc(pDevice))
|
||||
wrapDevice = ((WrappedIDXGIDevice3 *)(IDXGIDevice3 *)pDevice)->GetD3DDevice();
|
||||
if(WrappedIDXGIDevice4::IsAlloc(pDevice))
|
||||
wrapDevice = ((WrappedIDXGIDevice4 *)(IDXGIDevice3 *)pDevice)->GetD3DDevice();
|
||||
|
||||
if(wrapDevice == NULL)
|
||||
wrapDevice = WrappedIDXGISwapChain3::GetD3DDevice(pDevice);
|
||||
wrapDevice = WrappedIDXGISwapChain4::GetD3DDevice(pDevice);
|
||||
|
||||
return wrapDevice;
|
||||
}
|
||||
@@ -85,7 +85,7 @@ bool RefCountDXGIObject::HandleWrap(REFIID riid, void **ppvObject)
|
||||
// IDXGIFactory1 like a IDXGIFactory should all just work by definition, but there's no way to
|
||||
// know now if someone trying to create a IDXGIFactory really means it or not.
|
||||
IDXGIFactory *real = (IDXGIFactory *)(*ppvObject);
|
||||
*ppvObject = (IDXGIFactory *)(new WrappedIDXGIFactory4(real));
|
||||
*ppvObject = (IDXGIFactory *)(new WrappedIDXGIFactory5(real));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ bool RefCountDXGIObject::HandleWrap(REFIID riid, void **ppvObject)
|
||||
else if(riid == __uuidof(IDXGIFactory1))
|
||||
{
|
||||
IDXGIFactory1 *real = (IDXGIFactory1 *)(*ppvObject);
|
||||
*ppvObject = (IDXGIFactory1 *)(new WrappedIDXGIFactory4(real));
|
||||
*ppvObject = (IDXGIFactory1 *)(new WrappedIDXGIFactory5(real));
|
||||
return true;
|
||||
}
|
||||
else if(riid == __uuidof(IDXGIAdapter2))
|
||||
@@ -122,19 +122,25 @@ bool RefCountDXGIObject::HandleWrap(REFIID riid, void **ppvObject)
|
||||
else if(riid == __uuidof(IDXGIFactory2))
|
||||
{
|
||||
IDXGIFactory2 *real = (IDXGIFactory2 *)(*ppvObject);
|
||||
*ppvObject = (IDXGIFactory2 *)(new WrappedIDXGIFactory4(real));
|
||||
*ppvObject = (IDXGIFactory2 *)(new WrappedIDXGIFactory5(real));
|
||||
return true;
|
||||
}
|
||||
else if(riid == __uuidof(IDXGIFactory3))
|
||||
{
|
||||
IDXGIFactory3 *real = (IDXGIFactory3 *)(*ppvObject);
|
||||
*ppvObject = (IDXGIFactory3 *)(new WrappedIDXGIFactory4(real));
|
||||
*ppvObject = (IDXGIFactory3 *)(new WrappedIDXGIFactory5(real));
|
||||
return true;
|
||||
}
|
||||
else if(riid == __uuidof(IDXGIFactory4))
|
||||
{
|
||||
IDXGIFactory4 *real = (IDXGIFactory4 *)(*ppvObject);
|
||||
*ppvObject = (IDXGIFactory4 *)(new WrappedIDXGIFactory4(real));
|
||||
*ppvObject = (IDXGIFactory4 *)(new WrappedIDXGIFactory5(real));
|
||||
return true;
|
||||
}
|
||||
else if(riid == __uuidof(IDXGIFactory5))
|
||||
{
|
||||
IDXGIFactory5 *real = (IDXGIFactory5 *)(*ppvObject);
|
||||
*ppvObject = (IDXGIFactory5 *)(new WrappedIDXGIFactory5(real));
|
||||
return true;
|
||||
}
|
||||
else
|
||||
@@ -168,7 +174,7 @@ HRESULT RefCountDXGIObject::WrapQueryInterface(IUnknown *real, REFIID riid, void
|
||||
return ret;
|
||||
}
|
||||
|
||||
WrappedIDXGISwapChain3::WrappedIDXGISwapChain3(IDXGISwapChain *real, HWND wnd, ID3DDevice *device)
|
||||
WrappedIDXGISwapChain4::WrappedIDXGISwapChain4(IDXGISwapChain *real, HWND wnd, ID3DDevice *device)
|
||||
: RefCountDXGIObject(real), m_pReal(real), m_pDevice(device), m_iRefcount(1), m_Wnd(wnd)
|
||||
{
|
||||
DXGI_SWAP_CHAIN_DESC desc;
|
||||
@@ -182,6 +188,8 @@ WrappedIDXGISwapChain3::WrappedIDXGISwapChain3(IDXGISwapChain *real, HWND wnd, I
|
||||
real->QueryInterface(__uuidof(IDXGISwapChain2), (void **)&m_pReal2);
|
||||
m_pReal3 = NULL;
|
||||
real->QueryInterface(__uuidof(IDXGISwapChain3), (void **)&m_pReal3);
|
||||
m_pReal4 = NULL;
|
||||
real->QueryInterface(__uuidof(IDXGISwapChain4), (void **)&m_pReal4);
|
||||
|
||||
WrapBuffersAfterResize();
|
||||
|
||||
@@ -190,7 +198,7 @@ WrappedIDXGISwapChain3::WrappedIDXGISwapChain3(IDXGISwapChain *real, HWND wnd, I
|
||||
m_pDevice->FirstFrame(this);
|
||||
}
|
||||
|
||||
WrappedIDXGISwapChain3::~WrappedIDXGISwapChain3()
|
||||
WrappedIDXGISwapChain4::~WrappedIDXGISwapChain4()
|
||||
{
|
||||
m_pDevice->ReleaseSwapchainResources(this);
|
||||
|
||||
@@ -199,10 +207,11 @@ WrappedIDXGISwapChain3::~WrappedIDXGISwapChain3()
|
||||
SAFE_RELEASE(m_pReal1);
|
||||
SAFE_RELEASE(m_pReal2);
|
||||
SAFE_RELEASE(m_pReal3);
|
||||
SAFE_RELEASE(m_pReal4);
|
||||
SAFE_RELEASE(m_pReal);
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE WrappedIDXGISwapChain3::QueryInterface(REFIID riid, void **ppvObject)
|
||||
HRESULT STDMETHODCALLTYPE WrappedIDXGISwapChain4::QueryInterface(REFIID riid, void **ppvObject)
|
||||
{
|
||||
if(riid == __uuidof(IDXGISwapChain))
|
||||
{
|
||||
@@ -258,12 +267,12 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGISwapChain3::QueryInterface(REFIID riid, vo
|
||||
return RefCountDXGIObject::QueryInterface(riid, ppvObject);
|
||||
}
|
||||
|
||||
void WrappedIDXGISwapChain3::ReleaseBuffersForResize()
|
||||
void WrappedIDXGISwapChain4::ReleaseBuffersForResize()
|
||||
{
|
||||
m_pDevice->ReleaseSwapchainResources(this);
|
||||
}
|
||||
|
||||
void WrappedIDXGISwapChain3::WrapBuffersAfterResize()
|
||||
void WrappedIDXGISwapChain4::WrapBuffersAfterResize()
|
||||
{
|
||||
DXGI_SWAP_CHAIN_DESC desc;
|
||||
m_pReal->GetDesc(&desc);
|
||||
@@ -287,7 +296,7 @@ void WrappedIDXGISwapChain3::WrapBuffersAfterResize()
|
||||
}
|
||||
}
|
||||
|
||||
HRESULT WrappedIDXGISwapChain3::ResizeBuffers(
|
||||
HRESULT WrappedIDXGISwapChain4::ResizeBuffers(
|
||||
/* [in] */ UINT BufferCount,
|
||||
/* [in] */ UINT Width,
|
||||
/* [in] */ UINT Height,
|
||||
@@ -303,7 +312,7 @@ HRESULT WrappedIDXGISwapChain3::ResizeBuffers(
|
||||
return ret;
|
||||
}
|
||||
|
||||
HRESULT WrappedIDXGISwapChain3::ResizeBuffers1(_In_ UINT BufferCount, _In_ UINT Width,
|
||||
HRESULT WrappedIDXGISwapChain4::ResizeBuffers1(_In_ UINT BufferCount, _In_ UINT Width,
|
||||
_In_ UINT Height, _In_ DXGI_FORMAT Format,
|
||||
_In_ UINT SwapChainFlags,
|
||||
_In_reads_(BufferCount) const UINT *pCreationNodeMask,
|
||||
@@ -320,7 +329,7 @@ HRESULT WrappedIDXGISwapChain3::ResizeBuffers1(_In_ UINT BufferCount, _In_ UINT
|
||||
return ret;
|
||||
}
|
||||
|
||||
HRESULT WrappedIDXGISwapChain3::SetFullscreenState(
|
||||
HRESULT WrappedIDXGISwapChain4::SetFullscreenState(
|
||||
/* [in] */ BOOL Fullscreen,
|
||||
/* [in] */ IDXGIOutput *pTarget)
|
||||
{
|
||||
@@ -330,14 +339,14 @@ HRESULT WrappedIDXGISwapChain3::SetFullscreenState(
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT WrappedIDXGISwapChain3::GetFullscreenState(
|
||||
HRESULT WrappedIDXGISwapChain4::GetFullscreenState(
|
||||
/* [out] */ BOOL *pFullscreen,
|
||||
/* [out] */ IDXGIOutput **ppTarget)
|
||||
{
|
||||
return m_pReal->GetFullscreenState(pFullscreen, ppTarget);
|
||||
}
|
||||
|
||||
HRESULT WrappedIDXGISwapChain3::GetBuffer(
|
||||
HRESULT WrappedIDXGISwapChain4::GetBuffer(
|
||||
/* [in] */ UINT Buffer,
|
||||
/* [in] */ REFIID riid,
|
||||
/* [out][in] */ void **ppSurface)
|
||||
@@ -394,7 +403,7 @@ HRESULT WrappedIDXGISwapChain3::GetBuffer(
|
||||
return ret;
|
||||
}
|
||||
|
||||
HRESULT WrappedIDXGISwapChain3::GetDevice(
|
||||
HRESULT WrappedIDXGISwapChain4::GetDevice(
|
||||
/* [in] */ REFIID riid,
|
||||
/* [retval][out] */ void **ppDevice)
|
||||
{
|
||||
@@ -426,7 +435,7 @@ HRESULT WrappedIDXGISwapChain3::GetDevice(
|
||||
return ret;
|
||||
}
|
||||
|
||||
HRESULT WrappedIDXGISwapChain3::Present(
|
||||
HRESULT WrappedIDXGISwapChain4::Present(
|
||||
/* [in] */ UINT SyncInterval,
|
||||
/* [in] */ UINT Flags)
|
||||
{
|
||||
@@ -440,7 +449,7 @@ HRESULT WrappedIDXGISwapChain3::Present(
|
||||
return m_pReal->Present(SyncInterval, Flags);
|
||||
}
|
||||
|
||||
HRESULT WrappedIDXGISwapChain3::Present1(UINT SyncInterval, UINT Flags,
|
||||
HRESULT WrappedIDXGISwapChain4::Present1(UINT SyncInterval, UINT Flags,
|
||||
const DXGI_PRESENT_PARAMETERS *pPresentParameters)
|
||||
{
|
||||
if(!RenderDoc::Inst().GetCaptureOptions().AllowVSync)
|
||||
@@ -528,7 +537,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGIAdapter3::QueryInterface(REFIID riid, void
|
||||
return RefCountDXGIObject::QueryInterface(riid, ppvObject);
|
||||
}
|
||||
|
||||
WrappedIDXGIDevice3::WrappedIDXGIDevice3(IDXGIDevice *real, ID3DDevice *d3d)
|
||||
WrappedIDXGIDevice4::WrappedIDXGIDevice4(IDXGIDevice *real, ID3DDevice *d3d)
|
||||
: RefCountDXGIObject(real), m_pReal(real), m_pD3DDevice(d3d)
|
||||
{
|
||||
m_pD3DDevice->AddRef();
|
||||
@@ -539,18 +548,21 @@ WrappedIDXGIDevice3::WrappedIDXGIDevice3(IDXGIDevice *real, ID3DDevice *d3d)
|
||||
real->QueryInterface(__uuidof(IDXGIDevice2), (void **)&m_pReal2);
|
||||
m_pReal3 = NULL;
|
||||
real->QueryInterface(__uuidof(IDXGIDevice3), (void **)&m_pReal3);
|
||||
m_pReal4 = NULL;
|
||||
real->QueryInterface(__uuidof(IDXGIDevice4), (void **)&m_pReal4);
|
||||
}
|
||||
|
||||
WrappedIDXGIDevice3::~WrappedIDXGIDevice3()
|
||||
WrappedIDXGIDevice4::~WrappedIDXGIDevice4()
|
||||
{
|
||||
SAFE_RELEASE(m_pReal1);
|
||||
SAFE_RELEASE(m_pReal2);
|
||||
SAFE_RELEASE(m_pReal3);
|
||||
SAFE_RELEASE(m_pReal4);
|
||||
SAFE_RELEASE(m_pReal);
|
||||
SAFE_RELEASE(m_pD3DDevice);
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE WrappedIDXGIDevice3::QueryInterface(REFIID riid, void **ppvObject)
|
||||
HRESULT STDMETHODCALLTYPE WrappedIDXGIDevice4::QueryInterface(REFIID riid, void **ppvObject)
|
||||
{
|
||||
if(m_pD3DDevice->IsDeviceUUID(riid))
|
||||
{
|
||||
@@ -603,6 +615,19 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGIDevice3::QueryInterface(REFIID riid, void
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
}
|
||||
else if(riid == __uuidof(IDXGIDevice4))
|
||||
{
|
||||
if(m_pReal4)
|
||||
{
|
||||
AddRef();
|
||||
*ppvObject = (IDXGIDevice4 *)this;
|
||||
return S_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
string guid = ToStr::Get(riid);
|
||||
@@ -612,7 +637,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGIDevice3::QueryInterface(REFIID riid, void
|
||||
return RefCountDXGIObject::QueryInterface(riid, ppvObject);
|
||||
}
|
||||
|
||||
WrappedIDXGIFactory4::WrappedIDXGIFactory4(IDXGIFactory *real)
|
||||
WrappedIDXGIFactory5::WrappedIDXGIFactory5(IDXGIFactory *real)
|
||||
: RefCountDXGIObject(real), m_pReal(real), m_iRefcount(1)
|
||||
{
|
||||
m_pReal1 = NULL;
|
||||
@@ -623,18 +648,21 @@ WrappedIDXGIFactory4::WrappedIDXGIFactory4(IDXGIFactory *real)
|
||||
real->QueryInterface(__uuidof(IDXGIFactory3), (void **)&m_pReal3);
|
||||
m_pReal4 = NULL;
|
||||
real->QueryInterface(__uuidof(IDXGIFactory4), (void **)&m_pReal4);
|
||||
m_pReal5 = NULL;
|
||||
real->QueryInterface(__uuidof(IDXGIFactory5), (void **)&m_pReal5);
|
||||
}
|
||||
|
||||
WrappedIDXGIFactory4::~WrappedIDXGIFactory4()
|
||||
WrappedIDXGIFactory5::~WrappedIDXGIFactory5()
|
||||
{
|
||||
SAFE_RELEASE(m_pReal1);
|
||||
SAFE_RELEASE(m_pReal2);
|
||||
SAFE_RELEASE(m_pReal3);
|
||||
SAFE_RELEASE(m_pReal4);
|
||||
SAFE_RELEASE(m_pReal5);
|
||||
SAFE_RELEASE(m_pReal);
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE WrappedIDXGIFactory4::QueryInterface(REFIID riid, void **ppvObject)
|
||||
HRESULT STDMETHODCALLTYPE WrappedIDXGIFactory5::QueryInterface(REFIID riid, void **ppvObject)
|
||||
{
|
||||
if(riid == __uuidof(IDXGIFactory))
|
||||
{
|
||||
@@ -694,6 +722,19 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGIFactory4::QueryInterface(REFIID riid, void
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
}
|
||||
else if(riid == __uuidof(IDXGIFactory5))
|
||||
{
|
||||
if(m_pReal5)
|
||||
{
|
||||
AddRef();
|
||||
*ppvObject = (IDXGIFactory5 *)this;
|
||||
return S_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
string guid = ToStr::Get(riid);
|
||||
@@ -703,7 +744,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGIFactory4::QueryInterface(REFIID riid, void
|
||||
return RefCountDXGIObject::QueryInterface(riid, ppvObject);
|
||||
}
|
||||
|
||||
HRESULT WrappedIDXGIFactory4::CreateSwapChain(IUnknown *pDevice, DXGI_SWAP_CHAIN_DESC *pDesc,
|
||||
HRESULT WrappedIDXGIFactory5::CreateSwapChain(IUnknown *pDevice, DXGI_SWAP_CHAIN_DESC *pDesc,
|
||||
IDXGISwapChain **ppSwapChain)
|
||||
{
|
||||
ID3DDevice *wrapDevice = GetD3DDevice(pDevice);
|
||||
@@ -720,7 +761,7 @@ HRESULT WrappedIDXGIFactory4::CreateSwapChain(IUnknown *pDevice, DXGI_SWAP_CHAIN
|
||||
if(SUCCEEDED(ret))
|
||||
{
|
||||
*ppSwapChain =
|
||||
new WrappedIDXGISwapChain3(*ppSwapChain, pDesc ? pDesc->OutputWindow : NULL, wrapDevice);
|
||||
new WrappedIDXGISwapChain4(*ppSwapChain, pDesc ? pDesc->OutputWindow : NULL, wrapDevice);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -731,7 +772,7 @@ HRESULT WrappedIDXGIFactory4::CreateSwapChain(IUnknown *pDevice, DXGI_SWAP_CHAIN
|
||||
return m_pReal->CreateSwapChain(pDevice, pDesc, ppSwapChain);
|
||||
}
|
||||
|
||||
HRESULT WrappedIDXGIFactory4::CreateSwapChainForHwnd(
|
||||
HRESULT WrappedIDXGIFactory5::CreateSwapChainForHwnd(
|
||||
IUnknown *pDevice, HWND hWnd, const DXGI_SWAP_CHAIN_DESC1 *pDesc,
|
||||
const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pFullscreenDesc, IDXGIOutput *pRestrictToOutput,
|
||||
IDXGISwapChain1 **ppSwapChain)
|
||||
@@ -750,7 +791,7 @@ HRESULT WrappedIDXGIFactory4::CreateSwapChainForHwnd(
|
||||
|
||||
if(SUCCEEDED(ret))
|
||||
{
|
||||
*ppSwapChain = new WrappedIDXGISwapChain3(*ppSwapChain, hWnd, wrapDevice);
|
||||
*ppSwapChain = new WrappedIDXGISwapChain4(*ppSwapChain, hWnd, wrapDevice);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -764,7 +805,7 @@ HRESULT WrappedIDXGIFactory4::CreateSwapChainForHwnd(
|
||||
ppSwapChain);
|
||||
}
|
||||
|
||||
HRESULT WrappedIDXGIFactory4::CreateSwapChainForCoreWindow(IUnknown *pDevice, IUnknown *pWindow,
|
||||
HRESULT WrappedIDXGIFactory5::CreateSwapChainForCoreWindow(IUnknown *pDevice, IUnknown *pWindow,
|
||||
const DXGI_SWAP_CHAIN_DESC1 *pDesc,
|
||||
IDXGIOutput *pRestrictToOutput,
|
||||
IDXGISwapChain1 **ppSwapChain)
|
||||
@@ -785,7 +826,7 @@ HRESULT WrappedIDXGIFactory4::CreateSwapChainForCoreWindow(IUnknown *pDevice, IU
|
||||
{
|
||||
HWND wnd = NULL;
|
||||
(*ppSwapChain)->GetHwnd(&wnd);
|
||||
*ppSwapChain = new WrappedIDXGISwapChain3(*ppSwapChain, wnd, wrapDevice);
|
||||
*ppSwapChain = new WrappedIDXGISwapChain4(*ppSwapChain, wnd, wrapDevice);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -799,7 +840,7 @@ HRESULT WrappedIDXGIFactory4::CreateSwapChainForCoreWindow(IUnknown *pDevice, IU
|
||||
ppSwapChain);
|
||||
}
|
||||
|
||||
HRESULT WrappedIDXGIFactory4::CreateSwapChainForComposition(IUnknown *pDevice,
|
||||
HRESULT WrappedIDXGIFactory5::CreateSwapChainForComposition(IUnknown *pDevice,
|
||||
const DXGI_SWAP_CHAIN_DESC1 *pDesc,
|
||||
IDXGIOutput *pRestrictToOutput,
|
||||
IDXGISwapChain1 **ppSwapChain)
|
||||
@@ -820,7 +861,7 @@ HRESULT WrappedIDXGIFactory4::CreateSwapChainForComposition(IUnknown *pDevice,
|
||||
{
|
||||
HWND wnd = NULL;
|
||||
(*ppSwapChain)->GetHwnd(&wnd);
|
||||
*ppSwapChain = new WrappedIDXGISwapChain3(*ppSwapChain, wnd, wrapDevice);
|
||||
*ppSwapChain = new WrappedIDXGISwapChain4(*ppSwapChain, wnd, wrapDevice);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -151,7 +151,7 @@ public:
|
||||
return RefCountDXGIObject::GetParent(riid, ppvObject); \
|
||||
}
|
||||
|
||||
class WrappedIDXGISwapChain3;
|
||||
class WrappedIDXGISwapChain4;
|
||||
|
||||
struct ID3DDevice
|
||||
{
|
||||
@@ -167,14 +167,14 @@ struct ID3DDevice
|
||||
virtual bool IsDeviceUUID(REFIID guid) = 0;
|
||||
virtual IUnknown *GetDeviceInterface(REFIID guid) = 0;
|
||||
|
||||
virtual void FirstFrame(WrappedIDXGISwapChain3 *swapChain) = 0;
|
||||
virtual void FirstFrame(WrappedIDXGISwapChain4 *swapChain) = 0;
|
||||
|
||||
virtual void NewSwapchainBuffer(IUnknown *backbuffer) = 0;
|
||||
virtual void ReleaseSwapchainResources(WrappedIDXGISwapChain3 *swapChain) = 0;
|
||||
virtual IUnknown *WrapSwapchainBuffer(WrappedIDXGISwapChain3 *swap, DXGI_SWAP_CHAIN_DESC *swapDesc,
|
||||
virtual void ReleaseSwapchainResources(WrappedIDXGISwapChain4 *swapChain) = 0;
|
||||
virtual IUnknown *WrapSwapchainBuffer(WrappedIDXGISwapChain4 *swap, DXGI_SWAP_CHAIN_DESC *swapDesc,
|
||||
UINT buffer, IUnknown *realSurface) = 0;
|
||||
|
||||
virtual HRESULT Present(WrappedIDXGISwapChain3 *swapChain, UINT SyncInterval, UINT Flags) = 0;
|
||||
virtual HRESULT Present(WrappedIDXGISwapChain4 *swapChain, UINT SyncInterval, UINT Flags) = 0;
|
||||
};
|
||||
|
||||
typedef ID3DDevice *(*D3DDeviceCallback)(IUnknown *dev);
|
||||
@@ -538,12 +538,13 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class WrappedIDXGISwapChain3 : public IDXGISwapChain3, public RefCountDXGIObject
|
||||
class WrappedIDXGISwapChain4 : public IDXGISwapChain4, public RefCountDXGIObject
|
||||
{
|
||||
IDXGISwapChain *m_pReal;
|
||||
IDXGISwapChain1 *m_pReal1;
|
||||
IDXGISwapChain2 *m_pReal2;
|
||||
IDXGISwapChain3 *m_pReal3;
|
||||
IDXGISwapChain4 *m_pReal4;
|
||||
ID3DDevice *m_pDevice;
|
||||
unsigned int m_iRefcount;
|
||||
|
||||
@@ -559,8 +560,8 @@ class WrappedIDXGISwapChain3 : public IDXGISwapChain3, public RefCountDXGIObject
|
||||
void WrapBuffersAfterResize();
|
||||
|
||||
public:
|
||||
WrappedIDXGISwapChain3(IDXGISwapChain *real, HWND wnd, ID3DDevice *device);
|
||||
virtual ~WrappedIDXGISwapChain3();
|
||||
WrappedIDXGISwapChain4(IDXGISwapChain *real, HWND wnd, ID3DDevice *device);
|
||||
virtual ~WrappedIDXGISwapChain4();
|
||||
|
||||
static void RegisterD3DDeviceCallback(D3DDeviceCallback callback)
|
||||
{
|
||||
@@ -811,6 +812,20 @@ public:
|
||||
_In_reads_(BufferCount) const UINT *pCreationNodeMask,
|
||||
/* [annotation][in] */
|
||||
_In_reads_(BufferCount) IUnknown *const *ppPresentQueue);
|
||||
|
||||
//////////////////////////////
|
||||
// implement IDXGISwapChain4
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE SetHDRMetaData(
|
||||
/* [annotation][in] */
|
||||
_In_ DXGI_HDR_METADATA_TYPE Type,
|
||||
/* [annotation][in] */
|
||||
_In_ UINT Size,
|
||||
/* [annotation][size_is][in] */
|
||||
_In_reads_opt_(Size) void *pMetaData)
|
||||
{
|
||||
return m_pReal4->SetHDRMetaData(Type, Size, pMetaData);
|
||||
}
|
||||
};
|
||||
|
||||
class WrappedIDXGIAdapter3 : public IDXGIAdapter3, public RefCountDXGIObject
|
||||
@@ -932,20 +947,21 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class WrappedIDXGIDevice3 : public IDXGIDevice3, public RefCountDXGIObject
|
||||
class WrappedIDXGIDevice4 : public IDXGIDevice4, public RefCountDXGIObject
|
||||
{
|
||||
IDXGIDevice *m_pReal;
|
||||
IDXGIDevice1 *m_pReal1;
|
||||
IDXGIDevice2 *m_pReal2;
|
||||
IDXGIDevice3 *m_pReal3;
|
||||
IDXGIDevice4 *m_pReal4;
|
||||
ID3DDevice *m_pD3DDevice;
|
||||
|
||||
public:
|
||||
WrappedIDXGIDevice3(IDXGIDevice *real, ID3DDevice *d3d);
|
||||
virtual ~WrappedIDXGIDevice3();
|
||||
WrappedIDXGIDevice4(IDXGIDevice *real, ID3DDevice *d3d);
|
||||
virtual ~WrappedIDXGIDevice4();
|
||||
|
||||
static const int AllocPoolCount = 4;
|
||||
ALLOCATE_WITH_WRAPPED_POOL(WrappedIDXGIDevice3, AllocPoolCount);
|
||||
ALLOCATE_WITH_WRAPPED_POOL(WrappedIDXGIDevice4, AllocPoolCount);
|
||||
|
||||
IMPLEMENT_IDXGIOBJECT_WITH_REFCOUNTDXGIOBJECT_CUSTOMQUERY;
|
||||
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject);
|
||||
@@ -1052,20 +1068,47 @@ public:
|
||||
// implement IDXGIDevice3
|
||||
|
||||
virtual void STDMETHODCALLTYPE Trim() { m_pReal3->Trim(); }
|
||||
//////////////////////////////
|
||||
// implement IDXGIDevice4
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE OfferResources1(
|
||||
/* [annotation][in] */
|
||||
_In_ UINT NumResources,
|
||||
/* [annotation][size_is][in] */
|
||||
_In_reads_(NumResources) IDXGIResource *const *ppResources,
|
||||
/* [annotation][in] */
|
||||
_In_ DXGI_OFFER_RESOURCE_PRIORITY Priority,
|
||||
/* [annotation][in] */
|
||||
_In_ UINT Flags)
|
||||
{
|
||||
return m_pReal4->OfferResources1(NumResources, ppResources, Priority, Flags);
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE ReclaimResources1(
|
||||
/* [annotation][in] */
|
||||
_In_ UINT NumResources,
|
||||
/* [annotation][size_is][in] */
|
||||
_In_reads_(NumResources) IDXGIResource *const *ppResources,
|
||||
/* [annotation][size_is][out] */
|
||||
_Out_writes_all_(NumResources) DXGI_RECLAIM_RESOURCE_RESULTS *pResults)
|
||||
{
|
||||
return m_pReal4->ReclaimResources1(NumResources, ppResources, pResults);
|
||||
}
|
||||
};
|
||||
|
||||
class WrappedIDXGIFactory4 : public IDXGIFactory4, public RefCountDXGIObject
|
||||
class WrappedIDXGIFactory5 : public IDXGIFactory5, public RefCountDXGIObject
|
||||
{
|
||||
IDXGIFactory *m_pReal;
|
||||
IDXGIFactory1 *m_pReal1;
|
||||
IDXGIFactory2 *m_pReal2;
|
||||
IDXGIFactory3 *m_pReal3;
|
||||
IDXGIFactory4 *m_pReal4;
|
||||
IDXGIFactory5 *m_pReal5;
|
||||
unsigned int m_iRefcount;
|
||||
|
||||
public:
|
||||
WrappedIDXGIFactory4(IDXGIFactory *real);
|
||||
virtual ~WrappedIDXGIFactory4();
|
||||
WrappedIDXGIFactory5(IDXGIFactory *real);
|
||||
virtual ~WrappedIDXGIFactory5();
|
||||
|
||||
IMPLEMENT_IDXGIOBJECT_WITH_REFCOUNTDXGIOBJECT_CUSTOMQUERY;
|
||||
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject);
|
||||
@@ -1311,4 +1354,16 @@ public:
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// implement IDXGIFactory5
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE
|
||||
CheckFeatureSupport(DXGI_FEATURE Feature,
|
||||
/* [annotation] */
|
||||
_Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData,
|
||||
UINT FeatureSupportDataSize)
|
||||
{
|
||||
return m_pReal5->CheckFeatureSupport(Feature, pFeatureSupportData, FeatureSupportDataSize);
|
||||
}
|
||||
};
|
||||
Reference in new issue
Block a user