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.CPUAccessFlags = pDesc->CPUAccessFlags;
|
||||
desc.MiscFlags = pDesc->MiscFlags;
|
||||
desc.TextureLayout = D3D11_TEXTURE_LAYOUT_UNDEFINED;
|
||||
|
||||
if (FAILED(D3D11CommonTexture::NormalizeTextureProperties(&desc)))
|
||||
return E_INVALIDARG;
|
||||
@ -162,6 +163,7 @@ namespace dxvk {
|
||||
desc.BindFlags = pDesc->BindFlags;
|
||||
desc.CPUAccessFlags = pDesc->CPUAccessFlags;
|
||||
desc.MiscFlags = pDesc->MiscFlags;
|
||||
desc.TextureLayout = D3D11_TEXTURE_LAYOUT_UNDEFINED;
|
||||
|
||||
if (FAILED(D3D11CommonTexture::NormalizeTextureProperties(&desc)))
|
||||
return E_INVALIDARG;
|
||||
@ -202,6 +204,7 @@ namespace dxvk {
|
||||
desc.BindFlags = pDesc->BindFlags;
|
||||
desc.CPUAccessFlags = pDesc->CPUAccessFlags;
|
||||
desc.MiscFlags = pDesc->MiscFlags;
|
||||
desc.TextureLayout = D3D11_TEXTURE_LAYOUT_UNDEFINED;
|
||||
|
||||
if (FAILED(D3D11CommonTexture::NormalizeTextureProperties(&desc)))
|
||||
return E_INVALIDARG;
|
||||
|
@ -443,6 +443,7 @@ namespace dxvk {
|
||||
| D3D11_BIND_SHADER_RESOURCE;
|
||||
desc.CPUAccessFlags = 0;
|
||||
desc.MiscFlags = 0;
|
||||
desc.TextureLayout = D3D11_TEXTURE_LAYOUT_UNDEFINED;
|
||||
|
||||
if (m_desc.BufferUsage & DXGI_USAGE_UNORDERED_ACCESS)
|
||||
desc.BindFlags |= D3D11_BIND_UNORDERED_ACCESS;
|
||||
|
@ -295,6 +295,16 @@ namespace dxvk {
|
||||
if (pDesc->MipLevels == 0 || 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;
|
||||
}
|
||||
|
||||
@ -404,7 +414,8 @@ namespace dxvk {
|
||||
// 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
|
||||
// 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;
|
||||
|
||||
// Depth-stencil formats in D3D11 can be mapped and follow special
|
||||
@ -892,7 +903,8 @@ namespace dxvk {
|
||||
if (riid == __uuidof(IUnknown)
|
||||
|| riid == __uuidof(ID3D11DeviceChild)
|
||||
|| riid == __uuidof(ID3D11Resource)
|
||||
|| riid == __uuidof(ID3D11Texture2D)) {
|
||||
|| riid == __uuidof(ID3D11Texture2D)
|
||||
|| riid == __uuidof(ID3D11Texture2D1)) {
|
||||
*ppvObject = ref(this);
|
||||
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->Height = m_texture.Desc()->Height;
|
||||
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
|
||||
D3D11Texture3D::D3D11Texture3D(
|
||||
@ -995,7 +1022,8 @@ namespace dxvk {
|
||||
if (riid == __uuidof(IUnknown)
|
||||
|| riid == __uuidof(ID3D11DeviceChild)
|
||||
|| riid == __uuidof(ID3D11Resource)
|
||||
|| riid == __uuidof(ID3D11Texture3D)) {
|
||||
|| riid == __uuidof(ID3D11Texture3D)
|
||||
|| riid == __uuidof(ID3D11Texture3D1)) {
|
||||
*ppvObject = ref(this);
|
||||
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->Height = m_texture.Desc()->Height;
|
||||
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) {
|
||||
D3D11_RESOURCE_DIMENSION dimension = D3D11_RESOURCE_DIMENSION_UNKNOWN;
|
||||
|
@ -43,6 +43,7 @@ namespace dxvk {
|
||||
UINT BindFlags;
|
||||
UINT CPUAccessFlags;
|
||||
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
|
||||
class D3D11Texture2D : public D3D11DeviceChild<ID3D11Texture2D> {
|
||||
class D3D11Texture2D : public D3D11DeviceChild<ID3D11Texture2D1> {
|
||||
|
||||
public:
|
||||
|
||||
@ -436,7 +437,10 @@ namespace dxvk {
|
||||
void STDMETHODCALLTYPE SetEvictionPriority(UINT EvictionPriority) final;
|
||||
|
||||
void STDMETHODCALLTYPE GetDesc(
|
||||
D3D11_TEXTURE2D_DESC *pDesc) final;
|
||||
D3D11_TEXTURE2D_DESC* pDesc) final;
|
||||
|
||||
void STDMETHODCALLTYPE GetDesc1(
|
||||
D3D11_TEXTURE2D_DESC1* pDesc) final;
|
||||
|
||||
D3D11CommonTexture* GetCommonTexture() {
|
||||
return &m_texture;
|
||||
@ -459,7 +463,7 @@ namespace dxvk {
|
||||
|
||||
///////////////////////////////////////////
|
||||
// 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:
|
||||
|
||||
@ -484,7 +488,10 @@ namespace dxvk {
|
||||
void STDMETHODCALLTYPE SetEvictionPriority(UINT EvictionPriority) final;
|
||||
|
||||
void STDMETHODCALLTYPE GetDesc(
|
||||
D3D11_TEXTURE3D_DESC *pDesc) final;
|
||||
D3D11_TEXTURE3D_DESC* pDesc) final;
|
||||
|
||||
void STDMETHODCALLTYPE GetDesc1(
|
||||
D3D11_TEXTURE3D_DESC1* pDesc) final;
|
||||
|
||||
D3D11CommonTexture* GetCommonTexture() {
|
||||
return &m_texture;
|
||||
|
Loading…
x
Reference in New Issue
Block a user