Add support for new D3D interfaces

* Nothing interesting/useful is supported here, we just add new interfaces that
  we recognise even though the user can't use them since we don't report support
  for the new features.
* This also makes it easier to track future changes when we're not behind.
This commit is contained in:
baldurk committed 2020-10-30 16:49:57 +00:00
1 parent 7c6dae32f9
commit 8548892939
34 files changed
+1547 -257

No files matched your search

+3 -1
View File
@@ -122,6 +122,7 @@ WrappedID3D11DeviceContext::WrappedID3D11DeviceContext(WrappedID3D11Device *real
m_pRealContext->QueryInterface(__uuidof(ID3D11VideoContext), (void **)&m_WrappedVideo.m_pReal);
m_pRealContext->QueryInterface(__uuidof(ID3D11VideoContext1), (void **)&m_WrappedVideo.m_pReal1);
m_pRealContext->QueryInterface(__uuidof(ID3D11VideoContext2), (void **)&m_WrappedVideo.m_pReal2);
m_pRealContext->QueryInterface(__uuidof(ID3D11VideoContext3), (void **)&m_WrappedVideo.m_pReal3);
}
m_UserAnnotation.SetContext(this);
@@ -224,6 +225,7 @@ WrappedID3D11DeviceContext::~WrappedID3D11DeviceContext()
SAFE_RELEASE(m_WrappedVideo.m_pReal);
SAFE_RELEASE(m_WrappedVideo.m_pReal1);
SAFE_RELEASE(m_WrappedVideo.m_pReal2);
SAFE_RELEASE(m_WrappedVideo.m_pReal3);
SAFE_RELEASE(m_pRealContext1);
SAFE_RELEASE(m_pRealContext2);
@@ -1520,7 +1522,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11DeviceContext::QueryInterface(REFIID riid
return m_pDevice->QueryInterface(riid, ppvObject);
}
else if(riid == __uuidof(ID3D11VideoContext) || riid == __uuidof(ID3D11VideoContext1) ||
riid == __uuidof(ID3D11VideoContext2))
riid == __uuidof(ID3D11VideoContext2) || riid == __uuidof(ID3D11VideoContext3))
{
return m_WrappedVideo.QueryInterface(riid, ppvObject);
}
+1 -1
View File
@@ -146,7 +146,7 @@ private:
ID3D11DeviceContext3 *m_pRealContext3;
ID3D11DeviceContext4 *m_pRealContext4;
WrappedID3D11VideoContext2 m_WrappedVideo;
WrappedID3D11VideoContext m_WrappedVideo;
D3D11_DEVICE_CONTEXT_TYPE m_Type;
bool m_NeedUpdateSubWorkaround;
+121 -80
View File
@@ -418,17 +418,17 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoDevice2::NegotiateCryptoSessionKeyEx
VIDEO_UNWRAP(WrappedID3D11CryptoSession, pCryptoSession), flags, DataSize, pData);
}
ULONG STDMETHODCALLTYPE WrappedID3D11VideoContext2::AddRef()
ULONG STDMETHODCALLTYPE WrappedID3D11VideoContext::AddRef()
{
return m_pContext->AddRef();
}
ULONG STDMETHODCALLTYPE WrappedID3D11VideoContext2::Release()
ULONG STDMETHODCALLTYPE WrappedID3D11VideoContext::Release()
{
return m_pContext->Release();
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::QueryInterface(REFIID riid, void **ppvObject)
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::QueryInterface(REFIID riid, void **ppvObject)
{
if(riid == __uuidof(IUnknown))
{
@@ -470,16 +470,30 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::QueryInterface(REFIID riid
return E_NOINTERFACE;
}
}
else if(riid == __uuidof(ID3D11VideoContext3))
{
if(m_pReal3)
{
*ppvObject = (ID3D11VideoContext3 *)this;
AddRef();
return S_OK;
}
else
{
*ppvObject = NULL;
return E_NOINTERFACE;
}
}
return m_pContext->QueryInterface(riid, ppvObject);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::GetDevice(ID3D11Device **ppDevice)
void STDMETHODCALLTYPE WrappedID3D11VideoContext::GetDevice(ID3D11Device **ppDevice)
{
m_pContext->GetDevice(ppDevice);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::GetDecoderBuffer(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::GetDecoderBuffer(
/* [annotation] */ _In_ ID3D11VideoDecoder *pDecoder, D3D11_VIDEO_DECODER_BUFFER_TYPE Type,
/* [annotation] */ _Out_ UINT *pBufferSize,
/* [annotation] */ _Outptr_result_bytebuffer_(*pBufferSize) void **ppBuffer)
@@ -488,14 +502,14 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::GetDecoderBuffer(
pBufferSize, ppBuffer);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::ReleaseDecoderBuffer(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::ReleaseDecoderBuffer(
/* [annotation] */ _In_ ID3D11VideoDecoder *pDecoder,
/* [annotation] */ _In_ D3D11_VIDEO_DECODER_BUFFER_TYPE Type)
{
return m_pReal->ReleaseDecoderBuffer(VIDEO_UNWRAP(WrappedID3D11VideoDecoder, pDecoder), Type);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::DecoderBeginFrame(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::DecoderBeginFrame(
/* [annotation] */ _In_ ID3D11VideoDecoder *pDecoder,
/* [annotation] */ _In_ ID3D11VideoDecoderOutputView *pView, UINT ContentKeySize,
/* [annotation] */ _In_reads_bytes_opt_(ContentKeySize) const void *pContentKey)
@@ -506,12 +520,12 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::DecoderBeginFrame(
}
HRESULT STDMETHODCALLTYPE
WrappedID3D11VideoContext2::DecoderEndFrame(/* [annotation] */ _In_ ID3D11VideoDecoder *pDecoder)
WrappedID3D11VideoContext::DecoderEndFrame(/* [annotation] */ _In_ ID3D11VideoDecoder *pDecoder)
{
return m_pReal->DecoderEndFrame(VIDEO_UNWRAP(WrappedID3D11VideoDecoder, pDecoder));
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::SubmitDecoderBuffers(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::SubmitDecoderBuffers(
/* [annotation] */ _In_ ID3D11VideoDecoder *pDecoder, /* [annotation] */ _In_ UINT NumBuffers,
/* [annotation] */ _In_reads_(NumBuffers) const D3D11_VIDEO_DECODER_BUFFER_DESC *pBufferDesc)
{
@@ -519,7 +533,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::SubmitDecoderBuffers(
NumBuffers, pBufferDesc);
}
APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::DecoderExtension(
APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::DecoderExtension(
/* [annotation] */ _In_ ID3D11VideoDecoder *pDecoder,
/* [annotation] */ _In_ const D3D11_VIDEO_DECODER_EXTENSION *pExtensionData)
{
@@ -540,7 +554,7 @@ APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::DecoderExte
return m_pReal->DecoderExtension(VIDEO_UNWRAP(WrappedID3D11VideoDecoder, pDecoder), &unwrappedExt);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputTargetRect(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetOutputTargetRect(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ BOOL Enable, /* [annotation] */ _In_opt_ const RECT *pRect)
{
@@ -548,7 +562,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputTarget
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), Enable, pRect);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputBackgroundColor(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetOutputBackgroundColor(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ BOOL YCbCr, /* [annotation] */ _In_ const D3D11_VIDEO_COLOR *pColor)
{
@@ -556,7 +570,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputBackgr
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), YCbCr, pColor);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputColorSpace(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetOutputColorSpace(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *pColorSpace)
{
@@ -564,7 +578,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputColorS
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), pColorSpace);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputAlphaFillMode(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE AlphaFillMode,
/* [annotation] */ _In_ UINT StreamIndex)
@@ -573,7 +587,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputAlphaF
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), AlphaFillMode, StreamIndex);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputConstriction(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetOutputConstriction(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ BOOL Enable, /* [annotation] */ _In_ SIZE Size)
{
@@ -581,14 +595,14 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputConstr
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), Enable, Size);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputStereoMode(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetOutputStereoMode(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor, /* [annotation] */ _In_ BOOL Enable)
{
return m_pReal->VideoProcessorSetOutputStereoMode(
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), Enable);
}
APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputExtension(
APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetOutputExtension(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ const GUID *pExtensionGuid, /* [annotation] */ _In_ UINT DataSize,
/* [annotation] */ _In_ void *pData)
@@ -597,7 +611,7 @@ APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProces
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), pExtensionGuid, DataSize, pData);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputTargetRect(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetOutputTargetRect(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _Out_ BOOL *Enabled, /* [annotation] */ _Out_ RECT *pRect)
{
@@ -605,7 +619,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputTarget
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), Enabled, pRect);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputBackgroundColor(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetOutputBackgroundColor(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _Out_ BOOL *pYCbCr, /* [annotation] */ _Out_ D3D11_VIDEO_COLOR *pColor)
{
@@ -613,7 +627,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputBackgr
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), pYCbCr, pColor);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputColorSpace(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetOutputColorSpace(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _Out_ D3D11_VIDEO_PROCESSOR_COLOR_SPACE *pColorSpace)
{
@@ -621,7 +635,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputColorS
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), pColorSpace);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputAlphaFillMode(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetOutputAlphaFillMode(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _Out_ D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE *pAlphaFillMode,
/* [annotation] */ _Out_ UINT *pStreamIndex)
@@ -630,7 +644,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputAlphaF
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), pAlphaFillMode, pStreamIndex);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputConstriction(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetOutputConstriction(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _Out_ BOOL *pEnabled, /* [annotation] */ _Out_ SIZE *pSize)
{
@@ -638,7 +652,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputConstr
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), pEnabled, pSize);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputStereoMode(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetOutputStereoMode(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _Out_ BOOL *pEnabled)
{
@@ -646,7 +660,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputStereo
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), pEnabled);
}
APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputExtension(
APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetOutputExtension(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ const GUID *pExtensionGuid, /* [annotation] */ _In_ UINT DataSize,
/* [annotation] */ _Out_writes_bytes_(DataSize) void *pData)
@@ -655,7 +669,7 @@ APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProces
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), pExtensionGuid, DataSize, pData);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamFrameFormat(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamFrameFormat(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex,
/* [annotation] */ _In_ D3D11_VIDEO_FRAME_FORMAT FrameFormat)
@@ -664,7 +678,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamFrameF
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, FrameFormat);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamColorSpace(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamColorSpace(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex,
/* [annotation] */ _In_ const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *pColorSpace)
@@ -673,7 +687,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamColorS
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, pColorSpace);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamOutputRate(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamOutputRate(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex,
/* [annotation] */ _In_ D3D11_VIDEO_PROCESSOR_OUTPUT_RATE OutputRate,
@@ -685,7 +699,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamOutput
RepeatFrame, pCustomRate);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamSourceRect(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamSourceRect(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _In_ BOOL Enable,
/* [annotation] */ _In_opt_ const RECT *pRect)
@@ -694,7 +708,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamSource
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, Enable, pRect);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamDestRect(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamDestRect(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _In_ BOOL Enable,
/* [annotation] */ _In_opt_ const RECT *pRect)
@@ -703,7 +717,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamDestRe
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, Enable, pRect);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamAlpha(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamAlpha(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _In_ BOOL Enable,
/* [annotation] */ _In_ FLOAT Alpha)
@@ -712,7 +726,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamAlpha(
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, Enable, Alpha);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamPalette(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamPalette(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _In_ UINT Count,
/* [annotation] */ _In_reads_opt_(Count) const UINT *pEntries)
@@ -721,7 +735,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamPalett
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, Count, pEntries);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamPixelAspectRatio(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamPixelAspectRatio(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _In_ BOOL Enable,
/* [annotation] */ _In_opt_ const DXGI_RATIONAL *pSourceAspectRatio,
@@ -732,7 +746,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamPixelA
pSourceAspectRatio, pDestinationAspectRatio);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamLumaKey(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamLumaKey(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _In_ BOOL Enable,
/* [annotation] */ _In_ FLOAT Lower, /* [annotation] */ _In_ FLOAT Upper)
@@ -741,7 +755,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamLumaKe
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, Enable, Lower, Upper);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamStereoFormat(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamStereoFormat(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _In_ BOOL Enable,
/* [annotation] */ _In_ D3D11_VIDEO_PROCESSOR_STEREO_FORMAT Format,
@@ -754,7 +768,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamStereo
LeftViewFrame0, BaseViewFrame0, FlipMode, MonoOffset);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamAutoProcessingMode(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamAutoProcessingMode(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _In_ BOOL Enable)
{
@@ -762,7 +776,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamAutoPr
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, Enable);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamFilter(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamFilter(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex,
/* [annotation] */ _In_ D3D11_VIDEO_PROCESSOR_FILTER Filter,
@@ -772,7 +786,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamFilter
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, Filter, Enable, Level);
}
APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamExtension(
APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamExtension(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _In_ const GUID *pExtensionGuid,
/* [annotation] */ _In_ UINT DataSize, /* [annotation] */ _In_ void *pData)
@@ -782,7 +796,7 @@ APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProces
DataSize, pData);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamFrameFormat(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamFrameFormat(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex,
/* [annotation] */ _Out_ D3D11_VIDEO_FRAME_FORMAT *pFrameFormat)
@@ -791,7 +805,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamFrameF
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, pFrameFormat);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamColorSpace(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamColorSpace(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex,
/* [annotation] */ _Out_ D3D11_VIDEO_PROCESSOR_COLOR_SPACE *pColorSpace)
@@ -800,7 +814,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamColorS
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, pColorSpace);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamOutputRate(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamOutputRate(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex,
/* [annotation] */ _Out_ D3D11_VIDEO_PROCESSOR_OUTPUT_RATE *pOutputRate,
@@ -811,7 +825,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamOutput
pRepeatFrame, pCustomRate);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamSourceRect(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamSourceRect(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _Out_ BOOL *pEnabled,
/* [annotation] */ _Out_ RECT *pRect)
@@ -820,7 +834,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamSource
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, pEnabled, pRect);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamDestRect(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamDestRect(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _Out_ BOOL *pEnabled,
/* [annotation] */ _Out_ RECT *pRect)
@@ -829,7 +843,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamDestRe
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, pEnabled, pRect);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamAlpha(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamAlpha(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _Out_ BOOL *pEnabled,
/* [annotation] */ _Out_ FLOAT *pAlpha)
@@ -838,7 +852,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamAlpha(
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, pEnabled, pAlpha);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamPalette(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamPalette(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _In_ UINT Count,
/* [annotation] */ _Out_writes_(Count) UINT *pEntries)
@@ -847,7 +861,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamPalett
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, Count, pEntries);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamPixelAspectRatio(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamPixelAspectRatio(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _Out_ BOOL *pEnabled,
/* [annotation] */ _Out_ DXGI_RATIONAL *pSourceAspectRatio,
@@ -858,7 +872,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamPixelA
pSourceAspectRatio, pDestinationAspectRatio);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamLumaKey(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamLumaKey(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _Out_ BOOL *pEnabled,
/* [annotation] */ _Out_ FLOAT *pLower, /* [annotation] */ _Out_ FLOAT *pUpper)
@@ -868,7 +882,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamLumaKe
pUpper);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamStereoFormat(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamStereoFormat(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _Out_ BOOL *pEnable,
/* [annotation] */ _Out_ D3D11_VIDEO_PROCESSOR_STEREO_FORMAT *pFormat,
@@ -881,7 +895,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamStereo
pLeftViewFrame0, pBaseViewFrame0, pFlipMode, MonoOffset);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamAutoProcessingMode(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamAutoProcessingMode(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _Out_ BOOL *pEnabled)
{
@@ -889,7 +903,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamAutoPr
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, pEnabled);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamFilter(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamFilter(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex,
/* [annotation] */ _In_ D3D11_VIDEO_PROCESSOR_FILTER Filter,
@@ -900,7 +914,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamFilter
pLevel);
}
APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamExtension(
APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamExtension(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _In_ const GUID *pExtensionGuid,
/* [annotation] */ _In_ UINT DataSize,
@@ -911,7 +925,7 @@ APP_DEPRECATED_HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProces
DataSize, pData);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorBlt(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorBlt(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ ID3D11VideoProcessorOutputView *pView,
/* [annotation] */ _In_ UINT OutputFrame, /* [annotation] */ _In_ UINT StreamCount,
@@ -992,7 +1006,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorBlt(
OutputFrame, StreamCount, unwrappedStreams.data());
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::NegotiateCryptoSessionKeyExchange(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::NegotiateCryptoSessionKeyExchange(
/* [annotation] */ _In_ ID3D11CryptoSession *pCryptoSession,
/* [annotation] */ _In_ UINT DataSize,
/* [annotation] */ _Inout_updates_bytes_(DataSize) void *pData)
@@ -1001,7 +1015,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::NegotiateCryptoSessionKeyE
VIDEO_UNWRAP(WrappedID3D11CryptoSession, pCryptoSession), DataSize, pData);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::EncryptionBlt(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::EncryptionBlt(
/* [annotation] */ _In_ ID3D11CryptoSession *pCryptoSession,
/* [annotation] */ _In_ ID3D11Texture2D *pSrcSurface,
/* [annotation] */ _In_ ID3D11Texture2D *pDstSurface, /* [annotation] */ _In_ UINT IVSize,
@@ -1012,7 +1026,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::EncryptionBlt(
UNWRAP(WrappedID3D11Texture2D1, pDstSurface), IVSize, pIV);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::DecryptionBlt(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::DecryptionBlt(
/* [annotation] */ _In_ ID3D11CryptoSession *pCryptoSession,
/* [annotation] */ _In_ ID3D11Texture2D *pSrcSurface,
/* [annotation] */ _In_ ID3D11Texture2D *pDstSurface,
@@ -1027,7 +1041,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::DecryptionBlt(
ContentKeySize, pContentKey, IVSize, pIV);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::StartSessionKeyRefresh(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::StartSessionKeyRefresh(
/* [annotation] */ _In_ ID3D11CryptoSession *pCryptoSession,
/* [annotation] */ _In_ UINT RandomNumberSize,
/* [annotation] */ _Out_writes_bytes_(RandomNumberSize) void *pRandomNumber)
@@ -1036,13 +1050,13 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::StartSessionKeyRefresh(
RandomNumberSize, pRandomNumber);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::FinishSessionKeyRefresh(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::FinishSessionKeyRefresh(
/* [annotation] */ _In_ ID3D11CryptoSession *pCryptoSession)
{
return m_pReal->FinishSessionKeyRefresh(VIDEO_UNWRAP(WrappedID3D11CryptoSession, pCryptoSession));
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::GetEncryptionBltKey(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::GetEncryptionBltKey(
/* [annotation] */ _In_ ID3D11CryptoSession *pCryptoSession, /* [annotation] */ _In_ UINT KeySize,
/* [annotation] */ _Out_writes_bytes_(KeySize) void *pReadbackKey)
{
@@ -1050,7 +1064,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::GetEncryptionBltKey(
KeySize, pReadbackKey);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::NegotiateAuthenticatedChannelKeyExchange(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::NegotiateAuthenticatedChannelKeyExchange(
/* [annotation] */ _In_ ID3D11AuthenticatedChannel *pChannel,
/* [annotation] */ _In_ UINT DataSize,
/* [annotation] */ _Inout_updates_bytes_(DataSize) void *pData)
@@ -1059,7 +1073,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::NegotiateAuthenticatedChan
VIDEO_UNWRAP(WrappedID3D11AuthenticatedChannel, pChannel), DataSize, pData);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::QueryAuthenticatedChannel(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::QueryAuthenticatedChannel(
/* [annotation] */ _In_ ID3D11AuthenticatedChannel *pChannel,
/* [annotation] */ _In_ UINT InputSize,
/* [annotation] */ _In_reads_bytes_(InputSize) const void *pInput,
@@ -1070,7 +1084,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::QueryAuthenticatedChannel(
InputSize, pInput, OutputSize, pOutput);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::ConfigureAuthenticatedChannel(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::ConfigureAuthenticatedChannel(
/* [annotation] */ _In_ ID3D11AuthenticatedChannel *pChannel,
/* [annotation] */ _In_ UINT InputSize,
/* [annotation] */ _In_reads_bytes_(InputSize) const void *pInput,
@@ -1080,7 +1094,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::ConfigureAuthenticatedChan
VIDEO_UNWRAP(WrappedID3D11AuthenticatedChannel, pChannel), InputSize, pInput, pOutput);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamRotation(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamRotation(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _In_ BOOL Enable,
/* [annotation] */ _In_ D3D11_VIDEO_PROCESSOR_ROTATION Rotation)
@@ -1089,7 +1103,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamRotati
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, Enable, Rotation);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamRotation(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamRotation(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _Out_ BOOL *pEnable,
/* [annotation] */ _Out_ D3D11_VIDEO_PROCESSOR_ROTATION *pRotation)
@@ -1098,7 +1112,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamRotati
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, pEnable, pRotation);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::SubmitDecoderBuffers1(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::SubmitDecoderBuffers1(
/* [annotation] */ _In_ ID3D11VideoDecoder *pDecoder, /* [annotation] */ _In_ UINT NumBuffers,
/* [annotation] */ _In_reads_(NumBuffers) const D3D11_VIDEO_DECODER_BUFFER_DESC1 *pBufferDesc)
{
@@ -1108,7 +1122,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::SubmitDecoderBuffers1(
NumBuffers, pBufferDesc);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::GetDataForNewHardwareKey(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::GetDataForNewHardwareKey(
/* [annotation] */ _In_ ID3D11CryptoSession *pCryptoSession,
/* [annotation] */ _In_ UINT PrivateInputSize,
/* [annotation] */ _In_reads_(PrivateInputSize) const void *pPrivatInputData,
@@ -1120,7 +1134,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::GetDataForNewHardwareKey(
PrivateInputSize, pPrivatInputData, pPrivateOutputData);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::CheckCryptoSessionStatus(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::CheckCryptoSessionStatus(
/* [annotation] */ _In_ ID3D11CryptoSession *pCryptoSession,
/* [annotation] */ _Out_ D3D11_CRYPTO_SESSION_STATUS *pStatus)
{
@@ -1130,7 +1144,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::CheckCryptoSessionStatus(
VIDEO_UNWRAP(WrappedID3D11CryptoSession, pCryptoSession), pStatus);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::DecoderEnableDownsampling(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::DecoderEnableDownsampling(
/* [annotation] */ _In_ ID3D11VideoDecoder *pDecoder,
/* [annotation] */ _In_ DXGI_COLOR_SPACE_TYPE InputColorSpace,
/* [annotation] */ _In_ const D3D11_VIDEO_SAMPLE_DESC *pOutputDesc,
@@ -1142,7 +1156,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::DecoderEnableDownsampling(
InputColorSpace, pOutputDesc, ReferenceFrameCount);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::DecoderUpdateDownsampling(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::DecoderUpdateDownsampling(
/* [annotation] */ _In_ ID3D11VideoDecoder *pDecoder,
/* [annotation] */ _In_ const D3D11_VIDEO_SAMPLE_DESC *pOutputDesc)
{
@@ -1152,7 +1166,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::DecoderUpdateDownsampling(
pOutputDesc);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputColorSpace1(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetOutputColorSpace1(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ DXGI_COLOR_SPACE_TYPE ColorSpace)
{
@@ -1162,7 +1176,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputColorS
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), ColorSpace);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputShaderUsage(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetOutputShaderUsage(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ BOOL ShaderUsage)
{
@@ -1172,7 +1186,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputShader
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), ShaderUsage);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputColorSpace1(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetOutputColorSpace1(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _Out_ DXGI_COLOR_SPACE_TYPE *pColorSpace)
{
@@ -1182,7 +1196,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputColorS
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), pColorSpace);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputShaderUsage(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetOutputShaderUsage(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _Out_ BOOL *pShaderUsage)
{
@@ -1192,7 +1206,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputShader
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), pShaderUsage);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamColorSpace1(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamColorSpace1(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex,
/* [annotation] */ _In_ DXGI_COLOR_SPACE_TYPE ColorSpace)
@@ -1203,7 +1217,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamColorS
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, ColorSpace);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamMirror(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamMirror(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _In_ BOOL Enable,
/* [annotation] */ _In_ BOOL FlipHorizontal, /* [annotation] */ _In_ BOOL FlipVertical)
@@ -1215,7 +1229,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamMirror
FlipHorizontal, FlipVertical);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamColorSpace1(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamColorSpace1(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex,
/* [annotation] */ _Out_ DXGI_COLOR_SPACE_TYPE *pColorSpace)
@@ -1226,7 +1240,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamColorS
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), StreamIndex, pColorSpace);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamMirror(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamMirror(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _Out_ BOOL *pEnable,
/* [annotation] */ _Out_ BOOL *pFlipHorizontal, /* [annotation] */ _Out_ BOOL *pFlipVertical)
@@ -1238,7 +1252,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamMirror
pFlipHorizontal, pFlipVertical);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetBehaviorHints(
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetBehaviorHints(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT OutputWidth, /* [annotation] */ _In_ UINT OutputHeight,
/* [annotation] */ _In_ DXGI_FORMAT OutputFormat, /* [annotation] */ _In_ UINT StreamCount,
@@ -1253,7 +1267,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetBehaviorH
OutputFormat, StreamCount, pStreams, pBehaviorHints);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputHDRMetaData(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetOutputHDRMetaData(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ DXGI_HDR_METADATA_TYPE Type, /* [annotation] */ _In_ UINT Size,
/* [annotation] */ _In_reads_bytes_opt_(Size) const void *pHDRMetaData)
@@ -1264,7 +1278,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetOutputHDRMet
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), Type, Size, pHDRMetaData);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputHDRMetaData(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetOutputHDRMetaData(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _Out_ DXGI_HDR_METADATA_TYPE *pType, /* [annotation] */ _In_ UINT Size,
/* [annotation] */ _Out_writes_bytes_opt_(Size) void *pMetaData)
@@ -1275,7 +1289,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetOutputHDRMet
VIDEO_UNWRAP(WrappedID3D11VideoProcessor, pVideoProcessor), pType, Size, pMetaData);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamHDRMetaData(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorSetStreamHDRMetaData(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex, /* [annotation] */ _In_ DXGI_HDR_METADATA_TYPE Type,
/* [annotation] */ _In_ UINT Size,
@@ -1288,7 +1302,7 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorSetStreamHDRMet
pHDRMetaData);
}
void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamHDRMetaData(
void STDMETHODCALLTYPE WrappedID3D11VideoContext::VideoProcessorGetStreamHDRMetaData(
/* [annotation] */ _In_ ID3D11VideoProcessor *pVideoProcessor,
/* [annotation] */ _In_ UINT StreamIndex,
/* [annotation] */ _Out_ DXGI_HDR_METADATA_TYPE *pType, /* [annotation] */ _In_ UINT Size,
@@ -1301,6 +1315,33 @@ void STDMETHODCALLTYPE WrappedID3D11VideoContext2::VideoProcessorGetStreamHDRMet
pMetaData);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::DecoderBeginFrame1(
/* [annotation] */ _In_ ID3D11VideoDecoder *pDecoder,
/* [annotation] */ _In_ ID3D11VideoDecoderOutputView *pView, UINT ContentKeySize,
/* [annotation] */ _In_reads_bytes_opt_(ContentKeySize) const void *pContentKey,
/* [annotation] */ _In_range_(0, D3D11_4_VIDEO_DECODER_MAX_HISTOGRAM_COMPONENTS)
UINT NumComponentHistograms,
/* [annotation] */ _In_reads_opt_(NumComponentHistograms) const UINT *pHistogramOffsets,
/* [annotation] */ _In_reads_opt_(NumComponentHistograms) ID3D11Buffer *const *ppHistogramBuffers)
{
if(!m_pReal3)
return E_NOINTERFACE;
return m_pReal3->DecoderBeginFrame1(VIDEO_UNWRAP(WrappedID3D11VideoDecoder, pDecoder),
VIDEO_UNWRAP(WrappedID3D11VideoDecoderOutputView, pView),
ContentKeySize, pContentKey, NumComponentHistograms,
pHistogramOffsets, ppHistogramBuffers);
}
HRESULT STDMETHODCALLTYPE WrappedID3D11VideoContext::SubmitDecoderBuffers2(
/* [annotation] */ _In_ ID3D11VideoDecoder *pDecoder, /* [annotation] */ _In_ UINT NumBuffers,
/* [annotation] */ _In_reads_(NumBuffers) const D3D11_VIDEO_DECODER_BUFFER_DESC2 *pBufferDesc)
{
if(!m_pReal3)
return E_NOINTERFACE;
return m_pReal3->SubmitDecoderBuffers2(VIDEO_UNWRAP(WrappedID3D11VideoDecoder, pDecoder),
NumBuffers, pBufferDesc);
}
void STDMETHODCALLTYPE WrappedID3D11VideoDecoderOutputView::GetResource(
/* [annotation] */ _Outptr_ ID3D11Resource **ppResource)
{
+26 -1
View File
@@ -257,12 +257,13 @@ struct WrappedID3D11VideoDevice2 : public ID3D11VideoDevice2
_Inout_updates_bytes_(DataSize) void *pData);
};
struct WrappedID3D11VideoContext2 : public ID3D11VideoContext2
struct WrappedID3D11VideoContext : public ID3D11VideoContext3
{
WrappedID3D11DeviceContext *m_pContext = NULL;
ID3D11VideoContext *m_pReal = NULL;
ID3D11VideoContext1 *m_pReal1 = NULL;
ID3D11VideoContext2 *m_pReal2 = NULL;
ID3D11VideoContext3 *m_pReal3 = NULL;
//////////////////////////////
// implement IUnknown
@@ -1028,6 +1029,30 @@ struct WrappedID3D11VideoContext2 : public ID3D11VideoContext2
_In_ UINT Size,
/* [annotation] */
_Out_writes_bytes_opt_(Size) void *pMetaData);
//////////////////////////////
// implement ID3D11VideoContext3
virtual HRESULT STDMETHODCALLTYPE DecoderBeginFrame1(
/* [annotation] */
_In_ ID3D11VideoDecoder *pDecoder,
/* [annotation] */
_In_ ID3D11VideoDecoderOutputView *pView, UINT ContentKeySize,
/* [annotation] */
_In_reads_bytes_opt_(ContentKeySize) const void *pContentKey,
/* [annotation] */
_In_range_(0, D3D11_4_VIDEO_DECODER_MAX_HISTOGRAM_COMPONENTS) UINT NumComponentHistograms,
/* [annotation] */
_In_reads_opt_(NumComponentHistograms) const UINT *pHistogramOffsets,
/* [annotation] */
_In_reads_opt_(NumComponentHistograms) ID3D11Buffer *const *ppHistogramBuffers);
virtual HRESULT STDMETHODCALLTYPE SubmitDecoderBuffers2(
/* [annotation] */
_In_ ID3D11VideoDecoder *pDecoder,
/* [annotation] */
_In_ UINT NumBuffers,
/* [annotation] */
_In_reads_(NumBuffers) const D3D11_VIDEO_DECODER_BUFFER_DESC2 *pBufferDesc);
};
// we don't want to depend on d3d11_resources.h in this header, so replicate
@@ -132,6 +132,7 @@ private:
ID3D12GraphicsCommandList3 *m_pList3 = NULL;
ID3D12GraphicsCommandList4 *m_pList4 = NULL;
ID3D12GraphicsCommandList5 *m_pList5 = NULL;
ID3D12GraphicsCommandList6 *m_pList6 = NULL;
RefCounter12<ID3D12GraphicsCommandList> m_RefCounter;
@@ -179,6 +180,7 @@ public:
ID3D12GraphicsCommandList3 *GetReal3() { return m_pList3; }
ID3D12GraphicsCommandList4 *GetReal4() { return m_pList4; }
ID3D12GraphicsCommandList5 *GetReal5() { return m_pList5; }
ID3D12GraphicsCommandList6 *GetReal6() { return m_pList6; }
WrappedID3D12Device *GetWrappedDevice() { return m_pDevice; }
D3D12ResourceRecord *GetResourceRecord() { return m_ListRecord; }
D3D12ResourceRecord *GetCreationRecord() { return m_CreationRecord; }
@@ -188,6 +190,7 @@ public:
ID3D12GraphicsCommandList3 *GetCrackedList3();
ID3D12GraphicsCommandList4 *GetCrackedList4();
ID3D12GraphicsCommandList5 *GetCrackedList5();
ID3D12GraphicsCommandList6 *GetCrackedList6();
ID3D12GraphicsCommandListX *GetWrappedCrackedList();
void SetAMDMarkerInterface(IAmdExtD3DCommandListMarker *marker) { m_AMDMarkers = marker; }
@@ -552,6 +555,12 @@ public:
IMPLEMENT_FUNCTION_SERIALISED(virtual void STDMETHODCALLTYPE, RSSetShadingRateImage,
ID3D12Resource *shadingRateImage);
//////////////////////////////
// implement ID3D12GraphicsCommandList6
IMPLEMENT_FUNCTION_SERIALISED(virtual void STDMETHODCALLTYPE, DispatchMesh,
_In_ UINT ThreadGroupCountX, _In_ UINT ThreadGroupCountY,
_In_ UINT ThreadGroupCountZ);
};
template <>
@@ -579,21 +588,26 @@ template <>
ResourceId GetResID(ID3D12GraphicsCommandList4 *obj);
template <>
ResourceId GetResID(ID3D12GraphicsCommandList5 *obj);
template <>
ResourceId GetResID(ID3D12GraphicsCommandList6 *obj);
ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList1 *obj);
ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList2 *obj);
ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList3 *obj);
ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList4 *obj);
ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList5 *obj);
ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList6 *obj);
ID3D12GraphicsCommandList1 *Unwrap1(ID3D12GraphicsCommandList1 *obj);
ID3D12GraphicsCommandList2 *Unwrap2(ID3D12GraphicsCommandList2 *obj);
ID3D12GraphicsCommandList3 *Unwrap3(ID3D12GraphicsCommandList3 *obj);
ID3D12GraphicsCommandList4 *Unwrap4(ID3D12GraphicsCommandList4 *obj);
ID3D12GraphicsCommandList5 *Unwrap5(ID3D12GraphicsCommandList5 *obj);
ID3D12GraphicsCommandList6 *Unwrap6(ID3D12GraphicsCommandList6 *obj);
WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList1 *obj);
WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList2 *obj);
WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList3 *obj);
WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList4 *obj);
WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList5 *obj);
WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList6 *obj);
@@ -80,7 +80,7 @@ void WrappedID3D12GraphicsCommandList::WriteBufferImmediate(
m_ListRecord->AddChunk(scope.Get(m_ListRecord->cmdInfo->alloc));
for(UINT i = 0; i < Count; i++)
m_ListRecord->MarkResourceFrameReferenced(
WrappedID3D12Resource1::GetResIDFromAddr(pParams[i].Dest), eFrameRef_PartialWrite);
WrappedID3D12Resource::GetResIDFromAddr(pParams[i].Dest), eFrameRef_PartialWrite);
}
}
@@ -0,0 +1,32 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2020 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#include "d3d12_command_list.h"
void STDMETHODCALLTYPE WrappedID3D12GraphicsCommandList::DispatchMesh(UINT ThreadGroupCountX,
UINT ThreadGroupCountY,
UINT ThreadGroupCountZ)
{
RDCERR("DispatchMesh called but mesh shading is not supported!");
}
@@ -59,6 +59,11 @@ ID3D12GraphicsCommandList5 *WrappedID3D12GraphicsCommandList::GetCrackedList5()
return Unwrap5(m_Cmd->m_BakedCmdListInfo[m_Cmd->m_LastCmdListID].crackedLists.back());
}
ID3D12GraphicsCommandList6 *WrappedID3D12GraphicsCommandList::GetCrackedList6()
{
return Unwrap6(m_Cmd->m_BakedCmdListInfo[m_Cmd->m_LastCmdListID].crackedLists.back());
}
ID3D12GraphicsCommandListX *WrappedID3D12GraphicsCommandList::GetWrappedCrackedList()
{
return m_Cmd->m_BakedCmdListInfo[m_Cmd->m_LastCmdListID].crackedLists.back();
@@ -1117,8 +1122,8 @@ bool WrappedID3D12GraphicsCommandList::Serialise_IASetIndexBuffer(SerialiserType
if(pView)
{
WrappedID3D12Resource1::GetResIDFromAddr(pView->BufferLocation, state.ibuffer.buf,
state.ibuffer.offs);
WrappedID3D12Resource::GetResIDFromAddr(pView->BufferLocation, state.ibuffer.buf,
state.ibuffer.offs);
state.ibuffer.bytewidth = (pView->Format == DXGI_FORMAT_R32_UINT ? 4 : 2);
state.ibuffer.size = pView->SizeInBytes;
}
@@ -1147,7 +1152,7 @@ void WrappedID3D12GraphicsCommandList::IASetIndexBuffer(const D3D12_INDEX_BUFFER
m_ListRecord->AddChunk(scope.Get(m_ListRecord->cmdInfo->alloc));
if(pView)
m_ListRecord->MarkResourceFrameReferenced(
WrappedID3D12Resource1::GetResIDFromAddr(pView->BufferLocation), eFrameRef_Read);
WrappedID3D12Resource::GetResIDFromAddr(pView->BufferLocation), eFrameRef_Read);
}
}
@@ -1200,9 +1205,9 @@ bool WrappedID3D12GraphicsCommandList::Serialise_IASetVertexBuffers(
for(UINT i = 0; i < NumViews; i++)
{
WrappedID3D12Resource1::GetResIDFromAddr(pViews ? pViews[i].BufferLocation : 0,
state.vbuffers[StartSlot + i].buf,
state.vbuffers[StartSlot + i].offs);
WrappedID3D12Resource::GetResIDFromAddr(pViews ? pViews[i].BufferLocation : 0,
state.vbuffers[StartSlot + i].buf,
state.vbuffers[StartSlot + i].offs);
state.vbuffers[StartSlot + i].stride = pViews ? pViews[i].StrideInBytes : 0;
state.vbuffers[StartSlot + i].size = pViews ? pViews[i].SizeInBytes : 0;
@@ -1227,7 +1232,7 @@ void WrappedID3D12GraphicsCommandList::IASetVertexBuffers(UINT StartSlot, UINT N
m_ListRecord->AddChunk(scope.Get(m_ListRecord->cmdInfo->alloc));
for(UINT i = 0; pViews && i < NumViews; i++)
m_ListRecord->MarkResourceFrameReferenced(
WrappedID3D12Resource1::GetResIDFromAddr(pViews[i].BufferLocation), eFrameRef_Read);
WrappedID3D12Resource::GetResIDFromAddr(pViews[i].BufferLocation), eFrameRef_Read);
}
}
@@ -1281,11 +1286,11 @@ bool WrappedID3D12GraphicsCommandList::Serialise_SOSetTargets(
{
D3D12RenderState::StreamOut &so = state.streamouts[StartSlot + i];
WrappedID3D12Resource1::GetResIDFromAddr(pViews ? pViews[i].BufferLocation : 0, so.buf,
so.offs);
WrappedID3D12Resource::GetResIDFromAddr(pViews ? pViews[i].BufferLocation : 0, so.buf,
so.offs);
WrappedID3D12Resource1::GetResIDFromAddr(pViews ? pViews[i].BufferFilledSizeLocation : 0,
so.countbuf, so.countoffs);
WrappedID3D12Resource::GetResIDFromAddr(pViews ? pViews[i].BufferFilledSizeLocation : 0,
so.countbuf, so.countoffs);
so.size = pViews ? pViews[i].SizeInBytes : 0;
}
@@ -1309,7 +1314,7 @@ void WrappedID3D12GraphicsCommandList::SOSetTargets(UINT StartSlot, UINT NumView
m_ListRecord->AddChunk(scope.Get(m_ListRecord->cmdInfo->alloc));
for(UINT i = 0; pViews && i < NumViews; i++)
m_ListRecord->MarkResourceFrameReferenced(
WrappedID3D12Resource1::GetResIDFromAddr(pViews[i].BufferLocation), eFrameRef_Read);
WrappedID3D12Resource::GetResIDFromAddr(pViews[i].BufferLocation), eFrameRef_Read);
}
}
@@ -1940,7 +1945,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_SetComputeRootConstantBufferVie
ResourceId id;
uint64_t offs;
WrappedID3D12Resource1::GetResIDFromAddr(BufferLocation, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(BufferLocation, id, offs);
bool stateUpdate = false;
@@ -1992,7 +1997,7 @@ void WrappedID3D12GraphicsCommandList::SetComputeRootConstantBufferView(
ResourceId id;
UINT64 offs = 0;
WrappedID3D12Resource1::GetResIDFromAddr(BufferLocation, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(BufferLocation, id, offs);
m_ListRecord->AddChunk(scope.Get(m_ListRecord->cmdInfo->alloc));
m_ListRecord->MarkResourceFrameReferenced(id, eFrameRef_Read);
@@ -2020,7 +2025,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_SetComputeRootShaderResourceVie
ResourceId id;
uint64_t offs;
WrappedID3D12Resource1::GetResIDFromAddr(BufferLocation, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(BufferLocation, id, offs);
bool stateUpdate = false;
@@ -2072,7 +2077,7 @@ void WrappedID3D12GraphicsCommandList::SetComputeRootShaderResourceView(
ResourceId id;
UINT64 offs = 0;
WrappedID3D12Resource1::GetResIDFromAddr(BufferLocation, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(BufferLocation, id, offs);
m_ListRecord->AddChunk(scope.Get(m_ListRecord->cmdInfo->alloc));
m_ListRecord->MarkResourceFrameReferenced(id, eFrameRef_Read);
@@ -2100,7 +2105,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_SetComputeRootUnorderedAccessVi
ResourceId id;
uint64_t offs;
WrappedID3D12Resource1::GetResIDFromAddr(BufferLocation, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(BufferLocation, id, offs);
bool stateUpdate = false;
@@ -2152,7 +2157,7 @@ void WrappedID3D12GraphicsCommandList::SetComputeRootUnorderedAccessView(
ResourceId id;
UINT64 offs = 0;
WrappedID3D12Resource1::GetResIDFromAddr(BufferLocation, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(BufferLocation, id, offs);
m_ListRecord->AddChunk(scope.Get(m_ListRecord->cmdInfo->alloc));
m_ListRecord->MarkResourceFrameReferenced(id, eFrameRef_Read);
@@ -2516,7 +2521,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_SetGraphicsRootConstantBufferVi
ResourceId id;
uint64_t offs;
WrappedID3D12Resource1::GetResIDFromAddr(BufferLocation, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(BufferLocation, id, offs);
bool stateUpdate = false;
@@ -2568,7 +2573,7 @@ void WrappedID3D12GraphicsCommandList::SetGraphicsRootConstantBufferView(
ResourceId id;
UINT64 offs = 0;
WrappedID3D12Resource1::GetResIDFromAddr(BufferLocation, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(BufferLocation, id, offs);
m_ListRecord->AddChunk(scope.Get(m_ListRecord->cmdInfo->alloc));
m_ListRecord->MarkResourceFrameReferenced(id, eFrameRef_Read);
@@ -2596,7 +2601,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_SetGraphicsRootShaderResourceVi
ResourceId id;
uint64_t offs;
WrappedID3D12Resource1::GetResIDFromAddr(BufferLocation, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(BufferLocation, id, offs);
bool stateUpdate = false;
@@ -2648,7 +2653,7 @@ void WrappedID3D12GraphicsCommandList::SetGraphicsRootShaderResourceView(
ResourceId id;
UINT64 offs = 0;
WrappedID3D12Resource1::GetResIDFromAddr(BufferLocation, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(BufferLocation, id, offs);
m_ListRecord->AddChunk(scope.Get(m_ListRecord->cmdInfo->alloc));
m_ListRecord->MarkResourceFrameReferenced(id, eFrameRef_Read);
@@ -2676,7 +2681,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_SetGraphicsRootUnorderedAccessV
ResourceId id;
uint64_t offs;
WrappedID3D12Resource1::GetResIDFromAddr(BufferLocation, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(BufferLocation, id, offs);
bool stateUpdate = false;
@@ -2728,7 +2733,7 @@ void WrappedID3D12GraphicsCommandList::SetGraphicsRootUnorderedAccessView(
ResourceId id;
UINT64 offs = 0;
WrappedID3D12Resource1::GetResIDFromAddr(BufferLocation, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(BufferLocation, id, offs);
m_ListRecord->AddChunk(scope.Get(m_ListRecord->cmdInfo->alloc));
m_ListRecord->MarkResourceFrameReferenced(id, eFrameRef_Read);
@@ -4141,7 +4146,7 @@ void WrappedID3D12GraphicsCommandList::ReplayExecuteIndirect(ID3D12GraphicsComma
ResourceId id;
uint64_t offs = 0;
WrappedID3D12Resource1::GetResIDFromAddr(srcVB->BufferLocation, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(srcVB->BufferLocation, id, offs);
RDCASSERT(id != ResourceId());
if(executing)
@@ -4167,7 +4172,7 @@ void WrappedID3D12GraphicsCommandList::ReplayExecuteIndirect(ID3D12GraphicsComma
ResourceId id;
uint64_t offs = 0;
WrappedID3D12Resource1::GetResIDFromAddr(srcIB->BufferLocation, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(srcIB->BufferLocation, id, offs);
RDCASSERT(id != ResourceId());
if(executing)
@@ -4192,7 +4197,7 @@ void WrappedID3D12GraphicsCommandList::ReplayExecuteIndirect(ID3D12GraphicsComma
ResourceId id;
uint64_t offs = 0;
WrappedID3D12Resource1::GetResIDFromAddr(*srcAddr, id, offs);
WrappedID3D12Resource::GetResIDFromAddr(*srcAddr, id, offs);
RDCASSERT(*srcAddr == 0 || id != ResourceId());
const uint32_t rootIdx = arg.Constant.RootParameterIndex;
@@ -32,6 +32,44 @@
class WrappedID3D12CommandQueue;
// this aren't documented, they're defined in D3D12TranslationLayer in the d3d11on12 codebase
MIDL_INTERFACE("7974c836-9520-4cda-8d43-d996622e8926")
ID3D12CompatibilityQueue : public IUnknown
{
public:
virtual HRESULT STDMETHODCALLTYPE AcquireKeyedMutex(
_In_ ID3D12Object * pHeapOrResourceWithKeyedMutex, UINT64 Key, DWORD dwTimeout,
_Reserved_ void *pReserved, _In_range_(0, 0) UINT Reserved) = 0;
virtual HRESULT STDMETHODCALLTYPE ReleaseKeyedMutex(
_In_ ID3D12Object * pHeapOrResourceWithKeyedMutex, UINT64 Key, _Reserved_ void *pReserved,
_In_range_(0, 0) UINT Reserved) = 0;
};
struct WrappedID3D12CompatibilityQueue : public ID3D12CompatibilityQueue
{
WrappedID3D12CommandQueue &m_pQueue;
ID3D12CompatibilityQueue *m_pReal = NULL;
WrappedID3D12CompatibilityQueue(WrappedID3D12CommandQueue &dev) : m_pQueue(dev) {}
//////////////////////////////
// implement IUnknown
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject);
ULONG STDMETHODCALLTYPE AddRef();
ULONG STDMETHODCALLTYPE Release();
//////////////////////////////
// implement ID3D12CompatibilityQueue
virtual HRESULT STDMETHODCALLTYPE AcquireKeyedMutex(_In_ ID3D12Object *pHeapOrResourceWithKeyedMutex,
UINT64 Key, DWORD dwTimeout,
_Reserved_ void *pReserved,
_In_range_(0, 0) UINT Reserved);
virtual HRESULT STDMETHODCALLTYPE ReleaseKeyedMutex(_In_ ID3D12Object *pHeapOrResourceWithKeyedMutex,
UINT64 Key, _Reserved_ void *pReserved,
_In_range_(0, 0) UINT Reserved);
};
struct WrappedID3D12DebugCommandQueue : public ID3D12DebugCommandQueue
{
WrappedID3D12CommandQueue *m_pQueue;
@@ -114,6 +152,7 @@ class WrappedID3D12CommandQueue : public ID3D12CommandQueue,
ReplayStatus m_FailedReplayStatus = ReplayStatus::APIReplayFailed;
WrappedID3D12DebugCommandQueue m_WrappedDebug;
WrappedID3D12CompatibilityQueue m_WrappedCompat;
rdcarray<D3D12ResourceRecord *> m_CmdListRecords;
@@ -484,7 +484,7 @@ void WrappedID3D12CommandQueue::ExecuteCommandListsInternal(UINT NumCommandLists
for(auto it = maps.begin(); it != maps.end(); ++it)
{
WrappedID3D12Resource1 *res = GetWrapped(it->res);
WrappedID3D12Resource *res = GetWrapped(it->res);
UINT subres = it->subres;
size_t size = (size_t)it->totalSize;
+94 -3
View File
@@ -80,6 +80,14 @@ ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList5 *obj)
return ((WrappedID3D12GraphicsCommandList *)obj)->GetReal();
}
ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList6 *obj)
{
if(obj == NULL)
return NULL;
return ((WrappedID3D12GraphicsCommandList *)obj)->GetReal();
}
ID3D12GraphicsCommandList1 *Unwrap1(ID3D12GraphicsCommandList1 *obj)
{
if(obj == NULL)
@@ -120,6 +128,14 @@ ID3D12GraphicsCommandList5 *Unwrap5(ID3D12GraphicsCommandList5 *obj)
return ((WrappedID3D12GraphicsCommandList *)obj)->GetReal5();
}
ID3D12GraphicsCommandList6 *Unwrap6(ID3D12GraphicsCommandList6 *obj)
{
if(obj == NULL)
return NULL;
return ((WrappedID3D12GraphicsCommandList *)obj)->GetReal6();
}
template <>
ID3D12CommandList *Unwrap(ID3D12CommandList *obj)
{
@@ -183,6 +199,15 @@ ResourceId GetResID(ID3D12GraphicsCommandList5 *obj)
return ((WrappedID3D12GraphicsCommandList *)obj)->GetResourceID();
}
template <>
ResourceId GetResID(ID3D12GraphicsCommandList6 *obj)
{
if(obj == NULL)
return ResourceId();
return ((WrappedID3D12GraphicsCommandList *)obj)->GetResourceID();
}
template <>
ResourceId GetResID(ID3D12CommandList *obj)
{
@@ -262,6 +287,11 @@ WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList5 *obj)
return ((WrappedID3D12GraphicsCommandList *)obj);
}
WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList6 *obj)
{
return ((WrappedID3D12GraphicsCommandList *)obj);
}
ULONG STDMETHODCALLTYPE WrappedID3D12DebugCommandQueue::AddRef()
{
if(m_pQueue)
@@ -290,6 +320,37 @@ ULONG STDMETHODCALLTYPE WrappedID3D12DebugCommandList::Release()
return 1;
}
HRESULT STDMETHODCALLTYPE WrappedID3D12CompatibilityQueue::QueryInterface(REFIID riid,
void **ppvObject)
{
return m_pQueue.QueryInterface(riid, ppvObject);
}
ULONG STDMETHODCALLTYPE WrappedID3D12CompatibilityQueue::AddRef()
{
return m_pQueue.AddRef();
}
ULONG STDMETHODCALLTYPE WrappedID3D12CompatibilityQueue::Release()
{
return m_pQueue.Release();
}
HRESULT STDMETHODCALLTYPE WrappedID3D12CompatibilityQueue::AcquireKeyedMutex(
_In_ ID3D12Object *pHeapOrResourceWithKeyedMutex, UINT64 Key, DWORD dwTimeout,
_Reserved_ void *pReserved, _In_range_(0, 0) UINT Reserved)
{
return m_pReal->AcquireKeyedMutex(Unwrap(pHeapOrResourceWithKeyedMutex), Key, dwTimeout,
pReserved, Reserved);
}
HRESULT STDMETHODCALLTYPE WrappedID3D12CompatibilityQueue::ReleaseKeyedMutex(
_In_ ID3D12Object *pHeapOrResourceWithKeyedMutex, UINT64 Key, _Reserved_ void *pReserved,
_In_range_(0, 0) UINT Reserved)
{
return m_pReal->ReleaseKeyedMutex(Unwrap(pHeapOrResourceWithKeyedMutex), Key, pReserved, Reserved);
}
HRESULT STDMETHODCALLTYPE WrappedDownlevelQueue::QueryInterface(REFIID riid, void **ppvObject)
{
return m_pQueue.QueryInterface(riid, ppvObject);
@@ -314,7 +375,11 @@ HRESULT STDMETHODCALLTYPE WrappedDownlevelQueue::Present(ID3D12GraphicsCommandLi
WrappedID3D12CommandQueue::WrappedID3D12CommandQueue(ID3D12CommandQueue *real,
WrappedID3D12Device *device, CaptureState &state)
: RefCounter12(real), m_pDevice(device), m_State(state), m_WrappedDownlevel(*this)
: RefCounter12(real),
m_pDevice(device),
m_State(state),
m_WrappedDownlevel(*this),
m_WrappedCompat(*this)
{
if(RenderDoc::Inst().GetCrashHandler())
RenderDoc::Inst().GetCrashHandler()->RegisterMemoryRegion(this,
@@ -326,6 +391,7 @@ WrappedID3D12CommandQueue::WrappedID3D12CommandQueue(ID3D12CommandQueue *real,
{
m_pReal->QueryInterface(__uuidof(ID3D12DebugCommandQueue), (void **)&m_WrappedDebug.m_pReal);
m_pReal->QueryInterface(__uuidof(ID3D12CommandQueueDownlevel), (void **)&m_pDownlevel);
m_pReal->QueryInterface(__uuidof(ID3D12CompatibilityQueue), (void **)&m_WrappedCompat.m_pReal);
}
if(RenderDoc::Inst().IsReplayApp())
@@ -383,6 +449,7 @@ WrappedID3D12CommandQueue::~WrappedID3D12CommandQueue()
for(size_t i = 0; i < m_Cmd.m_IndirectBuffers.size(); i++)
SAFE_RELEASE(m_Cmd.m_IndirectBuffers[i]);
SAFE_RELEASE(m_WrappedCompat.m_pReal);
SAFE_RELEASE(m_WrappedDebug.m_pReal);
SAFE_RELEASE(m_pReal);
}
@@ -414,6 +481,19 @@ HRESULT STDMETHODCALLTYPE WrappedID3D12CommandQueue::QueryInterface(REFIID riid,
return E_NOINTERFACE;
}
}
else if(riid == __uuidof(ID3D12CompatibilityQueue))
{
if(m_WrappedCompat.m_pReal)
{
AddRef();
*ppvObject = (ID3D12CompatibilityQueue *)&m_WrappedCompat;
return S_OK;
}
else
{
return E_NOINTERFACE;
}
}
else if(riid == __uuidof(ID3D12Pageable))
{
*ppvObject = (ID3D12Pageable *)this;
@@ -760,6 +840,8 @@ bool WrappedID3D12CommandQueue::ProcessChunk(ReadSerialiser &ser, D3D12Chunk chu
case D3D12Chunk::CompatDevice_CreateSharedResource:
case D3D12Chunk::CompatDevice_CreateSharedHeap:
case D3D12Chunk::SetShaderExtUAV:
case D3D12Chunk::Device_CreateCommittedResource2:
case D3D12Chunk::Device_CreatePlacedResource1:
RDCERR("Unexpected chunk while processing frame: %s", ToStr(chunk).c_str());
return false;
@@ -1255,7 +1337,16 @@ HRESULT STDMETHODCALLTYPE WrappedID3D12GraphicsCommandList::QueryInterface(REFII
}
else if(riid == __uuidof(ID3D12GraphicsCommandList6))
{
return E_NOINTERFACE;
if(m_pList6)
{
*ppvObject = (ID3D12GraphicsCommandList6 *)this;
AddRef();
return S_OK;
}
else
{
return E_NOINTERFACE;
}
}
else if(riid == __uuidof(ID3D12CommandList))
{
@@ -1725,7 +1816,7 @@ void D3D12CommandData::AddUsage(const D3D12RenderState &state, D3D12DrawcallTree
for(UINT i = 0; i < num; i++)
{
ResourceId id =
WrappedID3D12Resource1::GetResIDFromAddr(desc->GetCBV().BufferLocation);
WrappedID3D12Resource::GetResIDFromAddr(desc->GetCBV().BufferLocation);
AddUsage(drawNode, id, e, cb);
+6 -1
View File
@@ -35,7 +35,7 @@
// we need to use the most-derived native interface all over the place. To make things easier when
// new versions come out we typedef it here when we don't need the specific interface
using ID3D12GraphicsCommandListX = ID3D12GraphicsCommandList5;
using ID3D12GraphicsCommandListX = ID3D12GraphicsCommandList6;
// replay only class for handling marker regions
struct D3D12MarkerRegion
@@ -405,6 +405,7 @@ struct D3D12CommandSignature
SERIALISE_INTERFACE(ID3D12GraphicsCommandList3); \
SERIALISE_INTERFACE(ID3D12GraphicsCommandList4); \
SERIALISE_INTERFACE(ID3D12GraphicsCommandList5); \
SERIALISE_INTERFACE(ID3D12GraphicsCommandList6); \
SERIALISE_INTERFACE(ID3D12RootSignature); \
SERIALISE_INTERFACE(ID3D12Resource); \
SERIALISE_INTERFACE(ID3D12QueryHeap); \
@@ -757,6 +758,8 @@ DECLARE_REFLECTION_STRUCT(D3D12_DESCRIPTOR_RANGE1);
DECLARE_REFLECTION_STRUCT(D3D12_ROOT_DESCRIPTOR_TABLE1);
DECLARE_REFLECTION_STRUCT(D3D12_ROOT_CONSTANTS);
DECLARE_REFLECTION_STRUCT(D3D12_ROOT_DESCRIPTOR1);
DECLARE_REFLECTION_STRUCT(D3D12_RESOURCE_DESC1);
DECLARE_REFLECTION_STRUCT(D3D12_MIP_REGION);
DECLARE_DESERIALISE_TYPE(D3D12_DISCARD_REGION);
DECLARE_DESERIALISE_TYPE(D3D12_GRAPHICS_PIPELINE_STATE_DESC);
@@ -878,5 +881,7 @@ enum class D3D12Chunk : uint32_t
CompatDevice_CreateSharedResource,
CompatDevice_CreateSharedHeap,
SetShaderExtUAV,
Device_CreateCommittedResource2,
Device_CreatePlacedResource1,
Max,
};
+187 -20
View File
@@ -165,6 +165,104 @@ HRESULT STDMETHODCALLTYPE WrappedDownlevelDevice::QueryVideoMemoryInfo(
return m_pDevice.QueryVideoMemoryInfo(NodeIndex, MemorySegmentGroup, pVideoMemoryInfo);
}
HRESULT STDMETHODCALLTYPE WrappedID3D12SharingContract::QueryInterface(REFIID riid, void **ppvObject)
{
return m_pDevice.QueryInterface(riid, ppvObject);
}
ULONG STDMETHODCALLTYPE WrappedID3D12SharingContract::AddRef()
{
return m_pDevice.AddRef();
}
ULONG STDMETHODCALLTYPE WrappedID3D12SharingContract::Release()
{
return m_pDevice.Release();
}
ID3DDevice *WrappedID3D12SharingContract::GetD3DDevice()
{
return &m_pDevice;
}
UINT WrappedID3D12SharingContract::GetWidth()
{
D3D12_RESOURCE_DESC desc = m_pPresentSource->GetDesc();
return (UINT)desc.Width;
}
UINT WrappedID3D12SharingContract::GetHeight()
{
D3D12_RESOURCE_DESC desc = m_pPresentSource->GetDesc();
return desc.Height;
}
DXGI_FORMAT WrappedID3D12SharingContract::GetFormat()
{
D3D12_RESOURCE_DESC desc = m_pPresentSource->GetDesc();
return desc.Format;
}
HWND WrappedID3D12SharingContract::GetHWND()
{
return m_pPresentHWND;
}
void STDMETHODCALLTYPE WrappedID3D12SharingContract::Present(_In_ ID3D12Resource *pResource,
UINT Subresource, _In_ HWND window)
{
// this is similar to the downlevel queue present
if(m_pPresentHWND != NULL)
{
// don't let the device actually release any refs on the resource, just make it release internal
// resources
m_pPresentSource->AddRef();
m_pDevice.ReleaseSwapchainResources(this, 0, NULL, NULL);
}
if(m_pPresentHWND != window)
{
if(m_pPresentHWND != NULL)
{
Keyboard::RemoveInputWindow(WindowingSystem::Win32, m_pPresentHWND);
RenderDoc::Inst().RemoveFrameCapturer(m_pDevice.GetFrameCapturerDevice(), m_pPresentHWND);
}
Keyboard::AddInputWindow(WindowingSystem::Win32, window);
RenderDoc::Inst().AddFrameCapturer(m_pDevice.GetFrameCapturerDevice(), window,
m_pDevice.GetFrameCapturer());
}
m_pPresentSource = pResource;
m_pPresentHWND = window;
m_pDevice.WrapSwapchainBuffer(this, GetFormat(), 0, m_pPresentSource);
m_pDevice.Present(NULL, this, 0, 0);
m_pReal->Present(Unwrap(pResource), Subresource, window);
}
void STDMETHODCALLTYPE WrappedID3D12SharingContract::SharedFenceSignal(_In_ ID3D12Fence *pFence,
UINT64 FenceValue)
{
m_pReal->SharedFenceSignal(Unwrap(pFence), FenceValue);
}
void STDMETHODCALLTYPE WrappedID3D12SharingContract::BeginCapturableWork(_In_ REFGUID guid)
{
// undocumented what this does
m_pReal->BeginCapturableWork(guid);
}
void STDMETHODCALLTYPE WrappedID3D12SharingContract::EndCapturableWork(_In_ REFGUID guid)
{
// undocumented what this does
m_pReal->EndCapturableWork(guid);
}
HRESULT STDMETHODCALLTYPE WrappedDRED::QueryInterface(REFIID riid, void **ppvObject)
{
return m_pDevice.QueryInterface(riid, ppvObject);
@@ -320,6 +418,7 @@ WrappedID3D12Device::WrappedID3D12Device(ID3D12Device *realDevice, D3D12InitPara
m_WrappedDownlevel(*this),
m_DRED(*this),
m_DREDSettings(*this),
m_SharingContract(*this),
m_CompatDevice(*this),
m_WrappedNVAPI(*this)
{
@@ -343,6 +442,8 @@ WrappedID3D12Device::WrappedID3D12Device(ID3D12Device *realDevice, D3D12InitPara
m_pDevice4 = NULL;
m_pDevice5 = NULL;
m_pDevice6 = NULL;
m_pDevice7 = NULL;
m_pDevice8 = NULL;
m_pDownlevel = NULL;
if(m_pDevice)
{
@@ -352,11 +453,17 @@ WrappedID3D12Device::WrappedID3D12Device(ID3D12Device *realDevice, D3D12InitPara
m_pDevice->QueryInterface(__uuidof(ID3D12Device4), (void **)&m_pDevice4);
m_pDevice->QueryInterface(__uuidof(ID3D12Device5), (void **)&m_pDevice5);
m_pDevice->QueryInterface(__uuidof(ID3D12Device6), (void **)&m_pDevice6);
m_pDevice->QueryInterface(__uuidof(ID3D12Device7), (void **)&m_pDevice7);
m_pDevice->QueryInterface(__uuidof(ID3D12Device8), (void **)&m_pDevice8);
m_pDevice->QueryInterface(__uuidof(ID3D12DeviceRemovedExtendedData), (void **)&m_DRED.m_pReal);
m_pDevice->QueryInterface(__uuidof(ID3D12DeviceRemovedExtendedData1), (void **)&m_DRED.m_pReal1);
m_pDevice->QueryInterface(__uuidof(ID3D12DeviceRemovedExtendedDataSettings),
(void **)&m_DREDSettings.m_pReal);
m_pDevice->QueryInterface(__uuidof(ID3D12DeviceRemovedExtendedDataSettings1),
(void **)&m_DREDSettings.m_pReal1);
m_pDevice->QueryInterface(__uuidof(ID3D12DeviceDownlevel), (void **)&m_pDownlevel);
m_pDevice->QueryInterface(__uuidof(ID3D12CompatibilityDevice), (void **)&m_CompatDevice.m_pReal);
m_pDevice->QueryInterface(__uuidof(ID3D12SharingContract), (void **)&m_SharingContract.m_pReal);
for(size_t i = 0; i < ARRAY_COUNT(m_DescriptorIncrements); i++)
m_DescriptorIncrements[i] =
@@ -410,7 +517,7 @@ WrappedID3D12Device::WrappedID3D12Device(ID3D12Device *realDevice, D3D12InitPara
if(realDevice)
{
m_ResourceList = new std::map<ResourceId, WrappedID3D12Resource1 *>();
m_ResourceList = new std::map<ResourceId, WrappedID3D12Resource *>();
m_PipelineList = new rdcarray<WrappedID3D12PipelineState *>();
}
@@ -631,9 +738,14 @@ WrappedID3D12Device::~WrappedID3D12Device()
SAFE_DELETE(m_ResourceManager);
SAFE_RELEASE(m_DRED.m_pReal);
SAFE_RELEASE(m_DRED.m_pReal1);
SAFE_RELEASE(m_DREDSettings.m_pReal);
SAFE_RELEASE(m_DREDSettings.m_pReal1);
SAFE_RELEASE(m_CompatDevice.m_pReal);
SAFE_RELEASE(m_SharingContract.m_pReal);
SAFE_RELEASE(m_pDownlevel);
SAFE_RELEASE(m_pDevice8);
SAFE_RELEASE(m_pDevice7);
SAFE_RELEASE(m_pDevice6);
SAFE_RELEASE(m_pDevice5);
SAFE_RELEASE(m_pDevice4);
@@ -851,11 +963,29 @@ HRESULT WrappedID3D12Device::QueryInterface(REFIID riid, void **ppvObject)
}
else if(riid == __uuidof(ID3D12Device7))
{
return E_NOINTERFACE;
if(m_pDevice7)
{
AddRef();
*ppvObject = (ID3D12Device7 *)this;
return S_OK;
}
else
{
return E_NOINTERFACE;
}
}
else if(riid == __uuidof(ID3D12Device8))
{
return E_NOINTERFACE;
if(m_pDevice8)
{
AddRef();
*ppvObject = (ID3D12Device8 *)this;
return S_OK;
}
else
{
return E_NOINTERFACE;
}
}
else if(riid == __uuidof(ID3D12DeviceDownlevel))
{
@@ -959,6 +1089,19 @@ HRESULT WrappedID3D12Device::QueryInterface(REFIID riid, void **ppvObject)
return E_NOINTERFACE;
}
}
else if(riid == __uuidof(ID3D12DeviceRemovedExtendedData1))
{
if(m_DRED.m_pReal1)
{
AddRef();
*ppvObject = (ID3D12DeviceRemovedExtendedData1 *)&m_DRED;
return S_OK;
}
else
{
return E_NOINTERFACE;
}
}
else if(riid == __uuidof(ID3D12DeviceRemovedExtendedDataSettings))
{
if(m_DREDSettings.m_pReal)
@@ -972,6 +1115,19 @@ HRESULT WrappedID3D12Device::QueryInterface(REFIID riid, void **ppvObject)
return E_NOINTERFACE;
}
}
else if(riid == __uuidof(ID3D12DeviceRemovedExtendedDataSettings1))
{
if(m_DREDSettings.m_pReal1)
{
AddRef();
*ppvObject = (ID3D12DeviceRemovedExtendedDataSettings1 *)&m_DREDSettings;
return S_OK;
}
else
{
return E_NOINTERFACE;
}
}
else if(riid == IRenderDoc_uuid)
{
AddRef();
@@ -991,6 +1147,19 @@ HRESULT WrappedID3D12Device::QueryInterface(REFIID riid, void **ppvObject)
return E_NOINTERFACE;
}
}
else if(riid == __uuidof(ID3D12SharingContract))
{
if(m_SharingContract.m_pReal)
{
AddRef();
*ppvObject = (ID3D12SharingContract *)&m_SharingContract;
return S_OK;
}
else
{
return E_NOINTERFACE;
}
}
else
{
WarnUnknownGUID("ID3D12Device", riid);
@@ -1124,7 +1293,7 @@ void WrappedID3D12Device::ReleaseSwapchainResources(IDXGISwapper *swapper, UINT
if(!res)
continue;
WrappedID3D12Resource1 *wrapped = (WrappedID3D12Resource1 *)res;
WrappedID3D12Resource *wrapped = (WrappedID3D12Resource *)res;
wrapped->ReleaseInternalRef();
SAFE_RELEASE(wrapped);
}
@@ -1145,7 +1314,7 @@ void WrappedID3D12Device::NewSwapchainBuffer(IUnknown *backbuffer)
if(pRes)
{
WrappedID3D12Resource1 *wrapped = (WrappedID3D12Resource1 *)pRes;
WrappedID3D12Resource *wrapped = (WrappedID3D12Resource *)pRes;
wrapped->AddInternalRef();
}
}
@@ -1155,7 +1324,7 @@ bool WrappedID3D12Device::Serialise_WrapSwapchainBuffer(SerialiserType &ser, IDX
DXGI_FORMAT bufferFormat, UINT Buffer,
IUnknown *realSurface)
{
WrappedID3D12Resource1 *pRes = (WrappedID3D12Resource1 *)realSurface;
WrappedID3D12Resource *pRes = (WrappedID3D12Resource *)realSurface;
SERIALISE_ELEMENT(Buffer);
SERIALISE_ELEMENT_LOCAL(SwapbufferID, GetResID(pRes)).TypedAs("ID3D12Resource *"_lit);
@@ -1196,7 +1365,7 @@ bool WrappedID3D12Device::Serialise_WrapSwapchainBuffer(SerialiserType &ser, IDX
}
else
{
WrappedID3D12Resource1 *wrapped = new WrappedID3D12Resource1(fakeBB, this);
WrappedID3D12Resource *wrapped = new WrappedID3D12Resource(fakeBB, this);
fakeBB = wrapped;
fakeBB->SetName(L"Swap Chain Buffer");
@@ -1231,14 +1400,14 @@ IUnknown *WrappedID3D12Device::WrapSwapchainBuffer(IDXGISwapper *swapper, DXGI_F
realSurface->Release();
}
else if(WrappedID3D12Resource1::IsAlloc(query))
else if(WrappedID3D12Resource::IsAlloc(query))
{
// this could be possible if we're doing downlevel presenting
pRes = query;
}
else
{
pRes = new WrappedID3D12Resource1((ID3D12Resource *)realSurface, this);
pRes = new WrappedID3D12Resource((ID3D12Resource *)realSurface, this);
ResourceId id = GetResID(pRes);
@@ -1253,7 +1422,7 @@ IUnknown *WrappedID3D12Device::WrapSwapchainBuffer(IDXGISwapper *swapper, DXGI_F
record->DataInSerialiser = false;
record->Length = 0;
WrappedID3D12Resource1 *wrapped = (WrappedID3D12Resource1 *)pRes;
WrappedID3D12Resource *wrapped = (WrappedID3D12Resource *)pRes;
wrapped->SetResourceRecord(record);
@@ -1971,7 +2140,7 @@ void WrappedID3D12Device::StartFrameCapture(void *dev, void *wnd)
}
m_RefQueues = m_Queues;
m_RefBuffers = WrappedID3D12Resource1::AddRefBuffersBeforeCapture(GetResourceManager());
m_RefBuffers = WrappedID3D12Resource::AddRefBuffersBeforeCapture(GetResourceManager());
}
GetResourceManager()->MarkResourceFrameReferenced(m_ResourceID, eFrameRef_Read);
@@ -2032,7 +2201,7 @@ bool WrappedID3D12Device::EndFrameCapture(void *dev, void *wnd)
ContainsExecuteIndirect |= (*it)->GetResourceRecord()->ContainsExecuteIndirect;
if(ContainsExecuteIndirect)
WrappedID3D12Resource1::RefBuffers(GetResourceManager());
WrappedID3D12Resource::RefBuffers(GetResourceManager());
m_State = CaptureState::BackgroundCapturing;
@@ -2828,14 +2997,6 @@ HRESULT STDMETHODCALLTYPE WrappedID3D12Device::QueryVideoMemoryInfo(
return m_pDownlevel->QueryVideoMemoryInfo(NodeIndex, MemorySegmentGroup, pVideoMemoryInfo);
}
HRESULT STDMETHODCALLTYPE WrappedID3D12Device::SetBackgroundProcessingMode(
D3D12_BACKGROUND_PROCESSING_MODE Mode, D3D12_MEASUREMENTS_ACTION MeasurementsAction,
_In_opt_ HANDLE hEventToSignalUponCompletion, _Out_opt_ BOOL *pbFurtherMeasurementsDesired)
{
return m_pDevice6->SetBackgroundProcessingMode(
Mode, MeasurementsAction, hEventToSignalUponCompletion, pbFurtherMeasurementsDesired);
}
byte *WrappedID3D12Device::GetTempMemory(size_t s)
{
TempMem *mem = (TempMem *)Threading::GetTLSValue(tempMemoryTLSSlot);
@@ -3267,6 +3428,12 @@ bool WrappedID3D12Device::ProcessChunk(ReadSerialiser &ser, D3D12Chunk context)
return Serialise_OpenSharedHandle(ser, NULL, IID(), NULL);
case D3D12Chunk::SetShaderExtUAV:
return Serialise_SetShaderExtUAV(ser, GPUVendor::Unknown, 0, 0, true);
case D3D12Chunk::Device_CreateCommittedResource2:
return Serialise_CreateCommittedResource2(ser, NULL, D3D12_HEAP_FLAG_NONE, NULL,
D3D12_RESOURCE_STATE_COMMON, NULL, NULL, IID(), NULL);
case D3D12Chunk::Device_CreatePlacedResource1:
return Serialise_CreatePlacedResource1(ser, NULL, 0, NULL, D3D12_RESOURCE_STATE_COMMON, NULL,
IID(), NULL);
// in order to get a warning if we miss a case, we explicitly handle the list/queue chunks here.
// If we actually encounter one it's an error (we should hit CaptureBegin first and switch to
+132 -7
View File
@@ -59,7 +59,7 @@ struct D3D12InitParams
DECLARE_REFLECTION_STRUCT(D3D12InitParams);
class WrappedID3D12Device;
class WrappedID3D12Resource1;
class WrappedID3D12Resource;
class WrappedID3D12PipelineState;
class D3D12Replay;
@@ -292,10 +292,11 @@ struct WrappedDownlevelDevice : public ID3D12DeviceDownlevel
_Out_ DXGI_QUERY_VIDEO_MEMORY_INFO *pVideoMemoryInfo);
};
struct WrappedDRED : public ID3D12DeviceRemovedExtendedData
struct WrappedDRED : public ID3D12DeviceRemovedExtendedData1
{
WrappedID3D12Device &m_pDevice;
ID3D12DeviceRemovedExtendedData *m_pReal = NULL;
ID3D12DeviceRemovedExtendedData1 *m_pReal1 = NULL;
WrappedDRED(WrappedID3D12Device &dev) : m_pDevice(dev) {}
//////////////////////////////
@@ -315,12 +316,25 @@ struct WrappedDRED : public ID3D12DeviceRemovedExtendedData
{
return m_pReal->GetPageFaultAllocationOutput(pOutput);
}
//////////////////////////////
// implement ID3D12DeviceRemovedExtendedData1
virtual HRESULT STDMETHODCALLTYPE GetAutoBreadcrumbsOutput1(D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 *pOutput)
{
return m_pReal1->GetAutoBreadcrumbsOutput1(pOutput);
}
virtual HRESULT STDMETHODCALLTYPE GetPageFaultAllocationOutput1(D3D12_DRED_PAGE_FAULT_OUTPUT1 *pOutput)
{
return m_pReal1->GetPageFaultAllocationOutput1(pOutput);
}
};
struct WrappedDREDSettings : public ID3D12DeviceRemovedExtendedDataSettings
struct WrappedDREDSettings : public ID3D12DeviceRemovedExtendedDataSettings1
{
WrappedID3D12Device &m_pDevice;
ID3D12DeviceRemovedExtendedDataSettings *m_pReal = NULL;
ID3D12DeviceRemovedExtendedDataSettings1 *m_pReal1 = NULL;
WrappedDREDSettings(WrappedID3D12Device &dev) : m_pDevice(dev) {}
//////////////////////////////
@@ -343,6 +357,50 @@ struct WrappedDREDSettings : public ID3D12DeviceRemovedExtendedDataSettings
{
m_pReal->SetWatsonDumpEnablement(setting);
}
//////////////////////////////
// implement ID3D12DeviceRemovedExtendedDataSettings1
virtual void STDMETHODCALLTYPE SetBreadcrumbContextEnablement(D3D12_DRED_ENABLEMENT Enablement)
{
m_pReal1->SetBreadcrumbContextEnablement(Enablement);
}
};
struct WrappedID3D12SharingContract : public ID3D12SharingContract, public IDXGISwapper
{
private:
ID3D12Resource *m_pPresentSource = NULL;
HWND m_pPresentHWND = NULL;
public:
WrappedID3D12Device &m_pDevice;
ID3D12SharingContract *m_pReal = NULL;
WrappedID3D12SharingContract(WrappedID3D12Device &dev) : m_pDevice(dev) {}
//////////////////////////////
// implement IDXGISwapper
virtual ID3DDevice *GetD3DDevice();
virtual int GetNumBackbuffers() { return 1; }
virtual IUnknown **GetBackbuffers() { return (IUnknown **)&m_pPresentSource; }
virtual int GetLastPresentedBuffer() { return 0; }
virtual UINT GetWidth();
virtual UINT GetHeight();
virtual DXGI_FORMAT GetFormat();
virtual HWND GetHWND();
//////////////////////////////
// implement IUnknown
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject);
ULONG STDMETHODCALLTYPE AddRef();
ULONG STDMETHODCALLTYPE Release();
//////////////////////////////
// implement ID3D12SharingContract
virtual void STDMETHODCALLTYPE Present(_In_ ID3D12Resource *pResource, UINT Subresource,
_In_ HWND window);
virtual void STDMETHODCALLTYPE SharedFenceSignal(_In_ ID3D12Fence *pFence, UINT64 FenceValue);
virtual void STDMETHODCALLTYPE BeginCapturableWork(_In_ REFGUID guid);
virtual void STDMETHODCALLTYPE EndCapturableWork(_In_ REFGUID guid);
};
// these aren't documented, they're defined in D3D12TranslationLayer in the d3d11on12 codebase
@@ -450,7 +508,7 @@ class WrappedID3D12CommandQueue;
template <typename SerialiserType> \
bool CONCAT(Serialise_, func(SerialiserType &ser, __VA_ARGS__));
class WrappedID3D12Device : public IFrameCapturer, public ID3DDevice, public ID3D12Device6
class WrappedID3D12Device : public IFrameCapturer, public ID3DDevice, public ID3D12Device8
{
private:
ID3D12Device *m_pDevice;
@@ -460,6 +518,8 @@ private:
ID3D12Device4 *m_pDevice4;
ID3D12Device5 *m_pDevice5;
ID3D12Device6 *m_pDevice6;
ID3D12Device7 *m_pDevice7;
ID3D12Device8 *m_pDevice8;
ID3D12DeviceDownlevel *m_pDownlevel;
// list of all queues being captured
@@ -513,6 +573,7 @@ private:
DummyID3D12InfoQueue m_DummyInfoQueue;
DummyID3D12DebugDevice m_DummyDebug;
WrappedID3D12DebugDevice m_WrappedDebug;
WrappedID3D12SharingContract m_SharingContract;
D3D12Replay *m_Replay;
D3D12ShaderCache *m_ShaderCache = NULL;
@@ -598,7 +659,7 @@ private:
std::set<ResourceId> m_Cubemaps;
// only valid on replay
std::map<ResourceId, WrappedID3D12Resource1 *> *m_ResourceList = NULL;
std::map<ResourceId, WrappedID3D12Resource *> *m_ResourceList = NULL;
rdcarray<WrappedID3D12PipelineState *> *m_PipelineList = NULL;
struct SwapPresentInfo
@@ -650,7 +711,7 @@ public:
void RemoveQueue(WrappedID3D12CommandQueue *queue);
// only valid on replay
std::map<ResourceId, WrappedID3D12Resource1 *> &GetResourceList() { return *m_ResourceList; }
std::map<ResourceId, WrappedID3D12Resource *> &GetResourceList() { return *m_ResourceList; }
rdcarray<WrappedID3D12PipelineState *> &GetPipelineList() { return *m_PipelineList; }
////////////////////////////////////////////////////////////////
// non wrapping interface
@@ -808,7 +869,8 @@ public:
if(iid == __uuidof(ID3D12Device) || iid == __uuidof(ID3D12Device1) ||
iid == __uuidof(ID3D12Device2) || iid == __uuidof(ID3D12Device3) ||
iid == __uuidof(ID3D12Device4) || iid == __uuidof(ID3D12Device5) ||
iid == __uuidof(ID3D12Device6))
iid == __uuidof(ID3D12Device6) || iid == __uuidof(ID3D12Device7) ||
iid == __uuidof(ID3D12Device8))
return true;
return false;
@@ -829,6 +891,10 @@ public:
return (ID3D12Device5 *)this;
else if(iid == __uuidof(ID3D12Device6))
return (ID3D12Device6 *)this;
else if(iid == __uuidof(ID3D12Device7))
return (ID3D12Device7 *)this;
else if(iid == __uuidof(ID3D12Device8))
return (ID3D12Device8 *)this;
RDCERR("Requested unknown device interface %s", ToStr(iid).c_str());
@@ -902,6 +968,18 @@ public:
this->AddRef();
return S_OK;
}
else if(riid == __uuidof(ID3D12Device7))
{
*ppvDevice = (ID3D12Device7 *)this;
this->AddRef();
return S_OK;
}
else if(riid == __uuidof(ID3D12Device8))
{
*ppvDevice = (ID3D12Device8 *)this;
this->AddRef();
return S_OK;
}
return E_NOINTERFACE;
}
@@ -1271,4 +1349,51 @@ public:
virtual HRESULT STDMETHODCALLTYPE SetBackgroundProcessingMode(
D3D12_BACKGROUND_PROCESSING_MODE Mode, D3D12_MEASUREMENTS_ACTION MeasurementsAction,
_In_opt_ HANDLE hEventToSignalUponCompletion, _Out_opt_ BOOL *pbFurtherMeasurementsDesired);
//////////////////////////////
// implement ID3D12Device7
virtual HRESULT STDMETHODCALLTYPE AddToStateObject(const D3D12_STATE_OBJECT_DESC *pAddition,
ID3D12StateObject *pStateObjectToGrowFrom,
REFIID riid,
_COM_Outptr_ void **ppNewStateObject);
virtual HRESULT STDMETHODCALLTYPE
CreateProtectedResourceSession1(_In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc,
_In_ REFIID riid, _COM_Outptr_ void **ppSession);
//////////////////////////////
// implement ID3D12Device8
virtual D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE GetResourceAllocationInfo2(
UINT visibleMask, UINT numResourceDescs,
_In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs,
_Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
IMPLEMENT_FUNCTION_THREAD_SERIALISED(virtual HRESULT STDMETHODCALLTYPE, CreateCommittedResource2,
_In_ const D3D12_HEAP_PROPERTIES *pHeapProperties,
D3D12_HEAP_FLAGS HeapFlags,
_In_ const D3D12_RESOURCE_DESC1 *pDesc,
D3D12_RESOURCE_STATES InitialResourceState,
_In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue,
_In_opt_ ID3D12ProtectedResourceSession *pProtectedSession,
REFIID riidResource, _COM_Outptr_opt_ void **ppvResource);
IMPLEMENT_FUNCTION_THREAD_SERIALISED(virtual HRESULT STDMETHODCALLTYPE, CreatePlacedResource1,
_In_ ID3D12Heap *pHeap, UINT64 HeapOffset,
_In_ const D3D12_RESOURCE_DESC1 *pDesc,
D3D12_RESOURCE_STATES InitialState,
_In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue,
REFIID riid, _COM_Outptr_opt_ void **ppvResource);
virtual void STDMETHODCALLTYPE CreateSamplerFeedbackUnorderedAccessView(
_In_opt_ ID3D12Resource *pTargetedResource, _In_opt_ ID3D12Resource *pFeedbackResource,
_In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
virtual void STDMETHODCALLTYPE GetCopyableFootprints1(
_In_ const D3D12_RESOURCE_DESC1 *pResourceDesc,
_In_range_(0, D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
_In_range_(0, D3D12_REQ_SUBRESOURCES - FirstSubresource) UINT NumSubresources,
UINT64 BaseOffset,
_Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts,
_Out_writes_opt_(NumSubresources) UINT *pNumRows,
_Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, _Out_opt_ UINT64 *pTotalBytes);
};
+60 -35
View File
@@ -305,7 +305,7 @@ HRESULT WrappedID3D12Device::CreateCommandList(UINT nodeMask, D3D12_COMMAND_LIST
if(riid != __uuidof(ID3D12GraphicsCommandList) && riid != __uuidof(ID3D12CommandList) &&
riid != __uuidof(ID3D12GraphicsCommandList1) && riid != __uuidof(ID3D12GraphicsCommandList2) &&
riid != __uuidof(ID3D12GraphicsCommandList3) && riid != __uuidof(ID3D12GraphicsCommandList4) &&
riid != __uuidof(ID3D12GraphicsCommandList5))
riid != __uuidof(ID3D12GraphicsCommandList5) && riid != __uuidof(ID3D12GraphicsCommandList6))
return E_NOINTERFACE;
void *realptr = NULL;
@@ -330,6 +330,8 @@ HRESULT WrappedID3D12Device::CreateCommandList(UINT nodeMask, D3D12_COMMAND_LIST
real = (ID3D12GraphicsCommandList4 *)realptr;
else if(riid == __uuidof(ID3D12GraphicsCommandList5))
real = (ID3D12GraphicsCommandList5 *)realptr;
else if(riid == __uuidof(ID3D12GraphicsCommandList6))
real = (ID3D12GraphicsCommandList6 *)realptr;
if(SUCCEEDED(ret))
{
@@ -382,6 +384,8 @@ HRESULT WrappedID3D12Device::CreateCommandList(UINT nodeMask, D3D12_COMMAND_LIST
*ppCommandList = (ID3D12GraphicsCommandList4 *)wrapped;
else if(riid == __uuidof(ID3D12GraphicsCommandList5))
*ppCommandList = (ID3D12GraphicsCommandList5 *)wrapped;
else if(riid == __uuidof(ID3D12GraphicsCommandList6))
*ppCommandList = (ID3D12GraphicsCommandList6 *)wrapped;
else if(riid == __uuidof(ID3D12CommandList))
*ppCommandList = (ID3D12CommandList *)wrapped;
else
@@ -1080,7 +1084,7 @@ void WrappedID3D12Device::CreateConstantBufferView(const D3D12_CONSTANT_BUFFER_V
}
GetResourceManager()->MarkResourceFrameReferenced(
WrappedID3D12Resource1::GetResIDFromAddr(pDesc->BufferLocation), eFrameRef_Read);
WrappedID3D12Resource::GetResIDFromAddr(pDesc->BufferLocation), eFrameRef_Read);
}
GetWrapped(DestDescriptor)->Init(pDesc);
@@ -1300,11 +1304,11 @@ bool WrappedID3D12Device::Serialise_CreateCommittedResource(
SERIALISE_ELEMENT(InitialResourceState);
SERIALISE_ELEMENT_OPT(pOptimizedClearValue);
SERIALISE_ELEMENT_LOCAL(guid, riidResource).Named("riidResource"_lit);
SERIALISE_ELEMENT_LOCAL(pResource, ((WrappedID3D12Resource1 *)*ppvResource)->GetResourceID())
SERIALISE_ELEMENT_LOCAL(pResource, ((WrappedID3D12Resource *)*ppvResource)->GetResourceID())
.TypedAs("ID3D12Resource *"_lit);
SERIALISE_ELEMENT_LOCAL(gpuAddress,
((WrappedID3D12Resource1 *)*ppvResource)->GetGPUVirtualAddressIfBuffer())
((WrappedID3D12Resource *)*ppvResource)->GetGPUVirtualAddressIfBuffer())
.Hidden();
SERIALISE_CHECK_READ_ERRORS();
@@ -1357,7 +1361,7 @@ bool WrappedID3D12Device::Serialise_CreateCommittedResource(
SetObjName(ret, StringFormat::Fmt("Committed Resource %s %s", ToStr(desc.Dimension).c_str(),
ToStr(pResource).c_str()));
ret = new WrappedID3D12Resource1(ret, this);
ret = new WrappedID3D12Resource(ret, this);
GetResourceManager()->AddLiveResource(pResource, ret);
@@ -1418,7 +1422,8 @@ HRESULT WrappedID3D12Device::CreateCommittedResource(const D3D12_HEAP_PROPERTIES
return m_pDevice->CreateCommittedResource(pHeapProperties, HeapFlags, pDesc, InitialResourceState,
pOptimizedClearValue, riidResource, NULL);
if(riidResource != __uuidof(ID3D12Resource) && riidResource != __uuidof(ID3D12Resource1))
if(riidResource != __uuidof(ID3D12Resource) && riidResource != __uuidof(ID3D12Resource1) &&
riidResource != __uuidof(ID3D12Resource2))
return E_NOINTERFACE;
const D3D12_RESOURCE_DESC *pCreateDesc = pDesc;
@@ -1443,10 +1448,12 @@ HRESULT WrappedID3D12Device::CreateCommittedResource(const D3D12_HEAP_PROPERTIES
real = (ID3D12Resource *)realptr;
else if(riidResource == __uuidof(ID3D12Resource1))
real = (ID3D12Resource1 *)realptr;
else if(riidResource == __uuidof(ID3D12Resource2))
real = (ID3D12Resource2 *)realptr;
if(SUCCEEDED(ret))
{
WrappedID3D12Resource1 *wrapped = new WrappedID3D12Resource1(real, this);
WrappedID3D12Resource *wrapped = new WrappedID3D12Resource(real, this);
if(IsCaptureMode(m_State))
{
@@ -1483,7 +1490,12 @@ HRESULT WrappedID3D12Device::CreateCommittedResource(const D3D12_HEAP_PROPERTIES
states.fill(GetNumSubresources(m_pDevice, pDesc), InitialResourceState);
}
*ppvResource = (ID3D12Resource *)wrapped;
if(riidResource == __uuidof(ID3D12Resource))
*ppvResource = (ID3D12Resource *)wrapped;
else if(riidResource == __uuidof(ID3D12Resource1))
*ppvResource = (ID3D12Resource1 *)wrapped;
else if(riidResource == __uuidof(ID3D12Resource2))
*ppvResource = (ID3D12Resource2 *)wrapped;
// while actively capturing we keep all buffers around to prevent the address lookup from
// losing addresses we might need (or the manageable but annoying problem of an address being
@@ -1507,7 +1519,7 @@ bool WrappedID3D12Device::Serialise_CreateHeap(SerialiserType &ser, const D3D12_
{
SERIALISE_ELEMENT_LOCAL(Descriptor, *pDesc).Named("pDesc"_lit);
SERIALISE_ELEMENT_LOCAL(guid, riid).Named("riid"_lit);
SERIALISE_ELEMENT_LOCAL(pHeap, ((WrappedID3D12Heap1 *)*ppvHeap)->GetResourceID())
SERIALISE_ELEMENT_LOCAL(pHeap, ((WrappedID3D12Heap *)*ppvHeap)->GetResourceID())
.TypedAs("ID3D12Heap *"_lit);
SERIALISE_CHECK_READ_ERRORS();
@@ -1534,7 +1546,7 @@ bool WrappedID3D12Device::Serialise_CreateHeap(SerialiserType &ser, const D3D12_
}
else
{
ret = new WrappedID3D12Heap1(ret, this);
ret = new WrappedID3D12Heap(ret, this);
GetResourceManager()->AddLiveResource(pHeap, ret);
}
@@ -1566,7 +1578,7 @@ HRESULT WrappedID3D12Device::CreateHeap(const D3D12_HEAP_DESC *pDesc, REFIID rii
if(SUCCEEDED(ret))
{
WrappedID3D12Heap1 *wrapped = new WrappedID3D12Heap1(real, this);
WrappedID3D12Heap *wrapped = new WrappedID3D12Heap(real, this);
if(IsCaptureMode(m_State))
{
@@ -1608,11 +1620,11 @@ bool WrappedID3D12Device::Serialise_CreatePlacedResource(
SERIALISE_ELEMENT(InitialState);
SERIALISE_ELEMENT_OPT(pOptimizedClearValue);
SERIALISE_ELEMENT_LOCAL(guid, riid).Named("riid"_lit);
SERIALISE_ELEMENT_LOCAL(pResource, ((WrappedID3D12Resource1 *)*ppvResource)->GetResourceID())
SERIALISE_ELEMENT_LOCAL(pResource, ((WrappedID3D12Resource *)*ppvResource)->GetResourceID())
.TypedAs("ID3D12Resource *"_lit);
SERIALISE_ELEMENT_LOCAL(gpuAddress,
((WrappedID3D12Resource1 *)*ppvResource)->GetGPUVirtualAddressIfBuffer())
((WrappedID3D12Resource *)*ppvResource)->GetGPUVirtualAddressIfBuffer())
.Hidden();
SERIALISE_CHECK_READ_ERRORS();
@@ -1657,7 +1669,7 @@ bool WrappedID3D12Device::Serialise_CreatePlacedResource(
SetObjName(ret, StringFormat::Fmt("Placed Resource %s %s", ToStr(Descriptor.Dimension).c_str(),
ToStr(pResource).c_str()));
ret = new WrappedID3D12Resource1(ret, this);
ret = new WrappedID3D12Resource(ret, this);
GetResourceManager()->AddLiveResource(pResource, ret);
@@ -1718,7 +1730,8 @@ HRESULT WrappedID3D12Device::CreatePlacedResource(ID3D12Heap *pHeap, UINT64 Heap
return m_pDevice->CreatePlacedResource(Unwrap(pHeap), HeapOffset, pDesc, InitialState,
pOptimizedClearValue, riid, NULL);
if(riid != __uuidof(ID3D12Resource))
if(riid != __uuidof(ID3D12Resource) && riid != __uuidof(ID3D12Resource1) &&
riid != __uuidof(ID3D12Resource2))
return E_NOINTERFACE;
const D3D12_RESOURCE_DESC *pCreateDesc = pDesc;
@@ -1734,13 +1747,13 @@ HRESULT WrappedID3D12Device::CreatePlacedResource(ID3D12Heap *pHeap, UINT64 Heap
ID3D12Resource *real = NULL;
HRESULT ret;
SERIALISE_TIME_CALL(ret = m_pDevice->CreatePlacedResource(Unwrap(pHeap), HeapOffset, pCreateDesc,
InitialState, pOptimizedClearValue,
riid, (void **)&real));
SERIALISE_TIME_CALL(ret = m_pDevice->CreatePlacedResource(
Unwrap(pHeap), HeapOffset, pCreateDesc, InitialState,
pOptimizedClearValue, __uuidof(ID3D12Resource), (void **)&real));
if(SUCCEEDED(ret))
{
WrappedID3D12Resource1 *wrapped = new WrappedID3D12Resource1(real, this);
WrappedID3D12Resource *wrapped = new WrappedID3D12Resource(real, this);
if(IsCaptureMode(m_State))
{
@@ -1777,7 +1790,12 @@ HRESULT WrappedID3D12Device::CreatePlacedResource(ID3D12Heap *pHeap, UINT64 Heap
states.fill(GetNumSubresources(m_pDevice, pDesc), InitialState);
}
*ppvResource = (ID3D12Resource *)wrapped;
if(riid == __uuidof(ID3D12Resource))
*ppvResource = (ID3D12Resource *)wrapped;
else if(riid == __uuidof(ID3D12Resource1))
*ppvResource = (ID3D12Resource1 *)wrapped;
else if(riid == __uuidof(ID3D12Resource2))
*ppvResource = (ID3D12Resource2 *)wrapped;
// while actively capturing we keep all buffers around to prevent the address lookup from
// losing addresses we might need (or the manageable but annoying problem of an address being
@@ -1821,7 +1839,7 @@ bool WrappedID3D12Device::Serialise_CreateFence(SerialiserType &ser, UINT64 Init
SERIALISE_ELEMENT(InitialValue);
SERIALISE_ELEMENT(Flags);
SERIALISE_ELEMENT_LOCAL(guid, riid).Named("riid"_lit);
SERIALISE_ELEMENT_LOCAL(pFence, ((WrappedID3D12Fence1 *)*ppFence)->GetResourceID())
SERIALISE_ELEMENT_LOCAL(pFence, ((WrappedID3D12Fence *)*ppFence)->GetResourceID())
.TypedAs("ID3D12Fence *"_lit);
SERIALISE_CHECK_READ_ERRORS();
@@ -1844,7 +1862,7 @@ bool WrappedID3D12Device::Serialise_CreateFence(SerialiserType &ser, UINT64 Init
}
else
{
ret = new WrappedID3D12Fence1(ret, this);
ret = new WrappedID3D12Fence(ret, this);
GetResourceManager()->AddLiveResource(pFence, ret);
}
@@ -1877,7 +1895,7 @@ HRESULT WrappedID3D12Device::CreateFence(UINT64 InitialValue, D3D12_FENCE_FLAGS
if(SUCCEEDED(ret))
{
WrappedID3D12Fence1 *wrapped = new WrappedID3D12Fence1(real, this);
WrappedID3D12Fence *wrapped = new WrappedID3D12Fence(real, this);
if(IsCaptureMode(m_State))
{
@@ -2337,7 +2355,9 @@ bool WrappedID3D12Device::Serialise_OpenSharedHandle(SerialiserType &ser, HANDLE
SERIALISE_CHECK_READ_ERRORS();
bool isRes = ResourceRIID == __uuidof(ID3D12Resource) || ResourceRIID == __uuidof(ID3D12Resource1);
bool isRes = ResourceRIID == __uuidof(ID3D12Resource) ||
ResourceRIID == __uuidof(ID3D12Resource1) ||
ResourceRIID == __uuidof(ID3D12Resource2);
bool isFence = ResourceRIID == __uuidof(ID3D12Fence) || ResourceRIID == __uuidof(ID3D12Fence1);
bool isHeap = ResourceRIID == __uuidof(ID3D12Heap) || ResourceRIID == __uuidof(ID3D12Heap1);
if(isFence)
@@ -2371,7 +2391,7 @@ bool WrappedID3D12Device::Serialise_OpenSharedHandle(SerialiserType &ser, HANDLE
}
else
{
ret = new WrappedID3D12Fence1(ret, this);
ret = new WrappedID3D12Fence(ret, this);
GetResourceManager()->AddLiveResource(resourceId, ret);
}
@@ -2391,6 +2411,8 @@ bool WrappedID3D12Device::Serialise_OpenSharedHandle(SerialiserType &ser, HANDLE
res = (ID3D12Resource *)(ID3D12DeviceChild *)*ppvObj;
if(ResourceRIID == __uuidof(ID3D12Resource1))
res = (ID3D12Resource1 *)(ID3D12DeviceChild *)*ppvObj;
else if(ResourceRIID == __uuidof(ID3D12Resource2))
res = (ID3D12Resource2 *)(ID3D12DeviceChild *)*ppvObj;
desc = res->GetDesc();
res->GetHeapProperties(&heapProperties, &heapFlags);
}
@@ -2430,7 +2452,7 @@ bool WrappedID3D12Device::Serialise_OpenSharedHandle(SerialiserType &ser, HANDLE
SetObjName(ret, StringFormat::Fmt("Shared Resource %s %s", ToStr(desc.Dimension).c_str(),
ToStr(resourceId).c_str()));
ret = new WrappedID3D12Resource1(ret, this);
ret = new WrappedID3D12Resource(ret, this);
GetResourceManager()->AddLiveResource(resourceId, ret);
@@ -2505,7 +2527,7 @@ bool WrappedID3D12Device::Serialise_OpenSharedHandle(SerialiserType &ser, HANDLE
}
else
{
ret = new WrappedID3D12Heap1(ret, this);
ret = new WrappedID3D12Heap(ret, this);
GetResourceManager()->AddLiveResource(resourceId, ret);
}
@@ -2552,7 +2574,8 @@ HRESULT WrappedID3D12Device::OpenSharedHandleInternal(D3D12Chunk chunkType,
}
bool isDXGIRes = riid == __uuidof(IDXGIResource) || riid == __uuidof(IDXGIResource1);
bool isRes = riid == __uuidof(ID3D12Resource) || riid == __uuidof(ID3D12Resource1);
bool isRes = riid == __uuidof(ID3D12Resource) || riid == __uuidof(ID3D12Resource1) ||
riid == __uuidof(ID3D12Resource2);
bool isFence = riid == __uuidof(ID3D12Fence) || riid == __uuidof(ID3D12Fence1);
bool isHeap = riid == __uuidof(ID3D12Heap) || riid == __uuidof(ID3D12Heap1);
bool isDeviceChild = riid == __uuidof(ID3D12DeviceChild);
@@ -2663,7 +2686,7 @@ HRESULT WrappedID3D12Device::OpenSharedHandleInternal(D3D12Chunk chunkType,
if(riid_internal == __uuidof(ID3D12Fence1))
real = (ID3D12Fence1 *)ret;
WrappedID3D12Fence1 *wrapped = new WrappedID3D12Fence1(real, this);
WrappedID3D12Fence *wrapped = new WrappedID3D12Fence(real, this);
wrappedDeviceChild = wrapped;
@@ -2677,8 +2700,10 @@ HRESULT WrappedID3D12Device::OpenSharedHandleInternal(D3D12Chunk chunkType,
ID3D12Resource *real = (ID3D12Resource *)ret;
if(riid_internal == __uuidof(ID3D12Resource1))
real = (ID3D12Resource1 *)ret;
else if(riid_internal == __uuidof(ID3D12Resource2))
real = (ID3D12Resource2 *)ret;
WrappedID3D12Resource1 *wrapped = new WrappedID3D12Resource1(real, this);
WrappedID3D12Resource *wrapped = new WrappedID3D12Resource(real, this);
if(HeapFlags & D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT)
wrapped->SetResident(false);
@@ -2723,7 +2748,7 @@ HRESULT WrappedID3D12Device::OpenSharedHandleInternal(D3D12Chunk chunkType,
if(riid_internal == __uuidof(ID3D12Heap1))
real = (ID3D12Heap1 *)ret;
WrappedID3D12Heap1 *wrapped = new WrappedID3D12Heap1(real, this);
WrappedID3D12Heap *wrapped = new WrappedID3D12Heap(real, this);
if(HeapFlags & D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT)
wrapped->SetResident(false);
@@ -2775,9 +2800,9 @@ HRESULT WrappedID3D12Device::MakeResident(UINT NumObjects, ID3D12Pageable *const
heap->SetResident(true);
unwrapped[i] = heap->GetReal();
}
else if(WrappedID3D12Resource1::IsAlloc(ppObjects[i]))
else if(WrappedID3D12Resource::IsAlloc(ppObjects[i]))
{
WrappedID3D12Resource1 *res = (WrappedID3D12Resource1 *)ppObjects[i];
WrappedID3D12Resource *res = (WrappedID3D12Resource *)ppObjects[i];
res->SetResident(true);
unwrapped[i] = res->GetReal();
}
@@ -2802,9 +2827,9 @@ HRESULT WrappedID3D12Device::Evict(UINT NumObjects, ID3D12Pageable *const *ppObj
heap->SetResident(false);
unwrapped[i] = heap->GetReal();
}
else if(WrappedID3D12Resource1::IsAlloc(ppObjects[i]))
else if(WrappedID3D12Resource::IsAlloc(ppObjects[i]))
{
WrappedID3D12Resource1 *res = (WrappedID3D12Resource1 *)ppObjects[i];
WrappedID3D12Resource *res = (WrappedID3D12Resource *)ppObjects[i];
res->SetResident(false);
unwrapped[i] = res->GetReal();
}
@@ -48,7 +48,7 @@ HRESULT WrappedID3D12Device::CreatePipelineLibrary(_In_reads_(BlobLength) const
if(BlobLength > 0)
return D3D12_ERROR_DRIVER_VERSION_MISMATCH;
WrappedID3D12PipelineLibrary1 *pipeLibrary = new WrappedID3D12PipelineLibrary1(this);
WrappedID3D12PipelineLibrary *pipeLibrary = new WrappedID3D12PipelineLibrary(this);
if(riid == __uuidof(ID3D12PipelineLibrary))
{
@@ -40,7 +40,7 @@ HRESULT WrappedID3D12Device::OpenExistingHeapFromAddress(const void *pAddress, R
if(SUCCEEDED(ret))
{
WrappedID3D12Heap1 *wrapped = new WrappedID3D12Heap1(real, this);
WrappedID3D12Heap *wrapped = new WrappedID3D12Heap(real, this);
if(IsCaptureMode(m_State))
{
@@ -108,7 +108,7 @@ HRESULT WrappedID3D12Device::OpenExistingHeapFromFileMapping(HANDLE hFileMapping
if(SUCCEEDED(ret))
{
WrappedID3D12Heap1 *wrapped = new WrappedID3D12Heap1(real, this);
WrappedID3D12Heap *wrapped = new WrappedID3D12Heap(real, this);
if(IsCaptureMode(m_State))
{
@@ -173,9 +173,9 @@ HRESULT WrappedID3D12Device::EnqueueMakeResident(D3D12_RESIDENCY_FLAGS Flags, UI
heap->SetResident(true);
unwrapped[i] = heap->GetReal();
}
else if(WrappedID3D12Resource1::IsAlloc(ppObjects[i]))
else if(WrappedID3D12Resource::IsAlloc(ppObjects[i]))
{
WrappedID3D12Resource1 *res = (WrappedID3D12Resource1 *)ppObjects[i];
WrappedID3D12Resource *res = (WrappedID3D12Resource *)ppObjects[i];
res->SetResident(true);
unwrapped[i] = res->GetReal();
}
+34 -16
View File
@@ -85,7 +85,7 @@ HRESULT WrappedID3D12Device::CreateCommandList1(UINT nodeMask, D3D12_COMMAND_LIS
if(riid != __uuidof(ID3D12GraphicsCommandList) && riid != __uuidof(ID3D12CommandList) &&
riid != __uuidof(ID3D12GraphicsCommandList1) && riid != __uuidof(ID3D12GraphicsCommandList2) &&
riid != __uuidof(ID3D12GraphicsCommandList3) && riid != __uuidof(ID3D12GraphicsCommandList4) &&
riid != __uuidof(ID3D12GraphicsCommandList5))
riid != __uuidof(ID3D12GraphicsCommandList5) && riid != __uuidof(ID3D12GraphicsCommandList6))
return E_NOINTERFACE;
void *realptr = NULL;
@@ -109,6 +109,8 @@ HRESULT WrappedID3D12Device::CreateCommandList1(UINT nodeMask, D3D12_COMMAND_LIS
real = (ID3D12GraphicsCommandList4 *)realptr;
else if(riid == __uuidof(ID3D12GraphicsCommandList5))
real = (ID3D12GraphicsCommandList5 *)realptr;
else if(riid == __uuidof(ID3D12GraphicsCommandList6))
real = (ID3D12GraphicsCommandList6 *)realptr;
if(SUCCEEDED(ret))
{
@@ -156,6 +158,8 @@ HRESULT WrappedID3D12Device::CreateCommandList1(UINT nodeMask, D3D12_COMMAND_LIS
*ppCommandList = (ID3D12GraphicsCommandList4 *)wrapped;
else if(riid == __uuidof(ID3D12GraphicsCommandList5))
*ppCommandList = (ID3D12GraphicsCommandList5 *)wrapped;
else if(riid == __uuidof(ID3D12GraphicsCommandList6))
*ppCommandList = (ID3D12GraphicsCommandList6 *)wrapped;
else if(riid == __uuidof(ID3D12CommandList))
*ppCommandList = (ID3D12CommandList *)wrapped;
else
@@ -172,20 +176,26 @@ HRESULT WrappedID3D12Device::CreateProtectedResourceSession(
if(ppSession == NULL)
return m_pDevice4->CreateProtectedResourceSession(pDesc, riid, NULL);
// this is the only UUID in the headers that we can support
if(riid != __uuidof(ID3D12ProtectedResourceSession))
if(riid != __uuidof(ID3D12ProtectedResourceSession) &&
riid != __uuidof(ID3D12ProtectedResourceSession1) && riid != __uuidof(ID3D12ProtectedSession))
return E_NOINTERFACE;
ID3D12ProtectedResourceSession *real = NULL;
HRESULT ret;
SERIALISE_TIME_CALL(ret = m_pDevice4->CreateProtectedResourceSession(pDesc, riid, (void **)&real));
SERIALISE_TIME_CALL(ret = m_pDevice4->CreateProtectedResourceSession(
pDesc, __uuidof(ID3D12ProtectedResourceSession), (void **)&real));
if(SUCCEEDED(ret))
{
WrappedID3D12ProtectedResourceSession *wrapped =
new WrappedID3D12ProtectedResourceSession(real, this);
*ppSession = (ID3D12ProtectedResourceSession *)wrapped;
if(riid == __uuidof(ID3D12ProtectedResourceSession))
*ppSession = (ID3D12ProtectedResourceSession *)wrapped;
else if(riid == __uuidof(ID3D12ProtectedResourceSession1))
*ppSession = (ID3D12ProtectedResourceSession1 *)wrapped;
else if(riid == __uuidof(ID3D12ProtectedSession))
*ppSession = (ID3D12ProtectedSession *)wrapped;
}
return ret;
@@ -206,11 +216,11 @@ bool WrappedID3D12Device::Serialise_CreateCommittedResource1(
// placeholder for future use if we properly capture & replay protected sessions
SERIALISE_ELEMENT_LOCAL(ProtectedSession, ResourceId()).Named("pProtectedSession"_lit);
SERIALISE_ELEMENT_LOCAL(guid, riidResource).Named("riidResource"_lit);
SERIALISE_ELEMENT_LOCAL(pResource, ((WrappedID3D12Resource1 *)*ppvResource)->GetResourceID())
SERIALISE_ELEMENT_LOCAL(pResource, ((WrappedID3D12Resource *)*ppvResource)->GetResourceID())
.TypedAs("ID3D12Resource *"_lit);
SERIALISE_ELEMENT_LOCAL(gpuAddress,
((WrappedID3D12Resource1 *)*ppvResource)->GetGPUVirtualAddressIfBuffer())
((WrappedID3D12Resource *)*ppvResource)->GetGPUVirtualAddressIfBuffer())
.Hidden();
SERIALISE_CHECK_READ_ERRORS();
@@ -264,7 +274,7 @@ bool WrappedID3D12Device::Serialise_CreateCommittedResource1(
SetObjName(ret, StringFormat::Fmt("Committed Resource %s ID %s",
ToStr(desc.Dimension).c_str(), ToStr(pResource).c_str()));
ret = new WrappedID3D12Resource1(ret, this);
ret = new WrappedID3D12Resource(ret, this);
GetResourceManager()->AddLiveResource(pResource, ret);
@@ -325,7 +335,8 @@ HRESULT WrappedID3D12Device::CreateCommittedResource1(
InitialResourceState, pOptimizedClearValue,
Unwrap(pProtectedSession), riidResource, NULL);
if(riidResource != __uuidof(ID3D12Resource) && riidResource != __uuidof(ID3D12Resource1))
if(riidResource != __uuidof(ID3D12Resource) && riidResource != __uuidof(ID3D12Resource1) &&
riidResource != __uuidof(ID3D12Resource2))
return E_NOINTERFACE;
void *realptr = NULL;
@@ -339,10 +350,12 @@ HRESULT WrappedID3D12Device::CreateCommittedResource1(
real = (ID3D12Resource *)realptr;
else if(riidResource == __uuidof(ID3D12Resource1))
real = (ID3D12Resource1 *)realptr;
else if(riidResource == __uuidof(ID3D12Resource2))
real = (ID3D12Resource2 *)realptr;
if(SUCCEEDED(ret))
{
WrappedID3D12Resource1 *wrapped = new WrappedID3D12Resource1(real, this);
WrappedID3D12Resource *wrapped = new WrappedID3D12Resource(real, this);
if(IsCaptureMode(m_State))
{
@@ -377,7 +390,12 @@ HRESULT WrappedID3D12Device::CreateCommittedResource1(
states.fill(GetNumSubresources(m_pDevice, pDesc), InitialResourceState);
}
*ppvResource = (ID3D12Resource *)wrapped;
if(riidResource == __uuidof(ID3D12Resource))
*ppvResource = (ID3D12Resource *)wrapped;
else if(riidResource == __uuidof(ID3D12Resource1))
*ppvResource = (ID3D12Resource1 *)wrapped;
else if(riidResource == __uuidof(ID3D12Resource2))
*ppvResource = (ID3D12Resource2 *)wrapped;
// while actively capturing we keep all buffers around to prevent the address lookup from
// losing addresses we might need (or the manageable but annoying problem of an address being
@@ -404,7 +422,7 @@ bool WrappedID3D12Device::Serialise_CreateHeap1(SerialiserType &ser, const D3D12
// placeholder for future use if we properly capture & replay protected sessions
SERIALISE_ELEMENT_LOCAL(ProtectedSession, ResourceId()).Named("pProtectedSession"_lit);
SERIALISE_ELEMENT_LOCAL(guid, riid).Named("riid"_lit);
SERIALISE_ELEMENT_LOCAL(pHeap, ((WrappedID3D12Heap1 *)*ppvHeap)->GetResourceID())
SERIALISE_ELEMENT_LOCAL(pHeap, ((WrappedID3D12Heap *)*ppvHeap)->GetResourceID())
.TypedAs("ID3D12Heap *"_lit);
SERIALISE_CHECK_READ_ERRORS();
@@ -436,7 +454,7 @@ bool WrappedID3D12Device::Serialise_CreateHeap1(SerialiserType &ser, const D3D12
}
else
{
ret = new WrappedID3D12Heap1(ret, this);
ret = new WrappedID3D12Heap(ret, this);
GetResourceManager()->AddLiveResource(pHeap, ret);
}
@@ -471,7 +489,7 @@ HRESULT WrappedID3D12Device::CreateHeap1(const D3D12_HEAP_DESC *pDesc,
if(SUCCEEDED(ret))
{
WrappedID3D12Heap1 *wrapped = new WrappedID3D12Heap1(real, this);
WrappedID3D12Heap *wrapped = new WrappedID3D12Heap(real, this);
if(IsCaptureMode(m_State))
{
@@ -522,7 +540,7 @@ D3D12_RESOURCE_ALLOCATION_INFO WrappedID3D12Device::GetResourceAllocationInfo1(
ID3D12Fence *WrappedID3D12Device::CreateProtectedSessionFence(ID3D12Fence *real)
{
WrappedID3D12Fence1 *wrapped = NULL;
WrappedID3D12Fence *wrapped = NULL;
{
SCOPED_LOCK(m_WrapDeduplicateLock);
@@ -535,7 +553,7 @@ ID3D12Fence *WrappedID3D12Device::CreateProtectedSessionFence(ID3D12Fence *real)
// we basically treat this kind of like CreateFence and serialise it as such, and guess at the
// parameters to CreateFence.
wrapped = new WrappedID3D12Fence1(real, this);
wrapped = new WrappedID3D12Fence(real, this);
}
if(IsCaptureMode(m_State))
@@ -0,0 +1,33 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2020 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#include "d3d12_device.h"
HRESULT STDMETHODCALLTYPE WrappedID3D12Device::SetBackgroundProcessingMode(
D3D12_BACKGROUND_PROCESSING_MODE Mode, D3D12_MEASUREMENTS_ACTION MeasurementsAction,
_In_opt_ HANDLE hEventToSignalUponCompletion, _Out_opt_ BOOL *pbFurtherMeasurementsDesired)
{
return m_pDevice6->SetBackgroundProcessingMode(
Mode, MeasurementsAction, hEventToSignalUponCompletion, pbFurtherMeasurementsDesired);
}
@@ -0,0 +1,66 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2020 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#include "d3d12_device.h"
#include "d3d12_resources.h"
HRESULT STDMETHODCALLTYPE WrappedID3D12Device::AddToStateObject(
const D3D12_STATE_OBJECT_DESC *pAddition, ID3D12StateObject *pStateObjectToGrowFrom,
REFIID riid, _COM_Outptr_ void **ppNewStateObject)
{
RDCERR("AddToStateObject called but raytracing is not supported!");
return E_INVALIDARG;
}
HRESULT WrappedID3D12Device::CreateProtectedResourceSession1(
_In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc, _In_ REFIID riid,
_COM_Outptr_ void **ppSession)
{
if(ppSession == NULL)
return m_pDevice7->CreateProtectedResourceSession1(pDesc, riid, NULL);
if(riid != __uuidof(ID3D12ProtectedResourceSession) &&
riid != __uuidof(ID3D12ProtectedResourceSession1) && riid != __uuidof(ID3D12ProtectedSession))
return E_NOINTERFACE;
ID3D12ProtectedResourceSession *real = NULL;
HRESULT ret;
SERIALISE_TIME_CALL(ret = m_pDevice7->CreateProtectedResourceSession1(
pDesc, __uuidof(ID3D12ProtectedResourceSession), (void **)&real));
if(SUCCEEDED(ret))
{
WrappedID3D12ProtectedResourceSession *wrapped =
new WrappedID3D12ProtectedResourceSession(real, this);
if(riid == __uuidof(ID3D12ProtectedResourceSession))
*ppSession = (ID3D12ProtectedResourceSession *)wrapped;
else if(riid == __uuidof(ID3D12ProtectedResourceSession1))
*ppSession = (ID3D12ProtectedResourceSession1 *)wrapped;
else if(riid == __uuidof(ID3D12ProtectedSession))
*ppSession = (ID3D12ProtectedSession *)wrapped;
}
return ret;
}
@@ -0,0 +1,507 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2020 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#include "d3d12_device.h"
#include "driver/dxgi/dxgi_common.h"
#include "d3d12_resources.h"
D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE WrappedID3D12Device::GetResourceAllocationInfo2(
UINT visibleMask, UINT numResourceDescs,
_In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs,
_Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1)
{
return m_pDevice8->GetResourceAllocationInfo2(visibleMask, numResourceDescs, pResourceDescs,
pResourceAllocationInfo1);
}
template <typename SerialiserType>
bool WrappedID3D12Device::Serialise_CreateCommittedResource2(
SerialiserType &ser, const D3D12_HEAP_PROPERTIES *pHeapProperties, D3D12_HEAP_FLAGS HeapFlags,
const D3D12_RESOURCE_DESC1 *pDesc, D3D12_RESOURCE_STATES InitialResourceState,
const D3D12_CLEAR_VALUE *pOptimizedClearValue,
ID3D12ProtectedResourceSession *pProtectedSession, REFIID riidResource, void **ppvResource)
{
SERIALISE_ELEMENT_LOCAL(props, *pHeapProperties).Named("pHeapProperties"_lit);
SERIALISE_ELEMENT(HeapFlags);
SERIALISE_ELEMENT_LOCAL(desc, *pDesc).Named("pDesc"_lit);
SERIALISE_ELEMENT(InitialResourceState);
SERIALISE_ELEMENT_OPT(pOptimizedClearValue);
// placeholder for future use if we properly capture & replay protected sessions
SERIALISE_ELEMENT_LOCAL(ProtectedSession, ResourceId()).Named("pProtectedSession"_lit);
SERIALISE_ELEMENT_LOCAL(guid, riidResource).Named("riidResource"_lit);
SERIALISE_ELEMENT_LOCAL(pResource, ((WrappedID3D12Resource *)*ppvResource)->GetResourceID())
.TypedAs("ID3D12Resource *"_lit);
SERIALISE_ELEMENT_LOCAL(gpuAddress,
((WrappedID3D12Resource *)*ppvResource)->GetGPUVirtualAddressIfBuffer())
.Hidden();
SERIALISE_CHECK_READ_ERRORS();
if(IsReplayingAndReading())
{
if(props.Type == D3D12_HEAP_TYPE_UPLOAD && desc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
{
// place large resources in local memory so that initial contents and maps can
// be cached and copied on the GPU instead of memcpy'd from the CPU every time.
// smaller resources it's better to just leave them as upload and map into them
if(desc.Width >= 1024 * 1024)
{
RDCLOG("Remapping committed resource %s from upload to default for efficient replay",
ToStr(pResource).c_str());
props.Type = D3D12_HEAP_TYPE_DEFAULT;
m_UploadResourceIds.insert(pResource);
}
}
APIProps.YUVTextures |= IsYUVFormat(desc.Format);
// always allow SRVs on replay so we can inspect resources
desc.Flags &= ~D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE;
if(desc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
{
GPUAddressRange range;
range.start = gpuAddress;
range.end = gpuAddress + desc.Width;
range.id = pResource;
m_GPUAddresses.AddTo(range);
}
ID3D12Resource *ret = NULL;
HRESULT hr = E_NOINTERFACE;
if(m_pDevice8)
hr = m_pDevice8->CreateCommittedResource2(&props, HeapFlags, &desc, InitialResourceState,
pOptimizedClearValue, NULL, guid, (void **)&ret);
else
RDCERR("Replaying a without D3D12.8 available");
if(FAILED(hr))
{
RDCERR("Failed on resource serialise-creation, HRESULT: %s", ToStr(hr).c_str());
return false;
}
else
{
SetObjName(ret, StringFormat::Fmt("Committed Resource %s ID %s",
ToStr(desc.Dimension).c_str(), ToStr(pResource).c_str()));
ret = new WrappedID3D12Resource(ret, this);
GetResourceManager()->AddLiveResource(pResource, ret);
SubresourceStateVector &states = m_ResourceStates[GetResID(ret)];
// D3D12_RESOURCE_DESC is the same as the start of D3D12_RESOURCE_DESC1
D3D12_RESOURCE_DESC desc0;
memcpy(&desc0, &desc, sizeof(desc0));
states.fill(GetNumSubresources(m_pDevice, &desc0), InitialResourceState);
ResourceType type = ResourceType::Texture;
const char *prefix = "Texture";
if(desc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
{
type = ResourceType::Buffer;
prefix = "Buffer";
}
else if(desc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE1D)
{
prefix = desc.DepthOrArraySize > 1 ? "1D TextureArray" : "1D Texture";
if(desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET)
prefix = "1D Render Target";
else if(desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)
prefix = "1D Depth Target";
}
else if(desc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE2D)
{
prefix = desc.DepthOrArraySize > 1 ? "2D TextureArray" : "2D Texture";
if(desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET)
prefix = "2D Render Target";
else if(desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)
prefix = "2D Depth Target";
}
else if(desc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D)
{
prefix = "3D Texture";
if(desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET)
prefix = "3D Render Target";
else if(desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)
prefix = "3D Depth Target";
}
AddResource(pResource, type, prefix);
}
}
return true;
}
HRESULT WrappedID3D12Device::CreateCommittedResource2(
const D3D12_HEAP_PROPERTIES *pHeapProperties, D3D12_HEAP_FLAGS HeapFlags,
const D3D12_RESOURCE_DESC1 *pDesc, D3D12_RESOURCE_STATES InitialResourceState,
const D3D12_CLEAR_VALUE *pOptimizedClearValue,
ID3D12ProtectedResourceSession *pProtectedSession, REFIID riidResource, void **ppvResource)
{
if(ppvResource == NULL)
return m_pDevice8->CreateCommittedResource2(pHeapProperties, HeapFlags, pDesc,
InitialResourceState, pOptimizedClearValue,
Unwrap(pProtectedSession), riidResource, NULL);
if(riidResource != __uuidof(ID3D12Resource) && riidResource != __uuidof(ID3D12Resource1) &&
riidResource != __uuidof(ID3D12Resource2))
return E_NOINTERFACE;
void *realptr = NULL;
HRESULT ret;
SERIALISE_TIME_CALL(ret = m_pDevice8->CreateCommittedResource2(
pHeapProperties, HeapFlags, pDesc, InitialResourceState,
pOptimizedClearValue, Unwrap(pProtectedSession), riidResource, &realptr));
ID3D12Resource *real = NULL;
if(riidResource == __uuidof(ID3D12Resource))
real = (ID3D12Resource *)realptr;
else if(riidResource == __uuidof(ID3D12Resource1))
real = (ID3D12Resource1 *)realptr;
else if(riidResource == __uuidof(ID3D12Resource2))
real = (ID3D12Resource2 *)realptr;
if(SUCCEEDED(ret))
{
WrappedID3D12Resource *wrapped = new WrappedID3D12Resource(real, this);
if(IsCaptureMode(m_State))
{
CACHE_THREAD_SERIALISER();
SCOPED_SERIALISE_CHUNK(D3D12Chunk::Device_CreateCommittedResource2);
Serialise_CreateCommittedResource2(ser, pHeapProperties, HeapFlags, pDesc,
InitialResourceState, pOptimizedClearValue,
pProtectedSession, riidResource, (void **)&wrapped);
D3D12ResourceRecord *record = GetResourceManager()->AddResourceRecord(wrapped->GetResourceID());
record->type = Resource_Resource;
record->Length = 0;
wrapped->SetResourceRecord(record);
// D3D12_RESOURCE_DESC is the same as the start of D3D12_RESOURCE_DESC1
D3D12_RESOURCE_DESC desc0;
memcpy(&desc0, pDesc, sizeof(desc0));
record->m_MapsCount = GetNumSubresources(this, &desc0);
record->m_Maps = new D3D12ResourceRecord::MapData[record->m_MapsCount];
record->AddChunk(scope.Get());
GetResourceManager()->MarkDirtyResource(wrapped->GetResourceID());
}
else
{
GetResourceManager()->AddLiveResource(wrapped->GetResourceID(), wrapped);
}
{
SCOPED_LOCK(m_ResourceStatesLock);
SubresourceStateVector &states = m_ResourceStates[wrapped->GetResourceID()];
// D3D12_RESOURCE_DESC is the same as the start of D3D12_RESOURCE_DESC1
D3D12_RESOURCE_DESC desc0;
memcpy(&desc0, pDesc, sizeof(desc0));
states.fill(GetNumSubresources(m_pDevice, &desc0), InitialResourceState);
}
if(riidResource == __uuidof(ID3D12Resource))
*ppvResource = (ID3D12Resource *)wrapped;
else if(riidResource == __uuidof(ID3D12Resource1))
*ppvResource = (ID3D12Resource1 *)wrapped;
else if(riidResource == __uuidof(ID3D12Resource2))
*ppvResource = (ID3D12Resource2 *)wrapped;
// while actively capturing we keep all buffers around to prevent the address lookup from
// losing addresses we might need (or the manageable but annoying problem of an address being
// re-used)
{
SCOPED_READLOCK(m_CapTransitionLock);
if(IsActiveCapturing(m_State))
{
wrapped->AddRef();
m_RefBuffers.push_back(wrapped);
}
}
}
return ret;
}
template <typename SerialiserType>
bool WrappedID3D12Device::Serialise_CreatePlacedResource1(
SerialiserType &ser, ID3D12Heap *pHeap, UINT64 HeapOffset, const D3D12_RESOURCE_DESC1 *pDesc,
D3D12_RESOURCE_STATES InitialState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, REFIID riid,
void **ppvResource)
{
SERIALISE_ELEMENT(pHeap);
SERIALISE_ELEMENT(HeapOffset);
SERIALISE_ELEMENT_LOCAL(Descriptor, *pDesc).Named("pDesc"_lit);
SERIALISE_ELEMENT(InitialState);
SERIALISE_ELEMENT_OPT(pOptimizedClearValue);
SERIALISE_ELEMENT_LOCAL(guid, riid).Named("riid"_lit);
SERIALISE_ELEMENT_LOCAL(pResource, ((WrappedID3D12Resource *)*ppvResource)->GetResourceID())
.TypedAs("ID3D12Resource *"_lit);
SERIALISE_ELEMENT_LOCAL(gpuAddress,
((WrappedID3D12Resource *)*ppvResource)->GetGPUVirtualAddressIfBuffer())
.Hidden();
SERIALISE_CHECK_READ_ERRORS();
if(IsReplayingAndReading())
{
if(Descriptor.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
{
GPUAddressRange range;
range.start = gpuAddress;
range.end = gpuAddress + Descriptor.Width;
range.id = pResource;
m_GPUAddresses.AddTo(range);
}
APIProps.YUVTextures |= IsYUVFormat(Descriptor.Format);
// always allow SRVs on replay so we can inspect resources
Descriptor.Flags &= ~D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE;
D3D12_HEAP_DESC heapDesc = pHeap->GetDesc();
// if the heap was from OpenExistingHeap* then we will have removed the shared flags from it as
// it's CPU-visible and impossible to share.
// That means any resources placed to it would have had this flag that we then need to remove as
// well.
if((heapDesc.Flags & D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER) == 0)
Descriptor.Flags &= ~D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER;
ID3D12Resource *ret = NULL;
HRESULT hr = E_NOINTERFACE;
if(m_pDevice8)
hr = m_pDevice8->CreatePlacedResource1(Unwrap(pHeap), HeapOffset, &Descriptor, InitialState,
pOptimizedClearValue, guid, (void **)&ret);
else
RDCERR("Replaying a without D3D12.8 available");
if(FAILED(hr))
{
RDCERR("Failed on resource serialise-creation, HRESULT: %s", ToStr(hr).c_str());
return false;
}
else
{
SetObjName(ret, StringFormat::Fmt("Placed Resource %s %s", ToStr(Descriptor.Dimension).c_str(),
ToStr(pResource).c_str()));
ret = new WrappedID3D12Resource(ret, this);
GetResourceManager()->AddLiveResource(pResource, ret);
// D3D12_RESOURCE_DESC is the same as the start of D3D12_RESOURCE_DESC1
D3D12_RESOURCE_DESC desc0;
memcpy(&desc0, &Descriptor, sizeof(desc0));
SubresourceStateVector &states = m_ResourceStates[GetResID(ret)];
states.fill(GetNumSubresources(m_pDevice, &desc0), InitialState);
}
ResourceType type = ResourceType::Texture;
const char *prefix = "Texture";
if(Descriptor.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
{
type = ResourceType::Buffer;
prefix = "Buffer";
}
else if(Descriptor.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE1D)
{
prefix = Descriptor.DepthOrArraySize > 1 ? "1D TextureArray" : "1D Texture";
if(Descriptor.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET)
prefix = "1D Render Target";
else if(Descriptor.Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)
prefix = "1D Depth Target";
}
else if(Descriptor.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE2D)
{
prefix = Descriptor.DepthOrArraySize > 1 ? "2D TextureArray" : "2D Texture";
if(Descriptor.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET)
prefix = "2D Render Target";
else if(Descriptor.Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)
prefix = "2D Depth Target";
}
else if(Descriptor.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D)
{
prefix = "3D Texture";
if(Descriptor.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET)
prefix = "3D Render Target";
else if(Descriptor.Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)
prefix = "3D Depth Target";
}
AddResource(pResource, type, prefix);
DerivedResource(pHeap, pResource);
}
return true;
}
HRESULT WrappedID3D12Device::CreatePlacedResource1(ID3D12Heap *pHeap, UINT64 HeapOffset,
const D3D12_RESOURCE_DESC1 *pDesc,
D3D12_RESOURCE_STATES InitialState,
const D3D12_CLEAR_VALUE *pOptimizedClearValue,
REFIID riid, void **ppvResource)
{
if(ppvResource == NULL)
return m_pDevice8->CreatePlacedResource1(Unwrap(pHeap), HeapOffset, pDesc, InitialState,
pOptimizedClearValue, riid, NULL);
if(riid != __uuidof(ID3D12Resource))
return E_NOINTERFACE;
const D3D12_RESOURCE_DESC1 *pCreateDesc = pDesc;
D3D12_RESOURCE_DESC1 localDesc;
if(pDesc && pDesc->Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE2D && pDesc->SampleDesc.Count > 1)
{
localDesc = *pDesc;
// need to be able to create SRVs of MSAA textures to copy out their contents
localDesc.Flags &= ~D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE;
pCreateDesc = &localDesc;
}
ID3D12Resource *real = NULL;
HRESULT ret;
SERIALISE_TIME_CALL(ret = m_pDevice8->CreatePlacedResource1(Unwrap(pHeap), HeapOffset, pCreateDesc,
InitialState, pOptimizedClearValue,
riid, (void **)&real));
if(SUCCEEDED(ret))
{
WrappedID3D12Resource *wrapped = new WrappedID3D12Resource(real, this);
if(IsCaptureMode(m_State))
{
CACHE_THREAD_SERIALISER();
SCOPED_SERIALISE_CHUNK(D3D12Chunk::Device_CreatePlacedResource1);
Serialise_CreatePlacedResource1(ser, pHeap, HeapOffset, pDesc, InitialState,
pOptimizedClearValue, riid, (void **)&wrapped);
D3D12ResourceRecord *record = GetResourceManager()->AddResourceRecord(wrapped->GetResourceID());
record->type = Resource_Resource;
record->Length = 0;
wrapped->SetResourceRecord(record);
// D3D12_RESOURCE_DESC is the same as the start of D3D12_RESOURCE_DESC1
D3D12_RESOURCE_DESC desc0;
memcpy(&desc0, pDesc, sizeof(desc0));
record->m_MapsCount = GetNumSubresources(this, &desc0);
record->m_Maps = new D3D12ResourceRecord::MapData[record->m_MapsCount];
RDCASSERT(pHeap);
record->AddParent(GetRecord(pHeap));
record->AddChunk(scope.Get());
GetResourceManager()->MarkDirtyResource(wrapped->GetResourceID());
}
else
{
GetResourceManager()->AddLiveResource(wrapped->GetResourceID(), wrapped);
}
{
SCOPED_LOCK(m_ResourceStatesLock);
SubresourceStateVector &states = m_ResourceStates[wrapped->GetResourceID()];
// D3D12_RESOURCE_DESC is the same as the start of D3D12_RESOURCE_DESC1
D3D12_RESOURCE_DESC desc0;
memcpy(&desc0, pDesc, sizeof(desc0));
states.fill(GetNumSubresources(m_pDevice, &desc0), InitialState);
}
if(riid == __uuidof(ID3D12Resource))
*ppvResource = (ID3D12Resource *)wrapped;
else if(riid == __uuidof(ID3D12Resource1))
*ppvResource = (ID3D12Resource1 *)wrapped;
else if(riid == __uuidof(ID3D12Resource2))
*ppvResource = (ID3D12Resource2 *)wrapped;
// while actively capturing we keep all buffers around to prevent the address lookup from
// losing addresses we might need (or the manageable but annoying problem of an address being
// re-used)
{
SCOPED_READLOCK(m_CapTransitionLock);
if(IsActiveCapturing(m_State))
{
wrapped->AddRef();
m_RefBuffers.push_back(wrapped);
}
}
}
return ret;
}
void STDMETHODCALLTYPE WrappedID3D12Device::CreateSamplerFeedbackUnorderedAccessView(
_In_opt_ ID3D12Resource *pTargetedResource, _In_opt_ ID3D12Resource *pFeedbackResource,
_In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor)
{
RDCERR("CreateSamplerFeedbackUnorderedAccessView called but sampler feedback is not supported!");
}
void STDMETHODCALLTYPE WrappedID3D12Device::GetCopyableFootprints1(
_In_ const D3D12_RESOURCE_DESC1 *pResourceDesc,
_In_range_(0, D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
_In_range_(0, D3D12_REQ_SUBRESOURCES - FirstSubresource) UINT NumSubresources, UINT64 BaseOffset,
_Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts,
_Out_writes_opt_(NumSubresources) UINT *pNumRows,
_Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, _Out_opt_ UINT64 *pTotalBytes)
{
return m_pDevice8->GetCopyableFootprints1(pResourceDesc, FirstSubresource, NumSubresources,
BaseOffset, pLayouts, pNumRows, pRowSizeInBytes,
pTotalBytes);
}
INSTANTIATE_FUNCTION_SERIALISED(void, WrappedID3D12Device, CreateCommittedResource2,
const D3D12_HEAP_PROPERTIES *pHeapProperties,
D3D12_HEAP_FLAGS HeapFlags, const D3D12_RESOURCE_DESC1 *pDesc,
D3D12_RESOURCE_STATES InitialResourceState,
const D3D12_CLEAR_VALUE *pOptimizedClearValue,
ID3D12ProtectedResourceSession *pProtectedSession,
REFIID riidResource, void **ppvResource);
INSTANTIATE_FUNCTION_SERIALISED(void, WrappedID3D12Device, CreatePlacedResource1, ID3D12Heap *pHeap,
UINT64 HeapOffset, const D3D12_RESOURCE_DESC1 *pDesc,
D3D12_RESOURCE_STATES InitialState,
const D3D12_CLEAR_VALUE *pOptimizedClearValue, REFIID riid,
void **ppvResource);
+16 -1
View File
@@ -262,7 +262,8 @@ private:
if(riid != __uuidof(ID3D12Device) && riid != __uuidof(ID3D12Device1) &&
riid != __uuidof(ID3D12Device2) && riid != __uuidof(ID3D12Device3) &&
riid != __uuidof(ID3D12Device4) && riid != __uuidof(ID3D12Device5) &&
riid != __uuidof(ID3D12Device6))
riid != __uuidof(ID3D12Device6) && riid != __uuidof(ID3D12Device7) &&
riid != __uuidof(ID3D12Device8))
{
RDCERR("Unsupported UUID %s for D3D12CreateDevice", ToStr(riid).c_str());
return E_NOINTERFACE;
@@ -342,6 +343,16 @@ private:
ID3D12Device6 *dev6 = (ID3D12Device6 *)*ppDevice;
dev = (ID3D12Device *)dev6;
}
else if(riid == __uuidof(ID3D12Device7))
{
ID3D12Device7 *dev7 = (ID3D12Device7 *)*ppDevice;
dev = (ID3D12Device *)dev7;
}
else if(riid == __uuidof(ID3D12Device8))
{
ID3D12Device8 *dev8 = (ID3D12Device8 *)*ppDevice;
dev = (ID3D12Device *)dev8;
}
WrappedID3D12Device *wrap = WrappedID3D12Device::Create(dev, params, EnableDebugLayer);
@@ -361,6 +372,10 @@ private:
*ppDevice = (ID3D12Device5 *)wrap;
else if(riid == __uuidof(ID3D12Device6))
*ppDevice = (ID3D12Device6 *)wrap;
else if(riid == __uuidof(ID3D12Device7))
*ppDevice = (ID3D12Device7 *)wrap;
else if(riid == __uuidof(ID3D12Device8))
*ppDevice = (ID3D12Device8 *)wrap;
}
}
else if(SUCCEEDED(ret))
+1 -1
View File
@@ -50,7 +50,7 @@ bool D3D12ResourceManager::Prepare_InitialState(ID3D12DeviceChild *res)
}
else if(type == Resource_Resource)
{
WrappedID3D12Resource1 *r = (WrappedID3D12Resource1 *)res;
WrappedID3D12Resource *r = (WrappedID3D12Resource *)res;
ID3D12Pageable *pageable = r;
bool nonresident = false;
+1 -1
View File
@@ -496,7 +496,7 @@ void D3D12Descriptor::GetRefIDs(ResourceId &id, ResourceId &id2, FrameRefType &r
// nothing to do - no resource here
break;
case D3D12DescriptorType::CBV:
id = WrappedID3D12Resource1::GetResIDFromAddr(data.nonsamp.cbv.BufferLocation);
id = WrappedID3D12Resource::GetResIDFromAddr(data.nonsamp.cbv.BufferLocation);
break;
case D3D12DescriptorType::SRV: id = data.nonsamp.resource; break;
case D3D12DescriptorType::UAV: id2 = data.nonsamp.counterResource; DELIBERATE_FALLTHROUGH();
+1 -1
View File
@@ -441,7 +441,7 @@ struct CmdListRecordingInfo
rdcarray<D3D12ResourceRecord *> bundles;
};
class WrappedID3D12Resource1;
class WrappedID3D12Resource;
struct GPUAddressRange
{
+4 -4
View File
@@ -374,7 +374,7 @@ ResourceId D3D12Replay::RenderOverlay(ResourceId texid, FloatVector clearCol, De
if(m_Overlay.Texture)
currentOverlayDesc = m_Overlay.Texture->GetDesc();
WrappedID3D12Resource1 *wrappedCustomRenderTex = (WrappedID3D12Resource1 *)m_Overlay.Texture;
WrappedID3D12Resource *wrappedCustomRenderTex = (WrappedID3D12Resource *)m_Overlay.Texture;
// need to recreate backing custom render tex
if(overlayTexDesc.Width != currentOverlayDesc.Width ||
@@ -397,7 +397,7 @@ ResourceId D3D12Replay::RenderOverlay(ResourceId texid, FloatVector clearCol, De
RDCERR("Failed to create custom render tex HRESULT: %s", ToStr(hr).c_str());
return ResourceId();
}
wrappedCustomRenderTex = (WrappedID3D12Resource1 *)customRenderTex;
wrappedCustomRenderTex = (WrappedID3D12Resource *)customRenderTex;
customRenderTex->SetName(L"customRenderTex");
@@ -1154,7 +1154,7 @@ ResourceId D3D12Replay::RenderOverlay(ResourceId texid, FloatVector clearCol, De
vertexData.SpriteSize = Vec2f();
D3D12RenderState::SignatureElement vertexElem(eRootCBV, ResourceId(), 0);
WrappedID3D12Resource1::GetResIDFromAddr(
WrappedID3D12Resource::GetResIDFromAddr(
GetDebugManager()->UploadConstants(&vertexData, sizeof(vertexData)), vertexElem.id,
vertexElem.offset);
@@ -1168,7 +1168,7 @@ ResourceId D3D12Replay::RenderOverlay(ResourceId texid, FloatVector clearCol, De
viewport = Vec4f(rs.views[0].Width, rs.views[0].Height);
D3D12RenderState::SignatureElement viewportElem(eRootCBV, ResourceId(), 0);
WrappedID3D12Resource1::GetResIDFromAddr(
WrappedID3D12Resource::GetResIDFromAddr(
GetDebugManager()->UploadConstants(&viewport, sizeof(viewport)), viewportElem.id,
viewportElem.offset);
+3 -3
View File
@@ -1196,8 +1196,8 @@ void D3D12Replay::FillRootElements(const D3D12RenderState::RootSignature &rootSi
if(desc)
{
const D3D12_CONSTANT_BUFFER_VIEW_DESC &cbv = desc->GetCBV();
WrappedID3D12Resource1::GetResIDFromAddr(cbv.BufferLocation, cb.resourceId,
cb.byteOffset);
WrappedID3D12Resource::GetResIDFromAddr(cbv.BufferLocation, cb.resourceId,
cb.byteOffset);
cb.resourceId = rm->GetOriginalID(cb.resourceId);
cb.byteSize = cbv.SizeInBytes;
@@ -2703,7 +2703,7 @@ void D3D12Replay::GetBufferData(ResourceId buff, uint64_t offset, uint64_t lengt
return;
}
WrappedID3D12Resource1 *buffer = it->second;
WrappedID3D12Resource *buffer = it->second;
if(buffer->GetDesc().Dimension != D3D12_RESOURCE_DIMENSION_BUFFER)
{
+19 -20
View File
@@ -27,7 +27,7 @@
#include "d3d12_command_list.h"
#include "d3d12_command_queue.h"
GPUAddressRangeTracker WrappedID3D12Resource1::m_Addresses;
GPUAddressRangeTracker WrappedID3D12Resource::m_Addresses;
std::map<WrappedID3D12PipelineState::DXBCKey, WrappedID3D12Shader *> WrappedID3D12Shader::m_Shaders;
bool WrappedID3D12Shader::m_InternalResources = false;
@@ -133,7 +133,7 @@ ID3D12DeviceChild *Unwrap(ID3D12DeviceChild *ptr)
return (ID3D12DeviceChild *)Unwrap((ID3D12Object *)ptr);
}
WrappedID3D12Resource1::~WrappedID3D12Resource1()
WrappedID3D12Resource::~WrappedID3D12Resource()
{
// perform an implicit unmap on release
if(GetResourceRecord())
@@ -174,7 +174,7 @@ WrappedID3D12Resource1::~WrappedID3D12Resource1()
m_ID = ResourceId();
}
byte *WrappedID3D12Resource1::GetMap(UINT Subresource)
byte *WrappedID3D12Resource::GetMap(UINT Subresource)
{
SCOPED_LOCK(GetResourceRecord()->m_MapLock);
@@ -187,7 +187,7 @@ byte *WrappedID3D12Resource1::GetMap(UINT Subresource)
return NULL;
}
byte *WrappedID3D12Resource1::GetShadow(UINT Subresource)
byte *WrappedID3D12Resource::GetShadow(UINT Subresource)
{
SCOPED_LOCK(GetResourceRecord()->m_MapLock);
@@ -196,7 +196,7 @@ byte *WrappedID3D12Resource1::GetShadow(UINT Subresource)
return map[Subresource].shadowPtr;
}
void WrappedID3D12Resource1::AllocShadow(UINT Subresource, size_t size)
void WrappedID3D12Resource::AllocShadow(UINT Subresource, size_t size)
{
SCOPED_LOCK(GetResourceRecord()->m_MapLock);
@@ -206,7 +206,7 @@ void WrappedID3D12Resource1::AllocShadow(UINT Subresource, size_t size)
map[Subresource].shadowPtr = AllocAlignedBuffer(size);
}
void WrappedID3D12Resource1::FreeShadow()
void WrappedID3D12Resource::FreeShadow()
{
SCOPED_LOCK(GetResourceRecord()->m_MapLock);
@@ -220,23 +220,23 @@ void WrappedID3D12Resource1::FreeShadow()
}
}
void WrappedID3D12Resource1::LockMaps()
void WrappedID3D12Resource::LockMaps()
{
GetResourceRecord()->m_MapLock.Lock();
}
void WrappedID3D12Resource1::UnlockMaps()
void WrappedID3D12Resource::UnlockMaps()
{
GetResourceRecord()->m_MapLock.Unlock();
}
WriteSerialiser &WrappedID3D12Resource1::GetThreadSerialiser()
WriteSerialiser &WrappedID3D12Resource::GetThreadSerialiser()
{
return m_pDevice->GetThreadSerialiser();
}
HRESULT STDMETHODCALLTYPE WrappedID3D12Resource1::Map(UINT Subresource,
const D3D12_RANGE *pReadRange, void **ppData)
HRESULT STDMETHODCALLTYPE WrappedID3D12Resource::Map(UINT Subresource,
const D3D12_RANGE *pReadRange, void **ppData)
{
// don't care about maps without returned pointers - we'll just intercept the WriteToSubresource
// calls
@@ -267,8 +267,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D12Resource1::Map(UINT Subresource,
return hr;
}
void STDMETHODCALLTYPE WrappedID3D12Resource1::Unmap(UINT Subresource,
const D3D12_RANGE *pWrittenRange)
void STDMETHODCALLTYPE WrappedID3D12Resource::Unmap(UINT Subresource, const D3D12_RANGE *pWrittenRange)
{
if(GetResourceRecord())
{
@@ -297,11 +296,11 @@ void STDMETHODCALLTYPE WrappedID3D12Resource1::Unmap(UINT Subresource,
return m_pReal->Unmap(Subresource, pWrittenRange);
}
HRESULT STDMETHODCALLTYPE WrappedID3D12Resource1::WriteToSubresource(UINT DstSubresource,
const D3D12_BOX *pDstBox,
const void *pSrcData,
UINT SrcRowPitch,
UINT SrcDepthPitch)
HRESULT STDMETHODCALLTYPE WrappedID3D12Resource::WriteToSubresource(UINT DstSubresource,
const D3D12_BOX *pDstBox,
const void *pSrcData,
UINT SrcRowPitch,
UINT SrcDepthPitch)
{
HRESULT ret;
@@ -317,7 +316,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D12Resource1::WriteToSubresource(UINT DstSub
return ret;
}
void WrappedID3D12Resource1::RefBuffers(D3D12ResourceManager *rm)
void WrappedID3D12Resource::RefBuffers(D3D12ResourceManager *rm)
{
// only buffers go into m_Addresses
SCOPED_READLOCK(m_Addresses.addressLock);
@@ -325,7 +324,7 @@ void WrappedID3D12Resource1::RefBuffers(D3D12ResourceManager *rm)
rm->MarkResourceFrameReferenced(m_Addresses.addresses[i].id, eFrameRef_Read);
}
rdcarray<ID3D12Resource *> WrappedID3D12Resource1::AddRefBuffersBeforeCapture(D3D12ResourceManager *rm)
rdcarray<ID3D12Resource *> WrappedID3D12Resource::AddRefBuffersBeforeCapture(D3D12ResourceManager *rm)
{
rdcarray<ID3D12Resource *> ret;
+59 -24
View File
@@ -438,21 +438,21 @@ public:
}
};
class WrappedID3D12Fence1 : public WrappedDeviceChild12<ID3D12Fence, ID3D12Fence1>
class WrappedID3D12Fence : public WrappedDeviceChild12<ID3D12Fence, ID3D12Fence1>
{
public:
ALLOCATE_WITH_WRAPPED_POOL(WrappedID3D12Fence1);
ALLOCATE_WITH_WRAPPED_POOL(WrappedID3D12Fence);
enum
{
TypeEnum = Resource_Fence,
};
WrappedID3D12Fence1(ID3D12Fence *real, WrappedID3D12Device *device)
WrappedID3D12Fence(ID3D12Fence *real, WrappedID3D12Device *device)
: WrappedDeviceChild12(real, device)
{
}
virtual ~WrappedID3D12Fence1() { Shutdown(); }
virtual ~WrappedID3D12Fence() { Shutdown(); }
//////////////////////////////
// implement ID3D12Fence
@@ -481,7 +481,7 @@ public:
};
class WrappedID3D12ProtectedResourceSession
: public WrappedDeviceChild12<ID3D12ProtectedResourceSession>
: public WrappedDeviceChild12<ID3D12ProtectedResourceSession, ID3D12ProtectedResourceSession1>
{
public:
ALLOCATE_WITH_WRAPPED_POOL(WrappedID3D12ProtectedResourceSession);
@@ -535,23 +535,39 @@ public:
{
return m_pReal->GetDesc();
}
//////////////////////////////
// implement ID3D12ProtectedResourceSession1
virtual D3D12_PROTECTED_RESOURCE_SESSION_DESC1 STDMETHODCALLTYPE GetDesc1()
{
ID3D12ProtectedResourceSession1 *real1 = NULL;
m_pReal->QueryInterface(__uuidof(ID3D12ProtectedResourceSession1), (void **)&real1);
if(!real1)
return {};
D3D12_PROTECTED_RESOURCE_SESSION_DESC1 ret = real1->GetDesc1();
SAFE_RELEASE(real1);
return ret;
}
};
class WrappedID3D12Heap1 : public WrappedDeviceChild12<ID3D12Heap, ID3D12Heap1>
class WrappedID3D12Heap : public WrappedDeviceChild12<ID3D12Heap, ID3D12Heap1>
{
public:
ALLOCATE_WITH_WRAPPED_POOL(WrappedID3D12Heap1);
ALLOCATE_WITH_WRAPPED_POOL(WrappedID3D12Heap);
enum
{
TypeEnum = Resource_Heap,
};
WrappedID3D12Heap1(ID3D12Heap *real, WrappedID3D12Device *device)
WrappedID3D12Heap(ID3D12Heap *real, WrappedID3D12Device *device)
: WrappedDeviceChild12(real, device)
{
}
virtual ~WrappedID3D12Heap1() { Shutdown(); }
virtual ~WrappedID3D12Heap() { Shutdown(); }
//////////////////////////////
// implement ID3D12Heap
virtual D3D12_HEAP_DESC STDMETHODCALLTYPE GetDesc() { return m_pReal->GetDesc(); }
@@ -879,14 +895,15 @@ public:
virtual ~WrappedID3D12QueryHeap() { Shutdown(); }
};
class WrappedID3D12Resource1 : public WrappedDeviceChild12<ID3D12Resource, ID3D12Resource1>
class WrappedID3D12Resource
: public WrappedDeviceChild12<ID3D12Resource, ID3D12Resource1, ID3D12Resource2>
{
static GPUAddressRangeTracker m_Addresses;
WriteSerialiser &GetThreadSerialiser();
public:
ALLOCATE_WITH_WRAPPED_POOL(WrappedID3D12Resource1, false);
ALLOCATE_WITH_WRAPPED_POOL(WrappedID3D12Resource, false);
static void RefBuffers(D3D12ResourceManager *rm);
@@ -913,7 +930,7 @@ public:
TypeEnum = Resource_Resource,
};
WrappedID3D12Resource1(ID3D12Resource *real, WrappedID3D12Device *device)
WrappedID3D12Resource(ID3D12Resource *real, WrappedID3D12Device *device)
: WrappedDeviceChild12(real, device)
{
if(IsReplayMode(device->GetState()))
@@ -932,7 +949,7 @@ public:
m_Addresses.AddTo(range);
}
}
virtual ~WrappedID3D12Resource1();
virtual ~WrappedID3D12Resource();
byte *GetMap(UINT Subresource);
byte *GetShadow(UINT Subresource);
@@ -1019,6 +1036,22 @@ public:
return S_OK;
}
//////////////////////////////
// implement ID3D12Resource2
virtual D3D12_RESOURCE_DESC1 STDMETHODCALLTYPE GetDesc1(void)
{
ID3D12Resource2 *real2 = NULL;
m_pReal->QueryInterface(__uuidof(ID3D12Resource2), (void **)&real2);
if(!real2)
return {};
D3D12_RESOURCE_DESC1 ret = real2->GetDesc1();
SAFE_RELEASE(real2);
return ret;
}
};
class WrappedID3D12RootSignature : public WrappedDeviceChild12<ID3D12RootSignature>
@@ -1040,18 +1073,18 @@ public:
virtual ~WrappedID3D12RootSignature() { Shutdown(); }
};
class WrappedID3D12PipelineLibrary1 : public WrappedDeviceChild12<ID3D12PipelineLibrary1>
class WrappedID3D12PipelineLibrary : public WrappedDeviceChild12<ID3D12PipelineLibrary1>
{
public:
ALLOCATE_WITH_WRAPPED_POOL(WrappedID3D12PipelineLibrary1);
ALLOCATE_WITH_WRAPPED_POOL(WrappedID3D12PipelineLibrary);
enum
{
TypeEnum = Resource_PipelineLibrary,
};
WrappedID3D12PipelineLibrary1(WrappedID3D12Device *device) : WrappedDeviceChild12(NULL, device) {}
virtual ~WrappedID3D12PipelineLibrary1() { Shutdown(); }
WrappedID3D12PipelineLibrary(WrappedID3D12Device *device) : WrappedDeviceChild12(NULL, device) {}
virtual ~WrappedID3D12PipelineLibrary() { Shutdown(); }
virtual HRESULT STDMETHODCALLTYPE StorePipeline(_In_opt_ LPCWSTR pName,
_In_ ID3D12PipelineState *pPipeline)
{
@@ -1112,13 +1145,13 @@ public:
D3D12_TYPE_MACRO(ID3D12CommandAllocator); \
D3D12_TYPE_MACRO(ID3D12CommandSignature); \
D3D12_TYPE_MACRO(ID3D12DescriptorHeap); \
D3D12_TYPE_MACRO(ID3D12Fence1); \
D3D12_TYPE_MACRO(ID3D12Heap1); \
D3D12_TYPE_MACRO(ID3D12Fence); \
D3D12_TYPE_MACRO(ID3D12Heap); \
D3D12_TYPE_MACRO(ID3D12PipelineState); \
D3D12_TYPE_MACRO(ID3D12QueryHeap); \
D3D12_TYPE_MACRO(ID3D12Resource1); \
D3D12_TYPE_MACRO(ID3D12Resource); \
D3D12_TYPE_MACRO(ID3D12RootSignature); \
D3D12_TYPE_MACRO(ID3D12PipelineLibrary1); \
D3D12_TYPE_MACRO(ID3D12PipelineLibrary); \
D3D12_TYPE_MACRO(ID3D12ProtectedResourceSession);
// template magic voodoo to unwrap types
@@ -1151,18 +1184,20 @@ ALL_D3D12_TYPES;
// extra helpers here for '1' or '2' extended interfaces
#define D3D12_UNWRAP_EXTENDED(iface, ifaceX) \
template <> \
struct UnwrapHelper<iface> \
struct UnwrapHelper<ifaceX> \
{ \
typedef CONCAT(Wrapped, ifaceX) Outer; \
typedef CONCAT(Wrapped, iface) Outer; \
static bool IsAlloc(void *ptr) { return Outer::IsAlloc(ptr); } \
static D3D12ResourceType GetTypeEnum() { return (D3D12ResourceType)Outer::TypeEnum; } \
static Outer *FromHandle(iface *wrapped) { return (Outer *)wrapped; } \
static Outer *FromHandle(ifaceX *wrapped) { return (Outer *)wrapped; } \
};
D3D12_UNWRAP_EXTENDED(ID3D12Fence, ID3D12Fence1);
D3D12_UNWRAP_EXTENDED(ID3D12PipelineLibrary, ID3D12PipelineLibrary1);
D3D12_UNWRAP_EXTENDED(ID3D12Heap, ID3D12Heap1);
D3D12_UNWRAP_EXTENDED(ID3D12Resource, ID3D12Resource1);
D3D12_UNWRAP_EXTENDED(ID3D12Resource, ID3D12Resource2);
D3D12_UNWRAP_EXTENDED(ID3D12ProtectedResourceSession, ID3D12ProtectedResourceSession1);
D3D12ResourceType IdentifyTypeByPtr(ID3D12Object *ptr);
+26 -1
View File
@@ -299,7 +299,7 @@ void DoSerialise(SerialiserType &ser, D3D12BufferLocation &el)
UINT64 offs = 0;
if(ser.IsWriting() || ser.IsStructurising())
WrappedID3D12Resource1::GetResIDFromAddr(el.Location, buffer, offs);
WrappedID3D12Resource::GetResIDFromAddr(el.Location, buffer, offs);
if(ser.IsStructurising() && rm)
buffer = rm->GetOriginalID(buffer);
@@ -506,6 +506,30 @@ void DoSerialise(SerialiserType &ser, D3D12_RESOURCE_DESC &el)
SERIALISE_MEMBER(Flags);
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_MIP_REGION &el)
{
SERIALISE_MEMBER(Width);
SERIALISE_MEMBER(Height);
SERIALISE_MEMBER(Depth);
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_RESOURCE_DESC1 &el)
{
SERIALISE_MEMBER(Dimension);
SERIALISE_MEMBER(Alignment);
SERIALISE_MEMBER(Width);
SERIALISE_MEMBER(Height);
SERIALISE_MEMBER(DepthOrArraySize);
SERIALISE_MEMBER(MipLevels);
SERIALISE_MEMBER(Format);
SERIALISE_MEMBER(SampleDesc);
SERIALISE_MEMBER(Layout);
SERIALISE_MEMBER(Flags);
SERIALISE_MEMBER(SamplerFeedbackMipRegion);
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_COMMAND_QUEUE_DESC &el)
{
@@ -1523,6 +1547,7 @@ INSTANTIATE_SERIALISE_TYPE(D3D12Descriptor);
INSTANTIATE_SERIALISE_TYPE(D3D12_EXPANDED_PIPELINE_STATE_STREAM_DESC);
INSTANTIATE_SERIALISE_TYPE(D3D12_RESOURCE_DESC);
INSTANTIATE_SERIALISE_TYPE(D3D12_RESOURCE_DESC1);
INSTANTIATE_SERIALISE_TYPE(D3D12_COMMAND_QUEUE_DESC);
INSTANTIATE_SERIALISE_TYPE(D3D12_SHADER_BYTECODE);
INSTANTIATE_SERIALISE_TYPE(D3D12_GRAPHICS_PIPELINE_STATE_DESC);
+1 -1
View File
@@ -1730,7 +1730,7 @@ void GatherConstantBuffers(WrappedID3D12Device *pDevice, const DXBCBytecode::Pro
const D3D12_CONSTANT_BUFFER_VIEW_DESC &cbv = desc->GetCBV();
ResourceId resId;
uint64_t byteOffset = 0;
WrappedID3D12Resource1::GetResIDFromAddr(cbv.BufferLocation, resId, byteOffset);
WrappedID3D12Resource::GetResIDFromAddr(cbv.BufferLocation, resId, byteOffset);
ID3D12Resource *pCbvResource =
pDevice->GetResourceManager()->GetCurrentAs<ID3D12Resource>(resId);
cbufData.clear();
+6 -1
View File
@@ -28,7 +28,7 @@
template <>
rdcstr DoStringise(const D3D12Chunk &el)
{
RDCCOMPILE_ASSERT((uint32_t)D3D12Chunk::Max == 1110, "Chunks changed without updating names");
RDCCOMPILE_ASSERT((uint32_t)D3D12Chunk::Max == 1112, "Chunks changed without updating names");
BEGIN_ENUM_STRINGISE(D3D12Chunk)
{
@@ -198,6 +198,11 @@ rdcstr DoStringise(const D3D12Chunk &el)
STRINGISE_ENUM_CLASS_NAMED(CompatDevice_CreateSharedHeap,
"ID3D12CompatibilityDevice::CreateSharedHeap");
STRINGISE_ENUM_CLASS_NAMED(SetShaderExtUAV, "Vendor Extension: Set magic shader UAV slot");
STRINGISE_ENUM_CLASS_NAMED(Device_CreateCommittedResource2,
"ID3D12Device8::CreateCommittedResource2");
STRINGISE_ENUM_CLASS_NAMED(Device_CreatePlacedResource1,
"ID3D12Device8::CreatePlacedResource1");
STRINGISE_ENUM_CLASS_NAMED(Max, "Max Chunk");
}
END_ENUM_STRINGISE()
@@ -107,6 +107,7 @@
<ClCompile Include="d3d12_command_list3_wrap.cpp" />
<ClCompile Include="d3d12_command_list4_wrap.cpp" />
<ClCompile Include="d3d12_command_list5_wrap.cpp" />
<ClCompile Include="d3d12_command_list6_wrap.cpp" />
<ClCompile Include="d3d12_command_list_wrap.cpp" />
<ClCompile Include="d3d12_command_queue_wrap.cpp" />
<ClCompile Include="d3d12_common.cpp" />
@@ -119,6 +120,9 @@
<ClCompile Include="d3d12_device_wrap3.cpp" />
<ClCompile Include="d3d12_device_wrap4.cpp" />
<ClCompile Include="d3d12_device_wrap5.cpp" />
<ClCompile Include="d3d12_device_wrap6.cpp" />
<ClCompile Include="d3d12_device_wrap7.cpp" />
<ClCompile Include="d3d12_device_wrap8.cpp" />
<ClCompile Include="d3d12_hooks.cpp" />
<ClCompile Include="d3d12_initstate.cpp" />
<ClCompile Include="d3d12_manager.cpp" />
@@ -185,5 +185,17 @@
<ClCompile Include="d3d12_shaderdebug.cpp">
<Filter>Replay</Filter>
</ClCompile>
<ClCompile Include="d3d12_command_list6_wrap.cpp">
<Filter>Wrapped</Filter>
</ClCompile>
<ClCompile Include="d3d12_device_wrap6.cpp">
<Filter>Wrapped</Filter>
</ClCompile>
<ClCompile Include="d3d12_device_wrap7.cpp">
<Filter>Wrapped</Filter>
</ClCompile>
<ClCompile Include="d3d12_device_wrap8.cpp">
<Filter>Wrapped</Filter>
</ClCompile>
</ItemGroup>
</Project>