=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: libs/vkd3d: Implement cube shader resource views.
Alexandre Julliard
julliard at winehq.org
Wed Jun 27 16:03:24 CDT 2018
Module: vkd3d
Branch: master
Commit: 9b214c9ea7069bbe46752acadd79894aec3bab2d
URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=9b214c9ea7069bbe46752acadd79894aec3bab2d
Author: Józef Kucia <jkucia at codeweavers.com>
Date: Wed Jun 27 15:19:22 2018 +0200
libs/vkd3d: Implement cube shader resource views.
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
include/vkd3d_d3d12.idl | 2 +-
libs/vkd3d/resource.c | 43 +++++++++++++++++++++++++++++++++++++------
2 files changed, 38 insertions(+), 7 deletions(-)
diff --git a/include/vkd3d_d3d12.idl b/include/vkd3d_d3d12.idl
index 5bfc767..ec7df56 100644
--- a/include/vkd3d_d3d12.idl
+++ b/include/vkd3d_d3d12.idl
@@ -945,7 +945,7 @@ typedef struct D3D12_TEXCUBE_ARRAY_SRV
{
UINT MostDetailedMip;
UINT MipLevels;
- UINT First2DArraySlice;
+ UINT First2DArrayFace;
UINT NumCubes;
FLOAT ResourceMinLODClamp;
} D3D12_TEXCUBE_ARRAY_SRV;
diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c
index e45c900..e1a5adf 100644
--- a/libs/vkd3d/resource.c
+++ b/libs/vkd3d/resource.c
@@ -1150,6 +1150,7 @@ void d3d12_desc_create_srv(struct d3d12_desc *descriptor,
struct d3d12_device *device, struct d3d12_resource *resource,
const D3D12_SHADER_RESOURCE_VIEW_DESC *desc)
{
+ uint32_t miplevel_idx, miplevel_count, layer_idx, layer_count;
const struct vkd3d_format *format;
VkImageViewType vk_view_type;
struct vkd3d_view *view;
@@ -1174,22 +1175,52 @@ void d3d12_desc_create_srv(struct d3d12_desc *descriptor,
return;
}
- if (desc)
- FIXME("Unhandled SRV desc %p.\n", desc);
-
if (!(format = vkd3d_format_from_d3d12_resource_desc(&resource->desc, desc ? desc->Format : 0)))
{
FIXME("Failed to find format for %#x.\n", resource->desc.Format);
return;
}
+ vk_view_type = resource->desc.DepthOrArraySize > 1
+ ? VK_IMAGE_VIEW_TYPE_2D_ARRAY : VK_IMAGE_VIEW_TYPE_2D;
+ miplevel_idx = 0;
+ miplevel_count = VK_REMAINING_MIP_LEVELS;
+ layer_idx = 0;
+ layer_count = VK_REMAINING_ARRAY_LAYERS;
+ if (desc)
+ {
+ if (desc->Shader4ComponentMapping != D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING)
+ FIXME("Ignoring component mapping %#x.\n", desc->Shader4ComponentMapping);
+
+ switch (desc->ViewDimension)
+ {
+ case D3D12_SRV_DIMENSION_TEXTURECUBE:
+ vk_view_type = VK_IMAGE_VIEW_TYPE_CUBE;
+ miplevel_idx = desc->u.TextureCube.MostDetailedMip;
+ miplevel_count = desc->u.TextureCube.MipLevels;
+ layer_count = 6;
+ if (desc->u.TextureCube.ResourceMinLODClamp)
+ FIXME("Unhandled min LOD clamp %.8e.\n", desc->u.TextureCube.ResourceMinLODClamp);
+ break;
+ case D3D12_SRV_DIMENSION_TEXTURECUBEARRAY:
+ vk_view_type = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY;
+ miplevel_idx = desc->u.TextureCubeArray.MostDetailedMip;
+ miplevel_count = desc->u.TextureCubeArray.MipLevels;
+ layer_idx = desc->u.TextureCubeArray.First2DArrayFace;
+ layer_count = 6 * desc->u.TextureCubeArray.NumCubes;
+ if (desc->u.TextureCubeArray.ResourceMinLODClamp)
+ FIXME("Unhandled min LOD clamp %.8e.\n", desc->u.TextureCubeArray.ResourceMinLODClamp);
+ break;
+ default:
+ FIXME("Unhandled view dimension %#x.\n", desc->ViewDimension);
+ }
+ }
+
if (!(view = vkd3d_view_create()))
return;
- vk_view_type = resource->desc.DepthOrArraySize > 1
- ? VK_IMAGE_VIEW_TYPE_2D_ARRAY : VK_IMAGE_VIEW_TYPE_2D;
if (vkd3d_create_texture_view(device, resource, format, vk_view_type,
- 0, VK_REMAINING_MIP_LEVELS, 0, VK_REMAINING_ARRAY_LAYERS, true, &view->u.vk_image_view) < 0)
+ miplevel_idx, miplevel_count, layer_idx, layer_count, true, &view->u.vk_image_view) < 0)
{
vkd3d_free(view);
return;
More information about the wine-cvs
mailing list