Henri Verbeet : vkd3d-shader: Handle "mixed" data in vkd3d_shader_scan_typed_resource_declaration().
Alexandre Julliard
julliard at winehq.org
Mon Feb 28 15:48:38 CST 2022
Module: vkd3d
Branch: master
Commit: 2a14718fe57b25fa5238ac0264b7f35681248f3f
URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=2a14718fe57b25fa5238ac0264b7f35681248f3f
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Mon Feb 28 12:23:46 2022 +0100
vkd3d-shader: Handle "mixed" data in vkd3d_shader_scan_typed_resource_declaration().
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
include/vkd3d_shader.h | 14 ++++++++------
libs/vkd3d-shader/vkd3d_shader_main.c | 25 +++++++++++++++++++++++++
2 files changed, 33 insertions(+), 6 deletions(-)
diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h
index fece054..1576411 100644
--- a/include/vkd3d_shader.h
+++ b/include/vkd3d_shader.h
@@ -1197,15 +1197,17 @@ enum vkd3d_shader_resource_type
enum vkd3d_shader_resource_data_type
{
/** Unsigned normalized integer. */
- VKD3D_SHADER_RESOURCE_DATA_UNORM = 0x1,
+ VKD3D_SHADER_RESOURCE_DATA_UNORM = 0x1,
/** Signed normalized integer. */
- VKD3D_SHADER_RESOURCE_DATA_SNORM = 0x2,
+ VKD3D_SHADER_RESOURCE_DATA_SNORM = 0x2,
/** Signed integer. */
- VKD3D_SHADER_RESOURCE_DATA_INT = 0x3,
+ VKD3D_SHADER_RESOURCE_DATA_INT = 0x3,
/** Unsigned integer. */
- VKD3D_SHADER_RESOURCE_DATA_UINT = 0x4,
- /** IEEE floating-point. */
- VKD3D_SHADER_RESOURCE_DATA_FLOAT = 0x5,
+ VKD3D_SHADER_RESOURCE_DATA_UINT = 0x4,
+ /** IEEE single-precision floating-point. */
+ VKD3D_SHADER_RESOURCE_DATA_FLOAT = 0x5,
+ /** Undefined/type-less. \since 1.3 */
+ VKD3D_SHADER_RESOURCE_DATA_MIXED = 0x6,
VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_RESOURCE_DATA_TYPE),
};
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
index a25e28a..298289c 100644
--- a/libs/vkd3d-shader/vkd3d_shader_main.c
+++ b/libs/vkd3d-shader/vkd3d_shader_main.c
@@ -477,6 +477,8 @@ struct vkd3d_shader_scan_context
} *uav_ranges;
size_t uav_ranges_size;
size_t uav_range_count;
+
+ enum vkd3d_shader_api_version api_version;
};
static void vkd3d_shader_scan_context_init(struct vkd3d_shader_scan_context *context,
@@ -484,11 +486,22 @@ static void vkd3d_shader_scan_context_init(struct vkd3d_shader_scan_context *con
struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info,
struct vkd3d_shader_message_context *message_context)
{
+ unsigned int i;
+
memset(context, 0, sizeof(*context));
context->scan_descriptor_info = scan_descriptor_info;
context->message_context = message_context;
context->location.source_name = compile_info->source_name;
context->location.line = 2; /* Line 1 is the version token. */
+ context->api_version = VKD3D_SHADER_API_VERSION_1_2;
+
+ for (i = 0; i < compile_info->option_count; ++i)
+ {
+ const struct vkd3d_shader_compile_option *option = &compile_info->options[i];
+
+ if (option->name == VKD3D_SHADER_COMPILE_OPTION_API_VERSION)
+ context->api_version = option->value;
+ }
}
static void vkd3d_shader_scan_context_cleanup(struct vkd3d_shader_scan_context *context)
@@ -741,11 +754,23 @@ static void vkd3d_shader_scan_typed_resource_declaration(struct vkd3d_shader_sca
case VKD3D_DATA_FLOAT:
resource_data_type = VKD3D_SHADER_RESOURCE_DATA_FLOAT;
break;
+ case VKD3D_DATA_MIXED:
+ resource_data_type = VKD3D_SHADER_RESOURCE_DATA_MIXED;
+ break;
default:
ERR("Invalid resource data type %#x.\n", semantic->resource_data_type[0]);
resource_data_type = VKD3D_SHADER_RESOURCE_DATA_FLOAT;
break;
}
+
+ if (context->api_version < VKD3D_SHADER_API_VERSION_1_3
+ && resource_data_type >= VKD3D_SHADER_RESOURCE_DATA_MIXED)
+ {
+ ERR("Invalid resource data type %#x for API version %#x.\n",
+ semantic->resource_data_type[0], context->api_version);
+ resource_data_type = VKD3D_SHADER_RESOURCE_DATA_FLOAT;
+ }
+
vkd3d_shader_scan_resource_declaration(context, &semantic->resource,
semantic->resource_type, resource_data_type);
}
More information about the wine-cvs
mailing list