mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-15 07:29:17 +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 {
|
try {
|
||||||
Rc<DxvkImageView> view = m_dxvkDevice->createImageView(image, viewInfo);
|
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;
|
return S_OK;
|
||||||
} catch (const DxvkError& e) {
|
} catch (const DxvkError& e) {
|
||||||
Logger::err(e.message());
|
Logger::err(e.message());
|
||||||
@ -516,7 +517,8 @@ namespace dxvk {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
Rc<DxvkImageView> view = m_dxvkDevice->createImageView(image, viewInfo);
|
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;
|
return S_OK;
|
||||||
} catch (const DxvkError& e) {
|
} catch (const DxvkError& e) {
|
||||||
Logger::err(e.message());
|
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 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:
|
public:
|
||||||
|
|
||||||
D3D11RenderTargetView(
|
D3D11ResourceView(
|
||||||
D3D11Device* device,
|
D3D11Device* device,
|
||||||
ID3D11Resource* resource,
|
ID3D11Resource* resource,
|
||||||
const D3D11_RENDER_TARGET_VIEW_DESC& desc,
|
const DescType& desc,
|
||||||
Rc<DxvkImageView> view);
|
const Rc<DxvkBufferView>& bufferView,
|
||||||
~D3D11RenderTargetView();
|
const Rc<DxvkImageView>& imageView)
|
||||||
|
: m_device(device), m_resource(resource), m_desc(desc),
|
||||||
|
m_bufferView(bufferView), m_imageView(imageView) { }
|
||||||
|
|
||||||
HRESULT QueryInterface(
|
HRESULT QueryInterface(REFIID riid, void** ppvObject) final {
|
||||||
REFIID riid,
|
COM_QUERY_IFACE(riid, ppvObject, IUnknown);
|
||||||
void** ppvObject) final;
|
COM_QUERY_IFACE(riid, ppvObject, ID3D11DeviceChild);
|
||||||
|
COM_QUERY_IFACE(riid, ppvObject, ID3D11View);
|
||||||
|
COM_QUERY_IFACE(riid, ppvObject, Iface);
|
||||||
|
|
||||||
void GetDevice(
|
Logger::warn("D3D11ResourceView::QueryInterface: Unknown interface query");
|
||||||
ID3D11Device **ppDevice) final;
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
void GetResource(
|
void GetDevice(ID3D11Device** ppDevice) final {
|
||||||
ID3D11Resource **ppResource) final;
|
*ppDevice = ref(m_device);
|
||||||
|
}
|
||||||
|
|
||||||
void GetDesc(
|
void GetResource(ID3D11Resource** ppResource) final {
|
||||||
D3D11_RENDER_TARGET_VIEW_DESC* pDesc) final;
|
*ppResource = m_resource.ref();
|
||||||
|
}
|
||||||
|
|
||||||
Rc<DxvkImageView> GetDXVKImageView();
|
void GetDesc(DescType* pDesc) final {
|
||||||
|
*pDesc = m_desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
Rc<DxvkBufferView> GetDXVKBufferView() {
|
||||||
|
return m_bufferView;
|
||||||
|
}
|
||||||
|
|
||||||
|
Rc<DxvkImageView> GetDXVKImageView() {
|
||||||
|
return m_imageView;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
D3D11Device* const m_device;
|
D3D11Device* const m_device;
|
||||||
Com<ID3D11Resource> m_resource;
|
Com<ID3D11Resource> m_resource;
|
||||||
|
DescType m_desc;
|
||||||
D3D11_RENDER_TARGET_VIEW_DESC m_desc;
|
Rc<DxvkBufferView> m_bufferView;
|
||||||
Rc<DxvkImageView> m_view;
|
Rc<DxvkImageView> m_imageView;
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
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.cpp',
|
||||||
'd3d11_state_rs.cpp',
|
'd3d11_state_rs.cpp',
|
||||||
'd3d11_texture.cpp',
|
'd3d11_texture.cpp',
|
||||||
'd3d11_view.cpp',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
d3d11_dll = shared_library('d3d11', d3d11_src,
|
d3d11_dll = shared_library('d3d11', d3d11_src,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user