From: Józef Kucia jkucia@codeweavers.com
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- include/vkd3d_shader.h | 11 ++++++++++- libs/vkd3d-shader/dxbc.c | 5 +++-- 2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h index 318a438501c9..e6cccd84cc67 100644 --- a/include/vkd3d_shader.h +++ b/include/vkd3d_shader.h @@ -571,6 +571,15 @@ enum vkd3d_sysval_semantic VKD3D_FORCE_32_BIT_ENUM(VKD3D_SYSVAL_SEMANTIC), };
+enum vkd3d_shader_minimum_precision +{ + VKD3D_SHADER_MINIMUM_PRECISION_NONE = 0, + VKD3D_SHADER_MINIMUM_PRECISION_FLOAT_16 = 1, + VKD3D_SHADER_MINIMUM_PRECISION_FLOAT_8_2 = 2, + VKD3D_SHADER_MINIMUM_PRECISION_INT_16 = 4, + VKD3D_SHADER_MINIMUM_PRECISION_UINT_16 = 5, +}; + struct vkd3d_shader_signature_element { const char *semantic_name; @@ -580,7 +589,7 @@ struct vkd3d_shader_signature_element enum vkd3d_component_type component_type; unsigned int register_index; unsigned int mask; - unsigned int min_precision; + enum vkd3d_shader_minimum_precision min_precision; };
struct vkd3d_shader_signature diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c index 92ea174bb6cf..a9cda49162d8 100644 --- a/libs/vkd3d-shader/dxbc.c +++ b/libs/vkd3d-shader/dxbc.c @@ -1992,11 +1992,11 @@ static int parse_dxbc(const char *data, size_t data_size, static int shader_parse_signature(DWORD tag, const char *data, DWORD data_size, struct vkd3d_shader_signature *s) { + bool has_stream_index, has_min_precision; struct vkd3d_shader_signature_element *e; const char *ptr = data; unsigned int i; DWORD count; - bool has_stream_index, has_min_precision;
if (!require_space(0, 2, sizeof(DWORD), data_size)) { @@ -2032,6 +2032,7 @@ static int shader_parse_signature(DWORD tag, const char *data, DWORD data_size, read_dword(&ptr, &e[i].stream_index); else e[i].stream_index = 0; + read_dword(&ptr, &name_offset); if (!(e[i].semantic_name = shader_get_string(data, data_size, name_offset))) { @@ -2048,7 +2049,7 @@ static int shader_parse_signature(DWORD tag, const char *data, DWORD data_size, if (has_min_precision) read_dword(&ptr, &e[i].min_precision); else - e[i].min_precision = 0; + e[i].min_precision = VKD3D_SHADER_MINIMUM_PRECISION_NONE;
TRACE("Stream: %u, semantic: %s, semantic idx: %u, sysval_semantic %#x, " "type %u, register idx: %u, use_mask %#x, input_mask %#x, precision %u.\n",