mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/fx: Improve state object nesting for the fx -> text output.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
This commit is contained in:
committed by
Henri Verbeet
parent
09226543fe
commit
e746a4c12f
Notes:
Henri Verbeet
2025-02-24 16:28:00 +01:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1392
@@ -3254,6 +3254,13 @@ static void fx_4_parse_shader_blob(struct fx_parser *parser, unsigned int object
|
|||||||
{VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_15},
|
{VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_15},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (!shader->offset)
|
||||||
|
{
|
||||||
|
parse_fx_print_indent(parser);
|
||||||
|
vkd3d_string_buffer_printf(&parser->buffer, "NULL");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
fx_parser_read_unstructured(parser, &data_size, shader->offset, sizeof(data_size));
|
fx_parser_read_unstructured(parser, &data_size, shader->offset, sizeof(data_size));
|
||||||
if (data_size)
|
if (data_size)
|
||||||
data = fx_parser_get_unstructured_ptr(parser, shader->offset + 4, data_size);
|
data = fx_parser_get_unstructured_ptr(parser, shader->offset + 4, data_size);
|
||||||
@@ -3859,12 +3866,14 @@ static void fx_4_parse_object_initializer(struct fx_parser *parser, const struct
|
|||||||
};
|
};
|
||||||
unsigned int i, element_count, count;
|
unsigned int i, element_count, count;
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
|
bool is_array;
|
||||||
|
|
||||||
if (!fx_4_object_has_initializer(type))
|
if (!fx_4_object_has_initializer(type))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
vkd3d_string_buffer_printf(&parser->buffer, " = {\n");
|
vkd3d_string_buffer_printf(&parser->buffer, " = {\n");
|
||||||
element_count = max(type->element_count, 1);
|
element_count = max(type->element_count, 1);
|
||||||
|
is_array = element_count > 1;
|
||||||
for (i = 0; i < element_count; ++i)
|
for (i = 0; i < element_count; ++i)
|
||||||
{
|
{
|
||||||
switch (type->typeinfo)
|
switch (type->typeinfo)
|
||||||
@@ -3880,9 +3889,21 @@ static void fx_4_parse_object_initializer(struct fx_parser *parser, const struct
|
|||||||
case FX_4_OBJECT_TYPE_SAMPLER_STATE:
|
case FX_4_OBJECT_TYPE_SAMPLER_STATE:
|
||||||
count = fx_parser_read_u32(parser);
|
count = fx_parser_read_u32(parser);
|
||||||
|
|
||||||
|
if (is_array)
|
||||||
|
{
|
||||||
|
parse_fx_start_indent(parser);
|
||||||
|
parse_fx_print_indent(parser);
|
||||||
|
vkd3d_string_buffer_printf(&parser->buffer, "{\n");
|
||||||
|
}
|
||||||
parse_fx_start_indent(parser);
|
parse_fx_start_indent(parser);
|
||||||
fx_4_parse_state_object_initializer(parser, count, type_classes[type->typeinfo]);
|
fx_4_parse_state_object_initializer(parser, count, type_classes[type->typeinfo]);
|
||||||
parse_fx_end_indent(parser);
|
parse_fx_end_indent(parser);
|
||||||
|
if (is_array)
|
||||||
|
{
|
||||||
|
parse_fx_print_indent(parser);
|
||||||
|
vkd3d_string_buffer_printf(&parser->buffer, "}");
|
||||||
|
parse_fx_end_indent(parser);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case FX_4_OBJECT_TYPE_PIXEL_SHADER:
|
case FX_4_OBJECT_TYPE_PIXEL_SHADER:
|
||||||
case FX_4_OBJECT_TYPE_VERTEX_SHADER:
|
case FX_4_OBJECT_TYPE_VERTEX_SHADER:
|
||||||
@@ -3901,7 +3922,7 @@ static void fx_4_parse_object_initializer(struct fx_parser *parser, const struct
|
|||||||
"Parsing object type %u is not implemented.", type->typeinfo);
|
"Parsing object type %u is not implemented.", type->typeinfo);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
vkd3d_string_buffer_printf(&parser->buffer, ",\n");
|
vkd3d_string_buffer_printf(&parser->buffer, is_array ? ",\n" : "\n");
|
||||||
}
|
}
|
||||||
vkd3d_string_buffer_printf(&parser->buffer, "}");
|
vkd3d_string_buffer_printf(&parser->buffer, "}");
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user