mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-27 22:54:16 +01:00
[d3d11] Implement ID3D11Texture2D1 and ID3D11Texture3D1
This commit is contained in:
parent
d9f409b92f
commit
0758f14a35
@ -122,6 +122,7 @@ namespace dxvk {
|
|||||||
desc.BindFlags = pDesc->BindFlags;
|
desc.BindFlags = pDesc->BindFlags;
|
||||||
desc.CPUAccessFlags = pDesc->CPUAccessFlags;
|
desc.CPUAccessFlags = pDesc->CPUAccessFlags;
|
||||||
desc.MiscFlags = pDesc->MiscFlags;
|
desc.MiscFlags = pDesc->MiscFlags;
|
||||||
|
desc.TextureLayout = D3D11_TEXTURE_LAYOUT_UNDEFINED;
|
||||||
|
|
||||||
if (FAILED(D3D11CommonTexture::NormalizeTextureProperties(&desc)))
|
if (FAILED(D3D11CommonTexture::NormalizeTextureProperties(&desc)))
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
@ -162,6 +163,7 @@ namespace dxvk {
|
|||||||
desc.BindFlags = pDesc->BindFlags;
|
desc.BindFlags = pDesc->BindFlags;
|
||||||
desc.CPUAccessFlags = pDesc->CPUAccessFlags;
|
desc.CPUAccessFlags = pDesc->CPUAccessFlags;
|
||||||
desc.MiscFlags = pDesc->MiscFlags;
|
desc.MiscFlags = pDesc->MiscFlags;
|
||||||
|
desc.TextureLayout = D3D11_TEXTURE_LAYOUT_UNDEFINED;
|
||||||
|
|
||||||
if (FAILED(D3D11CommonTexture::NormalizeTextureProperties(&desc)))
|
if (FAILED(D3D11CommonTexture::NormalizeTextureProperties(&desc)))
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
@ -202,6 +204,7 @@ namespace dxvk {
|
|||||||
desc.BindFlags = pDesc->BindFlags;
|
desc.BindFlags = pDesc->BindFlags;
|
||||||
desc.CPUAccessFlags = pDesc->CPUAccessFlags;
|
desc.CPUAccessFlags = pDesc->CPUAccessFlags;
|
||||||
desc.MiscFlags = pDesc->MiscFlags;
|
desc.MiscFlags = pDesc->MiscFlags;
|
||||||
|
desc.TextureLayout = D3D11_TEXTURE_LAYOUT_UNDEFINED;
|
||||||
|
|
||||||
if (FAILED(D3D11CommonTexture::NormalizeTextureProperties(&desc)))
|
if (FAILED(D3D11CommonTexture::NormalizeTextureProperties(&desc)))
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
@ -443,6 +443,7 @@ namespace dxvk {
|
|||||||
| D3D11_BIND_SHADER_RESOURCE;
|
| D3D11_BIND_SHADER_RESOURCE;
|
||||||
desc.CPUAccessFlags = 0;
|
desc.CPUAccessFlags = 0;
|
||||||
desc.MiscFlags = 0;
|
desc.MiscFlags = 0;
|
||||||
|
desc.TextureLayout = D3D11_TEXTURE_LAYOUT_UNDEFINED;
|
||||||
|
|
||||||
if (m_desc.BufferUsage & DXGI_USAGE_UNORDERED_ACCESS)
|
if (m_desc.BufferUsage & DXGI_USAGE_UNORDERED_ACCESS)
|
||||||
desc.BindFlags |= D3D11_BIND_UNORDERED_ACCESS;
|
desc.BindFlags |= D3D11_BIND_UNORDERED_ACCESS;
|
||||||
|
@ -295,6 +295,16 @@ namespace dxvk {
|
|||||||
if (pDesc->MipLevels == 0 || pDesc->MipLevels > maxMipLevelCount)
|
if (pDesc->MipLevels == 0 || pDesc->MipLevels > maxMipLevelCount)
|
||||||
pDesc->MipLevels = maxMipLevelCount;
|
pDesc->MipLevels = maxMipLevelCount;
|
||||||
|
|
||||||
|
// Row-major is only supported for textures with one single
|
||||||
|
// subresource and one sample and cannot have bind flags.
|
||||||
|
if (pDesc->TextureLayout == D3D11_TEXTURE_LAYOUT_ROW_MAJOR
|
||||||
|
&& (pDesc->MipLevels != 1 || pDesc->SampleDesc.Count != 1 || pDesc->BindFlags))
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
// Standard swizzle is unsupported
|
||||||
|
if (pDesc->TextureLayout == D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -404,7 +414,8 @@ namespace dxvk {
|
|||||||
// 2. Since the image will most likely be read for rendering by the GPU,
|
// 2. Since the image will most likely be read for rendering by the GPU,
|
||||||
// writing the image to device-local image may be more efficient than
|
// writing the image to device-local image may be more efficient than
|
||||||
// reading its contents from host-visible memory.
|
// reading its contents from host-visible memory.
|
||||||
if (m_desc.Usage == D3D11_USAGE_DYNAMIC)
|
if (m_desc.Usage == D3D11_USAGE_DYNAMIC
|
||||||
|
&& m_desc.TextureLayout != D3D11_TEXTURE_LAYOUT_ROW_MAJOR)
|
||||||
return D3D11_COMMON_TEXTURE_MAP_MODE_BUFFER;
|
return D3D11_COMMON_TEXTURE_MAP_MODE_BUFFER;
|
||||||
|
|
||||||
// Depth-stencil formats in D3D11 can be mapped and follow special
|
// Depth-stencil formats in D3D11 can be mapped and follow special
|
||||||
@ -892,7 +903,8 @@ namespace dxvk {
|
|||||||
if (riid == __uuidof(IUnknown)
|
if (riid == __uuidof(IUnknown)
|
||||||
|| riid == __uuidof(ID3D11DeviceChild)
|
|| riid == __uuidof(ID3D11DeviceChild)
|
||||||
|| riid == __uuidof(ID3D11Resource)
|
|| riid == __uuidof(ID3D11Resource)
|
||||||
|| riid == __uuidof(ID3D11Texture2D)) {
|
|| riid == __uuidof(ID3D11Texture2D)
|
||||||
|
|| riid == __uuidof(ID3D11Texture2D1)) {
|
||||||
*ppvObject = ref(this);
|
*ppvObject = ref(this);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
@ -954,7 +966,7 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void STDMETHODCALLTYPE D3D11Texture2D::GetDesc(D3D11_TEXTURE2D_DESC *pDesc) {
|
void STDMETHODCALLTYPE D3D11Texture2D::GetDesc(D3D11_TEXTURE2D_DESC* pDesc) {
|
||||||
pDesc->Width = m_texture.Desc()->Width;
|
pDesc->Width = m_texture.Desc()->Width;
|
||||||
pDesc->Height = m_texture.Desc()->Height;
|
pDesc->Height = m_texture.Desc()->Height;
|
||||||
pDesc->MipLevels = m_texture.Desc()->MipLevels;
|
pDesc->MipLevels = m_texture.Desc()->MipLevels;
|
||||||
@ -968,6 +980,21 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void STDMETHODCALLTYPE D3D11Texture2D::GetDesc1(D3D11_TEXTURE2D_DESC1* pDesc) {
|
||||||
|
pDesc->Width = m_texture.Desc()->Width;
|
||||||
|
pDesc->Height = m_texture.Desc()->Height;
|
||||||
|
pDesc->MipLevels = m_texture.Desc()->MipLevels;
|
||||||
|
pDesc->ArraySize = m_texture.Desc()->ArraySize;
|
||||||
|
pDesc->Format = m_texture.Desc()->Format;
|
||||||
|
pDesc->SampleDesc = m_texture.Desc()->SampleDesc;
|
||||||
|
pDesc->Usage = m_texture.Desc()->Usage;
|
||||||
|
pDesc->BindFlags = m_texture.Desc()->BindFlags;
|
||||||
|
pDesc->CPUAccessFlags = m_texture.Desc()->CPUAccessFlags;
|
||||||
|
pDesc->MiscFlags = m_texture.Desc()->MiscFlags;
|
||||||
|
pDesc->TextureLayout = m_texture.Desc()->TextureLayout;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
// D 3 D 1 1 T E X T U R E 3 D
|
// D 3 D 1 1 T E X T U R E 3 D
|
||||||
D3D11Texture3D::D3D11Texture3D(
|
D3D11Texture3D::D3D11Texture3D(
|
||||||
@ -995,7 +1022,8 @@ namespace dxvk {
|
|||||||
if (riid == __uuidof(IUnknown)
|
if (riid == __uuidof(IUnknown)
|
||||||
|| riid == __uuidof(ID3D11DeviceChild)
|
|| riid == __uuidof(ID3D11DeviceChild)
|
||||||
|| riid == __uuidof(ID3D11Resource)
|
|| riid == __uuidof(ID3D11Resource)
|
||||||
|| riid == __uuidof(ID3D11Texture3D)) {
|
|| riid == __uuidof(ID3D11Texture3D)
|
||||||
|
|| riid == __uuidof(ID3D11Texture3D1)) {
|
||||||
*ppvObject = ref(this);
|
*ppvObject = ref(this);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
@ -1049,7 +1077,7 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void STDMETHODCALLTYPE D3D11Texture3D::GetDesc(D3D11_TEXTURE3D_DESC *pDesc) {
|
void STDMETHODCALLTYPE D3D11Texture3D::GetDesc(D3D11_TEXTURE3D_DESC* pDesc) {
|
||||||
pDesc->Width = m_texture.Desc()->Width;
|
pDesc->Width = m_texture.Desc()->Width;
|
||||||
pDesc->Height = m_texture.Desc()->Height;
|
pDesc->Height = m_texture.Desc()->Height;
|
||||||
pDesc->Depth = m_texture.Desc()->Depth;
|
pDesc->Depth = m_texture.Desc()->Depth;
|
||||||
@ -1062,6 +1090,18 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void STDMETHODCALLTYPE D3D11Texture3D::GetDesc1(D3D11_TEXTURE3D_DESC1* pDesc) {
|
||||||
|
pDesc->Width = m_texture.Desc()->Width;
|
||||||
|
pDesc->Height = m_texture.Desc()->Height;
|
||||||
|
pDesc->Depth = m_texture.Desc()->Depth;
|
||||||
|
pDesc->MipLevels = m_texture.Desc()->MipLevels;
|
||||||
|
pDesc->Format = m_texture.Desc()->Format;
|
||||||
|
pDesc->Usage = m_texture.Desc()->Usage;
|
||||||
|
pDesc->BindFlags = m_texture.Desc()->BindFlags;
|
||||||
|
pDesc->CPUAccessFlags = m_texture.Desc()->CPUAccessFlags;
|
||||||
|
pDesc->MiscFlags = m_texture.Desc()->MiscFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
D3D11CommonTexture* GetCommonTexture(ID3D11Resource* pResource) {
|
D3D11CommonTexture* GetCommonTexture(ID3D11Resource* pResource) {
|
||||||
D3D11_RESOURCE_DIMENSION dimension = D3D11_RESOURCE_DIMENSION_UNKNOWN;
|
D3D11_RESOURCE_DIMENSION dimension = D3D11_RESOURCE_DIMENSION_UNKNOWN;
|
||||||
|
@ -43,6 +43,7 @@ namespace dxvk {
|
|||||||
UINT BindFlags;
|
UINT BindFlags;
|
||||||
UINT CPUAccessFlags;
|
UINT CPUAccessFlags;
|
||||||
UINT MiscFlags;
|
UINT MiscFlags;
|
||||||
|
D3D11_TEXTURE_LAYOUT TextureLayout;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -411,7 +412,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
// D 3 D 1 1 T E X T U R E 2 D
|
// D 3 D 1 1 T E X T U R E 2 D
|
||||||
class D3D11Texture2D : public D3D11DeviceChild<ID3D11Texture2D> {
|
class D3D11Texture2D : public D3D11DeviceChild<ID3D11Texture2D1> {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -436,7 +437,10 @@ namespace dxvk {
|
|||||||
void STDMETHODCALLTYPE SetEvictionPriority(UINT EvictionPriority) final;
|
void STDMETHODCALLTYPE SetEvictionPriority(UINT EvictionPriority) final;
|
||||||
|
|
||||||
void STDMETHODCALLTYPE GetDesc(
|
void STDMETHODCALLTYPE GetDesc(
|
||||||
D3D11_TEXTURE2D_DESC *pDesc) final;
|
D3D11_TEXTURE2D_DESC* pDesc) final;
|
||||||
|
|
||||||
|
void STDMETHODCALLTYPE GetDesc1(
|
||||||
|
D3D11_TEXTURE2D_DESC1* pDesc) final;
|
||||||
|
|
||||||
D3D11CommonTexture* GetCommonTexture() {
|
D3D11CommonTexture* GetCommonTexture() {
|
||||||
return &m_texture;
|
return &m_texture;
|
||||||
@ -459,7 +463,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
// D 3 D 1 1 T E X T U R E 3 D
|
// D 3 D 1 1 T E X T U R E 3 D
|
||||||
class D3D11Texture3D : public D3D11DeviceChild<ID3D11Texture3D> {
|
class D3D11Texture3D : public D3D11DeviceChild<ID3D11Texture3D1> {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -484,7 +488,10 @@ namespace dxvk {
|
|||||||
void STDMETHODCALLTYPE SetEvictionPriority(UINT EvictionPriority) final;
|
void STDMETHODCALLTYPE SetEvictionPriority(UINT EvictionPriority) final;
|
||||||
|
|
||||||
void STDMETHODCALLTYPE GetDesc(
|
void STDMETHODCALLTYPE GetDesc(
|
||||||
D3D11_TEXTURE3D_DESC *pDesc) final;
|
D3D11_TEXTURE3D_DESC* pDesc) final;
|
||||||
|
|
||||||
|
void STDMETHODCALLTYPE GetDesc1(
|
||||||
|
D3D11_TEXTURE3D_DESC1* pDesc) final;
|
||||||
|
|
||||||
D3D11CommonTexture* GetCommonTexture() {
|
D3D11CommonTexture* GetCommonTexture() {
|
||||||
return &m_texture;
|
return &m_texture;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user