[d3d11] Replaced resource view classes by a generic template

This commit is contained in:
Philip Rebohle 2017-12-09 02:09:13 +01:00
parent bfb05f24b8
commit 36e6ba4ebc
4 changed files with 64 additions and 166 deletions

View File

@ -381,7 +381,8 @@ namespace dxvk {
try {
Rc<DxvkImageView> view = m_dxvkDevice->createImageView(image, viewInfo);
*ppRTView = ref(new D3D11RenderTargetView(this, pResource, desc, view));
*ppRTView = ref(new D3D11RenderTargetView(
this, pResource, desc, nullptr, view));
return S_OK;
} catch (const DxvkError& e) {
Logger::err(e.message());
@ -516,7 +517,8 @@ namespace dxvk {
try {
Rc<DxvkImageView> view = m_dxvkDevice->createImageView(image, viewInfo);
*ppDepthStencilView = ref(new D3D11DepthStencilView(this, pResource, desc, view));
*ppDepthStencilView = ref(new D3D11DepthStencilView(
this, pResource, desc, nullptr, view));
return S_OK;
} catch (const DxvkError& e) {
Logger::err(e.message());

View File

@ -1,105 +0,0 @@
#include "d3d11_device.h"
#include "d3d11_view.h"
namespace dxvk {
D3D11RenderTargetView::D3D11RenderTargetView(
D3D11Device* device,
ID3D11Resource* resource,
const D3D11_RENDER_TARGET_VIEW_DESC& desc,
Rc<DxvkImageView> view)
: m_device (device),
m_resource(resource),
m_desc (desc),
m_view (view) {
}
D3D11RenderTargetView::~D3D11RenderTargetView() {
}
HRESULT D3D11RenderTargetView::QueryInterface(REFIID riid, void** ppvObject) {
COM_QUERY_IFACE(riid, ppvObject, IUnknown);
COM_QUERY_IFACE(riid, ppvObject, ID3D11DeviceChild);
COM_QUERY_IFACE(riid, ppvObject, ID3D11View);
COM_QUERY_IFACE(riid, ppvObject, ID3D11RenderTargetView);
Logger::warn("D3D11RenderTargetView::QueryInterface: Unknown interface query");
return E_NOINTERFACE;
}
void D3D11RenderTargetView::GetDevice(ID3D11Device** ppDevice) {
*ppDevice = ref(m_device);
}
void D3D11RenderTargetView::GetResource(ID3D11Resource **ppResource) {
*ppResource = m_resource.ref();
}
void D3D11RenderTargetView::GetDesc(D3D11_RENDER_TARGET_VIEW_DESC* pDesc) {
*pDesc = m_desc;
}
Rc<DxvkImageView> D3D11RenderTargetView::GetDXVKImageView() {
return m_view;
}
D3D11DepthStencilView::D3D11DepthStencilView(
D3D11Device* device,
ID3D11Resource* resource,
const D3D11_DEPTH_STENCIL_VIEW_DESC& desc,
Rc<DxvkImageView> view)
: m_device (device),
m_resource(resource),
m_desc (desc),
m_view (view) {
}
D3D11DepthStencilView::~D3D11DepthStencilView() {
}
HRESULT D3D11DepthStencilView::QueryInterface(REFIID riid, void** ppvObject) {
COM_QUERY_IFACE(riid, ppvObject, IUnknown);
COM_QUERY_IFACE(riid, ppvObject, ID3D11DeviceChild);
COM_QUERY_IFACE(riid, ppvObject, ID3D11View);
COM_QUERY_IFACE(riid, ppvObject, ID3D11DepthStencilView);
Logger::warn("D3D11DepthStencilView::QueryInterface: Unknown interface query");
return E_NOINTERFACE;
}
void D3D11DepthStencilView::GetDevice(ID3D11Device** ppDevice) {
*ppDevice = ref(m_device);
}
void D3D11DepthStencilView::GetResource(ID3D11Resource **ppResource) {
*ppResource = m_resource.ref();
}
void D3D11DepthStencilView::GetDesc(D3D11_DEPTH_STENCIL_VIEW_DESC* pDesc) {
*pDesc = m_desc;
}
Rc<DxvkImageView> D3D11DepthStencilView::GetDXVKImageView() {
return m_view;
}
}

View File

@ -8,78 +8,80 @@ namespace dxvk {
class D3D11Device;
class D3D11RenderTargetView : public D3D11DeviceChild<ID3D11RenderTargetView> {
/**
* \brief Generic resource view template
*
* Stores an image view or a buffer view, depending
* on the referenced resource type, and implements
* the interface for a given view type.
* \tparam Iface Base interface
* \tparam DescType View description type
*/
template<typename Iface, typename DescType>
class D3D11ResourceView : public D3D11DeviceChild<Iface> {
public:
D3D11RenderTargetView(
D3D11Device* device,
ID3D11Resource* resource,
const D3D11_RENDER_TARGET_VIEW_DESC& desc,
Rc<DxvkImageView> view);
~D3D11RenderTargetView();
D3D11ResourceView(
D3D11Device* device,
ID3D11Resource* resource,
const DescType& desc,
const Rc<DxvkBufferView>& bufferView,
const Rc<DxvkImageView>& imageView)
: m_device(device), m_resource(resource), m_desc(desc),
m_bufferView(bufferView), m_imageView(imageView) { }
HRESULT QueryInterface(
REFIID riid,
void** ppvObject) final;
HRESULT QueryInterface(REFIID riid, void** ppvObject) final {
COM_QUERY_IFACE(riid, ppvObject, IUnknown);
COM_QUERY_IFACE(riid, ppvObject, ID3D11DeviceChild);
COM_QUERY_IFACE(riid, ppvObject, ID3D11View);
COM_QUERY_IFACE(riid, ppvObject, Iface);
Logger::warn("D3D11ResourceView::QueryInterface: Unknown interface query");
return E_NOINTERFACE;
}
void GetDevice(
ID3D11Device **ppDevice) final;
void GetDevice(ID3D11Device** ppDevice) final {
*ppDevice = ref(m_device);
}
void GetResource(
ID3D11Resource **ppResource) final;
void GetResource(ID3D11Resource** ppResource) final {
*ppResource = m_resource.ref();
}
void GetDesc(
D3D11_RENDER_TARGET_VIEW_DESC* pDesc) final;
void GetDesc(DescType* pDesc) final {
*pDesc = m_desc;
}
Rc<DxvkImageView> GetDXVKImageView();
Rc<DxvkBufferView> GetDXVKBufferView() {
return m_bufferView;
}
Rc<DxvkImageView> GetDXVKImageView() {
return m_imageView;
}
private:
D3D11Device* const m_device;
Com<ID3D11Resource> m_resource;
D3D11_RENDER_TARGET_VIEW_DESC m_desc;
Rc<DxvkImageView> m_view;
};
class D3D11DepthStencilView : public D3D11DeviceChild<ID3D11DepthStencilView> {
public:
D3D11DepthStencilView(
D3D11Device* device,
ID3D11Resource* resource,
const D3D11_DEPTH_STENCIL_VIEW_DESC& desc,
Rc<DxvkImageView> view);
~D3D11DepthStencilView();
HRESULT QueryInterface(
REFIID riid,
void** ppvObject) final;
void GetDevice(
ID3D11Device **ppDevice) final;
void GetResource(
ID3D11Resource **ppResource) final;
void GetDesc(
D3D11_DEPTH_STENCIL_VIEW_DESC* pDesc) final;
Rc<DxvkImageView> GetDXVKImageView();
private:
D3D11Device* const m_device;
Com<ID3D11Resource> m_resource;
D3D11_DEPTH_STENCIL_VIEW_DESC m_desc;
Rc<DxvkImageView> m_view;
D3D11Device* const m_device;
Com<ID3D11Resource> m_resource;
DescType m_desc;
Rc<DxvkBufferView> m_bufferView;
Rc<DxvkImageView> m_imageView;
};
using D3D11ShaderResourceView = D3D11ResourceView<
ID3D11ShaderResourceView, D3D11_SHADER_RESOURCE_VIEW_DESC>;
using D3D11RenderTargetView = D3D11ResourceView<
ID3D11RenderTargetView, D3D11_RENDER_TARGET_VIEW_DESC>;
using D3D11DepthStencilView = D3D11ResourceView<
ID3D11DepthStencilView, D3D11_DEPTH_STENCIL_VIEW_DESC>;
using D3D11UnorderedAccessView = D3D11ResourceView<
ID3D11UnorderedAccessView, D3D11_UNORDERED_ACCESS_VIEW_DESC>;
}

View File

@ -10,7 +10,6 @@ d3d11_src = [
'd3d11_state.cpp',
'd3d11_state_rs.cpp',
'd3d11_texture.cpp',
'd3d11_view.cpp',
]
d3d11_dll = shared_library('d3d11', d3d11_src,