mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d: Normalise layer counts in d3d12_rtv_desc_create_rtv().
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
committed by
Alexandre Julliard
parent
bec4f0a85e
commit
4c07252da6
@@ -2480,7 +2480,19 @@ static bool init_default_texture_view_desc(struct vkd3d_texture_view_desc *desc,
|
|||||||
static void vkd3d_texture_view_desc_normalise(struct vkd3d_texture_view_desc *desc,
|
static void vkd3d_texture_view_desc_normalise(struct vkd3d_texture_view_desc *desc,
|
||||||
const D3D12_RESOURCE_DESC *resource_desc)
|
const D3D12_RESOURCE_DESC *resource_desc)
|
||||||
{
|
{
|
||||||
unsigned int max_layer_count = resource_desc->DepthOrArraySize;
|
unsigned int max_layer_count;
|
||||||
|
|
||||||
|
if (resource_desc->Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D)
|
||||||
|
{
|
||||||
|
if (desc->view_type == VK_IMAGE_VIEW_TYPE_2D_ARRAY)
|
||||||
|
max_layer_count = max(1, resource_desc->DepthOrArraySize >> desc->miplevel_idx);
|
||||||
|
else
|
||||||
|
max_layer_count = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
max_layer_count = resource_desc->DepthOrArraySize;
|
||||||
|
}
|
||||||
|
|
||||||
if (desc->layer_idx >= max_layer_count)
|
if (desc->layer_idx >= max_layer_count)
|
||||||
{
|
{
|
||||||
@@ -3186,6 +3198,7 @@ void d3d12_rtv_desc_create_rtv(struct d3d12_rtv_desc *rtv_desc, struct d3d12_dev
|
|||||||
vkd3d_desc.layer_count = desc->u.Texture2DArray.ArraySize;
|
vkd3d_desc.layer_count = desc->u.Texture2DArray.ArraySize;
|
||||||
if (desc->u.Texture2DArray.PlaneSlice)
|
if (desc->u.Texture2DArray.PlaneSlice)
|
||||||
FIXME("Ignoring plane slice %u.\n", desc->u.Texture2DArray.PlaneSlice);
|
FIXME("Ignoring plane slice %u.\n", desc->u.Texture2DArray.PlaneSlice);
|
||||||
|
vkd3d_texture_view_desc_normalise(&vkd3d_desc, &resource->desc);
|
||||||
break;
|
break;
|
||||||
case D3D12_RTV_DIMENSION_TEXTURE2DMS:
|
case D3D12_RTV_DIMENSION_TEXTURE2DMS:
|
||||||
vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_2D;
|
vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_2D;
|
||||||
@@ -3194,12 +3207,14 @@ void d3d12_rtv_desc_create_rtv(struct d3d12_rtv_desc *rtv_desc, struct d3d12_dev
|
|||||||
vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_2D_ARRAY;
|
vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_2D_ARRAY;
|
||||||
vkd3d_desc.layer_idx = desc->u.Texture2DMSArray.FirstArraySlice;
|
vkd3d_desc.layer_idx = desc->u.Texture2DMSArray.FirstArraySlice;
|
||||||
vkd3d_desc.layer_count = desc->u.Texture2DMSArray.ArraySize;
|
vkd3d_desc.layer_count = desc->u.Texture2DMSArray.ArraySize;
|
||||||
|
vkd3d_texture_view_desc_normalise(&vkd3d_desc, &resource->desc);
|
||||||
break;
|
break;
|
||||||
case D3D12_RTV_DIMENSION_TEXTURE3D:
|
case D3D12_RTV_DIMENSION_TEXTURE3D:
|
||||||
vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_2D_ARRAY;
|
vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_2D_ARRAY;
|
||||||
vkd3d_desc.miplevel_idx = desc->u.Texture3D.MipSlice;
|
vkd3d_desc.miplevel_idx = desc->u.Texture3D.MipSlice;
|
||||||
vkd3d_desc.layer_idx = desc->u.Texture3D.FirstWSlice;
|
vkd3d_desc.layer_idx = desc->u.Texture3D.FirstWSlice;
|
||||||
vkd3d_desc.layer_count = desc->u.Texture3D.WSize;
|
vkd3d_desc.layer_count = desc->u.Texture3D.WSize;
|
||||||
|
vkd3d_texture_view_desc_normalise(&vkd3d_desc, &resource->desc);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
FIXME("Unhandled view dimension %#x.\n", desc->ViewDimension);
|
FIXME("Unhandled view dimension %#x.\n", desc->ViewDimension);
|
||||||
|
Reference in New Issue
Block a user