mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-11 10:24:10 +01:00
[d3d11] Added experimental support for RTVs into 3D images
This commit is contained in:
parent
7bbb6ea93b
commit
fba16e2a04
@ -496,11 +496,6 @@ namespace dxvk {
|
|||||||
D3D11_RESOURCE_DIMENSION resourceDim = D3D11_RESOURCE_DIMENSION_UNKNOWN;
|
D3D11_RESOURCE_DIMENSION resourceDim = D3D11_RESOURCE_DIMENSION_UNKNOWN;
|
||||||
pResource->GetType(&resourceDim);
|
pResource->GetType(&resourceDim);
|
||||||
|
|
||||||
if (resourceDim != D3D11_RESOURCE_DIMENSION_TEXTURE2D) {
|
|
||||||
Logger::err("D3D11: Unsupported resource type for render target views");
|
|
||||||
return E_INVALIDARG;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The view description is optional. If not defined, it
|
// The view description is optional. If not defined, it
|
||||||
// will use the resource's format and all array layers.
|
// will use the resource's format and all array layers.
|
||||||
D3D11_RENDER_TARGET_VIEW_DESC desc;
|
D3D11_RENDER_TARGET_VIEW_DESC desc;
|
||||||
@ -557,6 +552,14 @@ namespace dxvk {
|
|||||||
viewInfo.numLayers = desc.Texture2DMSArray.ArraySize;
|
viewInfo.numLayers = desc.Texture2DMSArray.ArraySize;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case D3D11_RTV_DIMENSION_TEXTURE3D:
|
||||||
|
viewInfo.type = VK_IMAGE_VIEW_TYPE_2D_ARRAY;
|
||||||
|
viewInfo.minLevel = desc.Texture3D.MipSlice;
|
||||||
|
viewInfo.numLevels = 1;
|
||||||
|
viewInfo.minLayer = desc.Texture3D.FirstWSlice;
|
||||||
|
viewInfo.numLayers = desc.Texture3D.WSize;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Logger::err(str::format(
|
Logger::err(str::format(
|
||||||
"D3D11: pDesc->ViewDimension not supported for render target views: ",
|
"D3D11: pDesc->ViewDimension not supported for render target views: ",
|
||||||
@ -589,11 +592,6 @@ namespace dxvk {
|
|||||||
D3D11_RESOURCE_DIMENSION resourceDim = D3D11_RESOURCE_DIMENSION_UNKNOWN;
|
D3D11_RESOURCE_DIMENSION resourceDim = D3D11_RESOURCE_DIMENSION_UNKNOWN;
|
||||||
pResource->GetType(&resourceDim);
|
pResource->GetType(&resourceDim);
|
||||||
|
|
||||||
if (resourceDim != D3D11_RESOURCE_DIMENSION_TEXTURE2D) {
|
|
||||||
Logger::err("D3D11: Unsupported resource type for depth-stencil views");
|
|
||||||
return E_INVALIDARG;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The view description is optional. If not defined, it
|
// The view description is optional. If not defined, it
|
||||||
// will use the resource's format and all array layers.
|
// will use the resource's format and all array layers.
|
||||||
D3D11_DEPTH_STENCIL_VIEW_DESC desc;
|
D3D11_DEPTH_STENCIL_VIEW_DESC desc;
|
||||||
@ -1740,6 +1738,17 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
} return S_OK;
|
} return S_OK;
|
||||||
|
|
||||||
|
case D3D11_RESOURCE_DIMENSION_TEXTURE3D: {
|
||||||
|
D3D11_TEXTURE3D_DESC resourceDesc;
|
||||||
|
static_cast<D3D11Texture3D*>(pResource)->GetDesc(&resourceDesc);
|
||||||
|
|
||||||
|
pDesc->Format = resourceDesc.Format;
|
||||||
|
pDesc->ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D;
|
||||||
|
pDesc->Texture3D.MipSlice = 0;
|
||||||
|
pDesc->Texture3D.FirstWSlice = 0;
|
||||||
|
pDesc->Texture3D.WSize = resourceDesc.Depth;
|
||||||
|
} return S_OK;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Logger::err(str::format(
|
Logger::err(str::format(
|
||||||
"D3D11: Unsupported dimension for render target view: ",
|
"D3D11: Unsupported dimension for render target view: ",
|
||||||
@ -2068,7 +2077,7 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
format = resourceDesc.Format;
|
format = resourceDesc.Format;
|
||||||
numLayers = 1;
|
numLayers = resourceDesc.Depth;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -2094,6 +2103,11 @@ namespace dxvk {
|
|||||||
pDesc->Texture2DMSArray.ArraySize = numLayers - pDesc->Texture2DMSArray.FirstArraySlice;
|
pDesc->Texture2DMSArray.ArraySize = numLayers - pDesc->Texture2DMSArray.FirstArraySlice;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case D3D11_RTV_DIMENSION_TEXTURE3D:
|
||||||
|
if (pDesc->Texture3D.WSize == D3D11_DXVK_USE_REMAINING_LAYERS)
|
||||||
|
pDesc->Texture3D.WSize = numLayers - pDesc->Texture3D.FirstWSlice;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user