diff --git a/src/d3d11/d3d11_context.cpp b/src/d3d11/d3d11_context.cpp index eb37aa100..f459959d6 100644 --- a/src/d3d11/d3d11_context.cpp +++ b/src/d3d11/d3d11_context.cpp @@ -232,7 +232,7 @@ namespace dxvk { D3D11TextureInfo textureInfo; if (FAILED(GetCommonTextureInfo(pResource, &textureInfo))) { - Logger::err("D3D11DeviceContext: Cannot map a device-local image"); + Logger::err("D3D11DeviceContext: Failed to retrieve texture info"); return E_FAIL; } diff --git a/src/d3d11/d3d11_context_state.h b/src/d3d11/d3d11_context_state.h index 520c008f2..1ed1241e9 100644 --- a/src/d3d11/d3d11_context_state.h +++ b/src/d3d11/d3d11_context_state.h @@ -22,6 +22,10 @@ namespace dxvk { using D3D11ShaderResourceBindings = std::array< Com<D3D11ShaderResourceView>, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT>; + + using D3D11UnorderedAccessBindings = std::array< + Com<D3D11UnorderedAccessView>, D3D11_1_UAV_SLOT_COUNT>; + struct D3D11ContextStateVS { Com<D3D11VertexShader> shader; @@ -68,6 +72,7 @@ namespace dxvk { D3D11ConstantBufferBindings constantBuffers; D3D11SamplerBindings samplers; D3D11ShaderResourceBindings shaderResources; + D3D11UnorderedAccessBindings unorderedAccessViews; }; diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index 2dcb21108..4723969fb 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -11,21 +11,6 @@ #include "d3d11_texture.h" #include "d3d11_view.h" -// These were copied from d3d11.h -// For some ridiculous reason, we cannot use the structures -// directly, although others from the same header work. -typedef struct D3D11_FEATURE_DATA_THREADING { - BOOL DriverConcurrentCreates; - BOOL DriverCommandLists; -} D3D11_FEATURE_DATA_THREADING; -typedef struct D3D11_FEATURE_DATA_DOUBLES { - BOOL DoublePrecisionFloatShaderOps; -} D3D11_FEATURE_DATA_DOUBLES; -typedef struct D3D11_FEATURE_DATA_FORMAT_SUPPORT { - DXGI_FORMAT InFormat; - UINT OutFormatSupport; -} D3D11_FEATURE_DATA_FORMAT_SUPPORT; - namespace dxvk { D3D11Device::D3D11Device( @@ -268,7 +253,7 @@ namespace dxvk { try { *ppSRView = ref(new D3D11ShaderResourceView( - this, pResource, desc, nullptr, + this, pResource, desc, m_dxvkDevice->createImageView( textureInfo.image, viewInfo))); return S_OK; @@ -372,7 +357,7 @@ namespace dxvk { try { *ppRTView = ref(new D3D11RenderTargetView( - this, pResource, desc, nullptr, + this, pResource, desc, m_dxvkDevice->createImageView( textureInfo.image, viewInfo))); return S_OK; @@ -466,7 +451,7 @@ namespace dxvk { try { *ppDepthStencilView = ref(new D3D11DepthStencilView( - this, pResource, desc, nullptr, + this, pResource, desc, m_dxvkDevice->createImageView( textureInfo.image, viewInfo))); return S_OK; diff --git a/src/d3d11/d3d11_include.h b/src/d3d11/d3d11_include.h index c84a35018..add052af2 100644 --- a/src/d3d11/d3d11_include.h +++ b/src/d3d11/d3d11_include.h @@ -3,3 +3,24 @@ #include "../dxgi/dxgi_include.h" #include <d3d11_1.h> + +// This is not defined in the mingw headers +#ifndef D3D11_1_UAV_SLOT_COUNT +#define D3D11_1_UAV_SLOT_COUNT 64 +#endif + +// These were copied from d3d11.h +// For some strange reason, we cannot use the structures +// directly, although others from the same header work. +typedef struct D3D11_FEATURE_DATA_THREADING { + BOOL DriverConcurrentCreates; + BOOL DriverCommandLists; +} D3D11_FEATURE_DATA_THREADING; +typedef struct D3D11_FEATURE_DATA_DOUBLES { + BOOL DoublePrecisionFloatShaderOps; +} D3D11_FEATURE_DATA_DOUBLES; +typedef struct D3D11_FEATURE_DATA_FORMAT_SUPPORT { + DXGI_FORMAT InFormat; + UINT OutFormatSupport; +} D3D11_FEATURE_DATA_FORMAT_SUPPORT; + diff --git a/src/d3d11/d3d11_view.h b/src/d3d11/d3d11_view.h index 4364a0adc..da0ff062f 100644 --- a/src/d3d11/d3d11_view.h +++ b/src/d3d11/d3d11_view.h @@ -26,10 +26,17 @@ namespace dxvk { D3D11Device* device, ID3D11Resource* resource, const DescType& desc, - const Rc<DxvkBufferView>& bufferView, + const Rc<DxvkBufferView>& bufferView) + : m_device(device), m_resource(resource), + m_desc(desc), m_bufferView(bufferView) { } + + D3D11ResourceView( + D3D11Device* device, + ID3D11Resource* resource, + const DescType& desc, const Rc<DxvkImageView>& imageView) - : m_device(device), m_resource(resource), m_desc(desc), - m_bufferView(bufferView), m_imageView(imageView) { } + : m_device(device), m_resource(resource), + m_desc(desc), m_imageView(imageView) { } HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject) final { COM_QUERY_IFACE(riid, ppvObject, IUnknown);