From 1cd8749234b61762f380fc7745a0116a088bf839 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 24 Apr 2019 19:44:12 +0200 Subject: [PATCH] [d3d11] Add stub implementation of D3D11DeviceContextExt --- src/d3d11/d3d11_context.cpp | 6 +++ src/d3d11/d3d11_context.h | 4 +- src/d3d11/d3d11_context_ext.cpp | 82 +++++++++++++++++++++++++++++++++ src/d3d11/d3d11_context_ext.h | 66 ++++++++++++++++++++++++++ src/d3d11/meson.build | 1 + 5 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 src/d3d11/d3d11_context_ext.cpp create mode 100644 src/d3d11/d3d11_context_ext.h diff --git a/src/d3d11/d3d11_context.cpp b/src/d3d11/d3d11_context.cpp index d2582bcd..cb5e3df8 100644 --- a/src/d3d11/d3d11_context.cpp +++ b/src/d3d11/d3d11_context.cpp @@ -14,6 +14,7 @@ namespace dxvk { const Rc& Device, DxvkCsChunkFlags CsFlags) : m_parent (pParent), + m_contextExt(this), m_annotation(this), m_multithread(this, false), m_device (Device), @@ -58,6 +59,11 @@ namespace dxvk { return S_OK; } + if (riid == __uuidof(ID3D11VkExtContext)) { + *ppvObject = ref(&m_contextExt); + return S_OK; + } + if (riid == __uuidof(ID3DUserDefinedAnnotation)) { *ppvObject = ref(&m_annotation); return S_OK; diff --git a/src/d3d11/d3d11_context.h b/src/d3d11/d3d11_context.h index deac4a25..6c152914 100644 --- a/src/d3d11/d3d11_context.h +++ b/src/d3d11/d3d11_context.h @@ -8,6 +8,7 @@ #include "d3d11_annotation.h" #include "d3d11_cmd.h" +#include "d3d11_context_ext.h" #include "d3d11_context_state.h" #include "d3d11_device_child.h" #include "d3d11_texture.h" @@ -17,7 +18,7 @@ namespace dxvk { class D3D11Device; class D3D11DeviceContext : public D3D11DeviceChild { - + friend class D3D11DeviceContextExt; public: D3D11DeviceContext( @@ -645,6 +646,7 @@ namespace dxvk { protected: D3D11Device* const m_parent; + D3D11DeviceContextExt m_contextExt; D3D11UserDefinedAnnotation m_annotation; D3D10Multithread m_multithread; diff --git a/src/d3d11/d3d11_context_ext.cpp b/src/d3d11/d3d11_context_ext.cpp new file mode 100644 index 00000000..41e01547 --- /dev/null +++ b/src/d3d11/d3d11_context_ext.cpp @@ -0,0 +1,82 @@ +#include "d3d11_context.h" + +namespace dxvk { + + D3D11DeviceContextExt::D3D11DeviceContextExt( + D3D11DeviceContext* pContext) + : m_ctx(pContext) { + + } + + + ULONG STDMETHODCALLTYPE D3D11DeviceContextExt::AddRef() { + return m_ctx->AddRef(); + } + + + ULONG STDMETHODCALLTYPE D3D11DeviceContextExt::Release() { + return m_ctx->Release(); + } + + + HRESULT STDMETHODCALLTYPE D3D11DeviceContextExt::QueryInterface( + REFIID riid, + void** ppvObject) { + return m_ctx->QueryInterface(riid, ppvObject); + } + + + void STDMETHODCALLTYPE D3D11DeviceContextExt::MultiDrawIndirect( + UINT DrawCount, + ID3D11Buffer* pBufferForArgs, + UINT ByteOffsetForArgs, + UINT ByteStrideForArgs) { + + } + + + void STDMETHODCALLTYPE D3D11DeviceContextExt::MultiDrawIndexedIndirect( + UINT DrawCount, + ID3D11Buffer* pBufferForArgs, + UINT ByteOffsetForArgs, + UINT ByteStrideForArgs) { + + } + + + void STDMETHODCALLTYPE D3D11DeviceContextExt::MultiDrawIndirectCount( + UINT MaxDrawCount, + ID3D11Buffer* pBufferForCount, + UINT ByteOffsetForCount, + ID3D11Buffer* pBufferForArgs, + UINT ByteOffsetForArgs, + UINT ByteStrideForArgs) { + + } + + + void STDMETHODCALLTYPE D3D11DeviceContextExt::MultiDrawIndexedIndirectCount( + UINT MaxDrawCount, + ID3D11Buffer* pBufferForCount, + UINT ByteOffsetForCount, + ID3D11Buffer* pBufferForArgs, + UINT ByteOffsetForArgs, + UINT ByteStrideForArgs) { + + } + + + void STDMETHODCALLTYPE D3D11DeviceContextExt::SetDepthBoundsTest( + BOOL Enable, + FLOAT MinDepthBounds, + FLOAT MaxDepthBounds) { + + } + + + void STDMETHODCALLTYPE D3D11DeviceContextExt::SetBarrierControl( + UINT ControlFlags) { + + } + +} diff --git a/src/d3d11/d3d11_context_ext.h b/src/d3d11/d3d11_context_ext.h new file mode 100644 index 00000000..bec7d233 --- /dev/null +++ b/src/d3d11/d3d11_context_ext.h @@ -0,0 +1,66 @@ +#pragma once + +#include "d3d11_interfaces.h" + +namespace dxvk { + + class D3D11DeviceContext; + + class D3D11DeviceContextExt : public ID3D11VkExtContext { + + public: + + D3D11DeviceContextExt( + D3D11DeviceContext* pContext); + + ULONG STDMETHODCALLTYPE AddRef(); + + ULONG STDMETHODCALLTYPE Release(); + + HRESULT STDMETHODCALLTYPE QueryInterface( + REFIID riid, + void** ppvObject); + + void STDMETHODCALLTYPE MultiDrawIndirect( + UINT DrawCount, + ID3D11Buffer* pBufferForArgs, + UINT ByteOffsetForArgs, + UINT ByteStrideForArgs); + + void STDMETHODCALLTYPE MultiDrawIndexedIndirect( + UINT DrawCount, + ID3D11Buffer* pBufferForArgs, + UINT ByteOffsetForArgs, + UINT ByteStrideForArgs); + + void STDMETHODCALLTYPE MultiDrawIndirectCount( + UINT MaxDrawCount, + ID3D11Buffer* pBufferForCount, + UINT ByteOffsetForCount, + ID3D11Buffer* pBufferForArgs, + UINT ByteOffsetForArgs, + UINT ByteStrideForArgs); + + void STDMETHODCALLTYPE MultiDrawIndexedIndirectCount( + UINT MaxDrawCount, + ID3D11Buffer* pBufferForCount, + UINT ByteOffsetForCount, + ID3D11Buffer* pBufferForArgs, + UINT ByteOffsetForArgs, + UINT ByteStrideForArgs); + + void STDMETHODCALLTYPE SetDepthBoundsTest( + BOOL Enable, + FLOAT MinDepthBounds, + FLOAT MaxDepthBounds); + + void STDMETHODCALLTYPE SetBarrierControl( + UINT ControlFlags); + + private: + + D3D11DeviceContext* m_ctx; + + }; + +} diff --git a/src/d3d11/meson.build b/src/d3d11/meson.build index 673d0957..68809e26 100644 --- a/src/d3d11/meson.build +++ b/src/d3d11/meson.build @@ -31,6 +31,7 @@ d3d11_src = [ 'd3d11_cmdlist.cpp', 'd3d11_context.cpp', 'd3d11_context_def.cpp', + 'd3d11_context_ext.cpp', 'd3d11_context_imm.cpp', 'd3d11_counter_buffer.cpp', 'd3d11_depth_stencil.cpp',