mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-13 19:29:14 +01:00
[d3d11] Replaced resource view classes by a generic template
This commit is contained in:
parent
bfb05f24b8
commit
36e6ba4ebc
@ -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());
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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>;
|
||||
|
||||
}
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user