GPUDevice: Get rid of framebuffer abstraction
This commit is contained in:
@ -93,73 +93,6 @@ bool D3D11Device::SupportsTextureFormat(GPUTexture::Format format) const
|
||||
return (SUCCEEDED(m_device->CheckFormatSupport(dfmt, &support)) && ((support & required) == required));
|
||||
}
|
||||
|
||||
D3D11Framebuffer::D3D11Framebuffer(GPUTexture* rt, GPUTexture* ds, u32 width, u32 height,
|
||||
ComPtr<ID3D11RenderTargetView> rtv, ComPtr<ID3D11DepthStencilView> dsv)
|
||||
: GPUFramebuffer(rt, ds, width, height), m_rtv(std::move(rtv)), m_dsv(std::move(dsv))
|
||||
{
|
||||
}
|
||||
|
||||
D3D11Framebuffer::~D3D11Framebuffer()
|
||||
{
|
||||
D3D11Device::GetInstance().UnbindFramebuffer(this);
|
||||
}
|
||||
|
||||
void D3D11Framebuffer::SetDebugName(const std::string_view& name)
|
||||
{
|
||||
if (m_rtv)
|
||||
SetD3DDebugObjectName(m_rtv.Get(), fmt::format("{} RTV", name));
|
||||
if (m_dsv)
|
||||
SetD3DDebugObjectName(m_dsv.Get(), fmt::format("{} DSV", name));
|
||||
}
|
||||
|
||||
void D3D11Framebuffer::CommitClear(ID3D11DeviceContext1* context)
|
||||
{
|
||||
if (m_rt && m_rt->GetState() != GPUTexture::State::Dirty) [[unlikely]]
|
||||
{
|
||||
if (m_rt->GetState() == GPUTexture::State::Invalidated)
|
||||
context->DiscardView(m_rtv.Get());
|
||||
else
|
||||
context->ClearRenderTargetView(m_rtv.Get(), m_rt->GetUNormClearColor().data());
|
||||
|
||||
m_rt->SetState(GPUTexture::State::Dirty);
|
||||
}
|
||||
|
||||
if (m_ds && m_ds->GetState() != GPUTexture::State::Dirty) [[unlikely]]
|
||||
{
|
||||
if (m_ds->GetState() == GPUTexture::State::Invalidated)
|
||||
context->DiscardView(m_dsv.Get());
|
||||
else
|
||||
context->ClearDepthStencilView(m_dsv.Get(), D3D11_CLEAR_DEPTH, m_ds->GetClearDepth(), 0);
|
||||
|
||||
m_ds->SetState(GPUTexture::State::Dirty);
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<GPUFramebuffer> D3D11Device::CreateFramebuffer(GPUTexture* rt_or_ds, GPUTexture* ds)
|
||||
{
|
||||
DebugAssert((rt_or_ds || ds) && (!rt_or_ds || rt_or_ds->IsRenderTarget() || (rt_or_ds->IsDepthStencil() && !ds)));
|
||||
D3D11Texture* RT = static_cast<D3D11Texture*>((rt_or_ds && rt_or_ds->IsDepthStencil()) ? nullptr : rt_or_ds);
|
||||
D3D11Texture* DS = static_cast<D3D11Texture*>((rt_or_ds && rt_or_ds->IsDepthStencil()) ? rt_or_ds : ds);
|
||||
|
||||
ComPtr<ID3D11RenderTargetView> rtv;
|
||||
if (RT)
|
||||
{
|
||||
rtv = RT->GetD3DRTV();
|
||||
Assert(rtv);
|
||||
}
|
||||
|
||||
ComPtr<ID3D11DepthStencilView> dsv;
|
||||
if (DS)
|
||||
{
|
||||
dsv = DS->GetD3DDSV();
|
||||
Assert(dsv);
|
||||
}
|
||||
|
||||
return std::unique_ptr<GPUFramebuffer>(new D3D11Framebuffer(RT, DS, RT ? RT->GetWidth() : DS->GetWidth(),
|
||||
RT ? RT->GetHeight() : DS->GetHeight(), std::move(rtv),
|
||||
std::move(dsv)));
|
||||
}
|
||||
|
||||
D3D11Sampler::D3D11Sampler(ComPtr<ID3D11SamplerState> ss) : m_ss(std::move(ss))
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user