From f586970c59b263f34120d67da1737baa80e84a7f Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Thu, 9 Aug 2018 22:04:03 +0200 Subject: [PATCH] [d3d11] Validate buffer view bind flags --- src/d3d11/d3d11_buffer.cpp | 14 ++++++++++++++ src/d3d11/d3d11_buffer.h | 4 ++++ src/d3d11/d3d11_resource.cpp | 3 ++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/d3d11/d3d11_buffer.cpp b/src/d3d11/d3d11_buffer.cpp index 07c0d1d7..62be0f44 100644 --- a/src/d3d11/d3d11_buffer.cpp +++ b/src/d3d11/d3d11_buffer.cpp @@ -65,6 +65,20 @@ namespace dxvk { } + bool D3D11Buffer::CheckViewCompatibility( + UINT BindFlags, + DXGI_FORMAT Format) const { + // Check whether the given bind flags are supported + VkBufferUsageFlags usage = GetBufferUsageFlags(BindFlags); + + if ((m_buffer->info().usage & usage) != usage) + return false; + + // TODO implement format validation + return true; + } + + Rc D3D11Buffer::CreateBuffer( const D3D11_BUFFER_DESC* pDesc) const { DxvkBufferCreateInfo info; diff --git a/src/d3d11/d3d11_buffer.h b/src/d3d11/d3d11_buffer.h index f4e508dc..e10b8b95 100644 --- a/src/d3d11/d3d11_buffer.h +++ b/src/d3d11/d3d11_buffer.h @@ -37,6 +37,10 @@ namespace dxvk { void STDMETHODCALLTYPE GetDesc( D3D11_BUFFER_DESC *pDesc) final; + bool CheckViewCompatibility( + UINT BindFlags, + DXGI_FORMAT Format) const; + const D3D11_BUFFER_DESC* Desc() const { return &m_desc; } diff --git a/src/d3d11/d3d11_resource.cpp b/src/d3d11/d3d11_resource.cpp index f9113072..a2da5a31 100644 --- a/src/d3d11/d3d11_resource.cpp +++ b/src/d3d11/d3d11_resource.cpp @@ -35,10 +35,11 @@ namespace dxvk { UINT BindFlags, DXGI_FORMAT Format) { auto texture = GetCommonTexture(pResource); + auto buffer = GetCommonBuffer (pResource); return texture != nullptr ? texture->CheckViewCompatibility(BindFlags, Format) - : true; /* for buffers */ + : buffer ->CheckViewCompatibility(BindFlags, Format); }