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); }