From 09cf2cd11ea71cf5b7b443ef4ec9f3f077aafb96 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Tue, 4 May 2021 17:42:41 +0200 Subject: [PATCH] [d3d11] Add ID3D11VideoProcessor stub --- src/d3d11/d3d11_device.cpp | 10 +++++++-- src/d3d11/d3d11_video.cpp | 45 ++++++++++++++++++++++++++++++++++++++ src/d3d11/d3d11_video.h | 30 +++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 2 deletions(-) diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index ebba24bb1..2f8a62b54 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -2436,8 +2436,14 @@ namespace dxvk { ID3D11VideoProcessorEnumerator* pEnum, UINT RateConversionIndex, ID3D11VideoProcessor** ppVideoProcessor) { - Logger::err("D3D11VideoDevice::CreateVideoProcessor: Stub"); - return E_NOTIMPL; + try { + auto enumerator = static_cast(pEnum); + *ppVideoProcessor = ref(new D3D11VideoProcessor(m_device, enumerator, RateConversionIndex)); + return S_OK; + } catch (const DxvkError& e) { + Logger::err(e.message()); + return E_FAIL; + } } diff --git a/src/d3d11/d3d11_video.cpp b/src/d3d11/d3d11_video.cpp index e523a6075..afd5aaa85 100644 --- a/src/d3d11/d3d11_video.cpp +++ b/src/d3d11/d3d11_video.cpp @@ -79,4 +79,49 @@ namespace dxvk { return E_NOTIMPL; } + + + + D3D11VideoProcessor::D3D11VideoProcessor( + D3D11Device* pDevice, + D3D11VideoProcessorEnumerator* pEnumerator, + UINT RateConversionIndex) + : D3D11DeviceChild(pDevice), + m_enumerator(pEnumerator), m_rateConversionIndex(RateConversionIndex) { + + } + + + D3D11VideoProcessor::~D3D11VideoProcessor() { + + } + + + HRESULT STDMETHODCALLTYPE D3D11VideoProcessor::QueryInterface( + REFIID riid, + void** ppvObject) { + if (riid == __uuidof(IUnknown) + || riid == __uuidof(ID3D11DeviceChild) + || riid == __uuidof(ID3D11VideoProcessor)) { + *ppvObject = ref(this); + return S_OK; + } + + Logger::warn("D3D11VideoProcessor::QueryInterface: Unknown interface query"); + Logger::warn(str::format(riid)); + return E_NOINTERFACE; + } + + + void STDMETHODCALLTYPE D3D11VideoProcessor::GetContentDesc( + D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc) { + m_enumerator->GetVideoProcessorContentDesc(pDesc); + } + + + void STDMETHODCALLTYPE D3D11VideoProcessor::GetRateConversionCaps( + D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps) { + m_enumerator->GetVideoProcessorRateConversionCaps(m_rateConversionIndex, pCaps); + } + } diff --git a/src/d3d11/d3d11_video.h b/src/d3d11/d3d11_video.h index 688d7b8dc..e4f96d918 100644 --- a/src/d3d11/d3d11_video.h +++ b/src/d3d11/d3d11_video.h @@ -47,4 +47,34 @@ namespace dxvk { }; + + + class D3D11VideoProcessor : public D3D11DeviceChild { + + public: + + D3D11VideoProcessor( + D3D11Device* pDevice, + D3D11VideoProcessorEnumerator* pEnumerator, + UINT RateConversionIndex); + + ~D3D11VideoProcessor(); + + HRESULT STDMETHODCALLTYPE QueryInterface( + REFIID riid, + void** ppvObject); + + void STDMETHODCALLTYPE GetContentDesc( + D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc); + + void STDMETHODCALLTYPE GetRateConversionCaps( + D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps); + + private: + + D3D11VideoProcessorEnumerator* m_enumerator; + uint32_t m_rateConversionIndex; + + }; + }