From 44c80c60b8bb9e439f83dfe6155e78bc90c3b537 Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Sun, 26 Oct 2025 22:39:24 +0100 Subject: [PATCH] vkd3d-shader/dxil: Parse string attributes with string value in parameter attribute groups. --- libs/vkd3d-shader/dxil.c | 17 ++++++++++++++--- libs/vkd3d-shader/vkd3d_shader_private.h | 1 + 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/libs/vkd3d-shader/dxil.c b/libs/vkd3d-shader/dxil.c index 7d00fcb87..a63034b53 100644 --- a/libs/vkd3d-shader/dxil.c +++ b/libs/vkd3d-shader/dxil.c @@ -853,6 +853,7 @@ enum dxil_attribute_kind ATTRIBUTE_WELL_KNOWN = 0, ATTRIBUTE_WELL_KNOWN_WITH_INTEGER_VALUE = 1, ATTRIBUTE_STRING = 3, + ATTRIBUTE_STRING_WITH_STRING_VALUE = 4, }; struct dxil_attribute @@ -866,6 +867,7 @@ struct dxil_attribute union { uint64_t numeric; + const char *string; } value; }; @@ -8589,11 +8591,15 @@ static void sm6_parser_init_attribute_groups(struct sm6_parser *dxil, const stru failed = true; break; - /* TODO Other attribute kinds. */ + case ATTRIBUTE_STRING_WITH_STRING_VALUE: + if (!(attribute->key.string = dxil_record_to_zero_terminated_string(record, &k, dxil)) + || !(attribute->value.string = dxil_record_to_zero_terminated_string(record, &k, dxil))) + failed = true; + break; default: - /* Do not emit an error to avoid rejecting valid shaders, - * given that so far we don't use attributes but don't support all the kinds. */ + vkd3d_shader_parser_error(&dxil->p, VKD3D_SHADER_ERROR_DXIL_INVALID_ATTRIBUTE_KIND, + "Unrecognised PARAMATTR_GROUP attribute kind %"PRIu64".", kind); failed = true; break; } @@ -10693,6 +10699,11 @@ static void sm6_parser_cleanup_attribute_groups(struct sm6_parser *dxil) case ATTRIBUTE_STRING: vkd3d_free((void *)attribute->key.string); break; + + case ATTRIBUTE_STRING_WITH_STRING_VALUE: + vkd3d_free((void *)attribute->key.string); + vkd3d_free((void *)attribute->value.string); + break; } } } diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h index 2dd3c92bc..b690cc7e1 100644 --- a/libs/vkd3d-shader/vkd3d_shader_private.h +++ b/libs/vkd3d-shader/vkd3d_shader_private.h @@ -231,6 +231,7 @@ enum vkd3d_shader_error VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED = 8021, VKD3D_SHADER_ERROR_DXIL_DUPLICATED_BLOCK = 8022, VKD3D_SHADER_ERROR_DXIL_INVALID_STRING = 8023, + VKD3D_SHADER_ERROR_DXIL_INVALID_ATTRIBUTE_KIND = 8024, VKD3D_SHADER_WARNING_DXIL_UNKNOWN_MAGIC_NUMBER = 8300, VKD3D_SHADER_WARNING_DXIL_UNKNOWN_SHADER_TYPE = 8301,