mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d-shader: Handle "mixed" data in vkd3d_shader_scan_typed_resource_declaration().
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
ab45f0cafd
commit
2a14718fe5
@ -1197,15 +1197,17 @@ enum vkd3d_shader_resource_type
|
|||||||
enum vkd3d_shader_resource_data_type
|
enum vkd3d_shader_resource_data_type
|
||||||
{
|
{
|
||||||
/** Unsigned normalized integer. */
|
/** Unsigned normalized integer. */
|
||||||
VKD3D_SHADER_RESOURCE_DATA_UNORM = 0x1,
|
VKD3D_SHADER_RESOURCE_DATA_UNORM = 0x1,
|
||||||
/** Signed normalized integer. */
|
/** Signed normalized integer. */
|
||||||
VKD3D_SHADER_RESOURCE_DATA_SNORM = 0x2,
|
VKD3D_SHADER_RESOURCE_DATA_SNORM = 0x2,
|
||||||
/** Signed integer. */
|
/** Signed integer. */
|
||||||
VKD3D_SHADER_RESOURCE_DATA_INT = 0x3,
|
VKD3D_SHADER_RESOURCE_DATA_INT = 0x3,
|
||||||
/** Unsigned integer. */
|
/** Unsigned integer. */
|
||||||
VKD3D_SHADER_RESOURCE_DATA_UINT = 0x4,
|
VKD3D_SHADER_RESOURCE_DATA_UINT = 0x4,
|
||||||
/** IEEE floating-point. */
|
/** IEEE single-precision floating-point. */
|
||||||
VKD3D_SHADER_RESOURCE_DATA_FLOAT = 0x5,
|
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),
|
VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_RESOURCE_DATA_TYPE),
|
||||||
};
|
};
|
||||||
|
@ -477,6 +477,8 @@ struct vkd3d_shader_scan_context
|
|||||||
} *uav_ranges;
|
} *uav_ranges;
|
||||||
size_t uav_ranges_size;
|
size_t uav_ranges_size;
|
||||||
size_t uav_range_count;
|
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,
|
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_scan_descriptor_info *scan_descriptor_info,
|
||||||
struct vkd3d_shader_message_context *message_context)
|
struct vkd3d_shader_message_context *message_context)
|
||||||
{
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
memset(context, 0, sizeof(*context));
|
memset(context, 0, sizeof(*context));
|
||||||
context->scan_descriptor_info = scan_descriptor_info;
|
context->scan_descriptor_info = scan_descriptor_info;
|
||||||
context->message_context = message_context;
|
context->message_context = message_context;
|
||||||
context->location.source_name = compile_info->source_name;
|
context->location.source_name = compile_info->source_name;
|
||||||
context->location.line = 2; /* Line 1 is the version token. */
|
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)
|
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:
|
case VKD3D_DATA_FLOAT:
|
||||||
resource_data_type = VKD3D_SHADER_RESOURCE_DATA_FLOAT;
|
resource_data_type = VKD3D_SHADER_RESOURCE_DATA_FLOAT;
|
||||||
break;
|
break;
|
||||||
|
case VKD3D_DATA_MIXED:
|
||||||
|
resource_data_type = VKD3D_SHADER_RESOURCE_DATA_MIXED;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ERR("Invalid resource data type %#x.\n", semantic->resource_data_type[0]);
|
ERR("Invalid resource data type %#x.\n", semantic->resource_data_type[0]);
|
||||||
resource_data_type = VKD3D_SHADER_RESOURCE_DATA_FLOAT;
|
resource_data_type = VKD3D_SHADER_RESOURCE_DATA_FLOAT;
|
||||||
break;
|
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,
|
vkd3d_shader_scan_resource_declaration(context, &semantic->resource,
|
||||||
semantic->resource_type, resource_data_type);
|
semantic->resource_type, resource_data_type);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user