From ea15f22492bfd1d4570e56c2c1190e5b3e859231 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sun, 15 Oct 2017 21:38:09 +0200 Subject: [PATCH] [d3d11] Added buffer stub --- src/d3d11/d3d11_buffer.cpp | 40 ++++++++++++++++++++++++++++++++++++++ src/d3d11/d3d11_buffer.h | 40 ++++++++++++++++++++++++++++++++++++++ src/d3d11/d3d11_device.cpp | 18 +++++++++++++++-- src/d3d11/d3d11_device.h | 4 ++++ src/d3d11/d3d11_resource.h | 26 +++++++++++++++++++++++++ src/d3d11/meson.build | 1 + 6 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 src/d3d11/d3d11_buffer.cpp create mode 100644 src/d3d11/d3d11_buffer.h create mode 100644 src/d3d11/d3d11_resource.h diff --git a/src/d3d11/d3d11_buffer.cpp b/src/d3d11/d3d11_buffer.cpp new file mode 100644 index 000000000..a3c514a1e --- /dev/null +++ b/src/d3d11/d3d11_buffer.cpp @@ -0,0 +1,40 @@ +#include "d3d11_buffer.h" +#include "d3d11_device.h" + +namespace dxvk { + + D3D11Buffer::D3D11Buffer( + D3D11Device* device, + const D3D11_BUFFER_DESC& desc) { + TRACE(this, device); + } + + + D3D11Buffer::~D3D11Buffer() { + TRACE(this); + } + + + HRESULT D3D11Buffer::QueryInterface(REFIID riid, void** ppvObject) { + COM_QUERY_IFACE(riid, ppvObject, ID3D11Buffer); + + Logger::warn("D3D11Buffer::QueryInterface: Unknown interface query"); + return E_NOINTERFACE; + } + + + void D3D11Buffer::GetDevice(ID3D11Device** ppDevice) { + *ppDevice = m_device.ref(); + } + + + void D3D11Buffer::GetType(D3D11_RESOURCE_DIMENSION* pResourceDimension) { + *pResourceDimension = D3D11_RESOURCE_DIMENSION_BUFFER; + } + + + void D3D11Buffer::GetDesc(D3D11_BUFFER_DESC* pDesc) { + *pDesc = m_desc; + } + +} diff --git a/src/d3d11/d3d11_buffer.h b/src/d3d11/d3d11_buffer.h new file mode 100644 index 000000000..801e27f2a --- /dev/null +++ b/src/d3d11/d3d11_buffer.h @@ -0,0 +1,40 @@ +#pragma once + +#include + +#include "d3d11_resource.h" + +namespace dxvk { + + class D3D11Device; + + class D3D11Buffer : public D3D11Resource { + + public: + + D3D11Buffer( + D3D11Device* device, + const D3D11_BUFFER_DESC& desc); + ~D3D11Buffer(); + + HRESULT QueryInterface( + REFIID riid, + void** ppvObject) final; + + void GetDevice( + ID3D11Device **ppDevice) final; + + void GetType( + D3D11_RESOURCE_DIMENSION *pResourceDimension) final; + + void GetDesc( + D3D11_BUFFER_DESC *pDesc); + + private: + + Com m_device; + D3D11_BUFFER_DESC m_desc; + + }; + +} diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index 39804c1ea..fec4122a8 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -1,5 +1,6 @@ #include +#include "d3d11_buffer.h" #include "d3d11_context.h" #include "d3d11_device.h" @@ -42,8 +43,21 @@ namespace dxvk { const D3D11_BUFFER_DESC* pDesc, const D3D11_SUBRESOURCE_DATA* pInitialData, ID3D11Buffer** ppBuffer) { - Logger::err("D3D11Device::CreateBuffer: Not implemented"); - return E_NOTIMPL; + if (ppBuffer == nullptr) + return S_OK; + + if (pInitialData != nullptr) { + Logger::err("D3D11Device::CreateBuffer: pInitialData != NULL not supported"); + return E_FAIL; + } + + try { + *ppBuffer = ref(new D3D11Buffer(this, *pDesc)); + return S_OK; + } catch (const DxvkError& e) { + Logger::err(e.message()); + return E_FAIL; + } } diff --git a/src/d3d11/d3d11_device.h b/src/d3d11/d3d11_device.h index bb9cfa11d..96026ba2c 100644 --- a/src/d3d11/d3d11_device.h +++ b/src/d3d11/d3d11_device.h @@ -215,6 +215,10 @@ namespace dxvk { UINT GetExceptionMode() final; + DxvkDevice* GetDXVKDevice() { + return m_dxvkDevice.ptr(); + } + static bool CheckFeatureLevelSupport( D3D_FEATURE_LEVEL featureLevel); diff --git a/src/d3d11/d3d11_resource.h b/src/d3d11/d3d11_resource.h new file mode 100644 index 000000000..18405144d --- /dev/null +++ b/src/d3d11/d3d11_resource.h @@ -0,0 +1,26 @@ +#pragma once + +#include "d3d11_device_child.h" + +namespace dxvk { + + template + class D3D11Resource : public D3D11DeviceChild { + + public: + + UINT GetEvictionPriority() final { + return m_evictionPriority; + } + + void SetEvictionPriority(UINT EvictionPriority) final { + m_evictionPriority = EvictionPriority; + } + + private: + + UINT m_evictionPriority = 0; + + }; + +} diff --git a/src/d3d11/meson.build b/src/d3d11/meson.build index b9955139b..b454f772e 100644 --- a/src/d3d11/meson.build +++ b/src/d3d11/meson.build @@ -1,4 +1,5 @@ d3d11_src = [ + 'd3d11_buffer.cpp', 'd3d11_context.cpp', 'd3d11_device.cpp', 'd3d11_main.cpp',