vkd3d-shader/fx: Output value expressions for fx_2_0.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
This commit is contained in:
Nikolay Sivov
2025-06-07 23:43:50 +02:00
committed by Henri Verbeet
parent ddb433d552
commit 3f6013ea27
Notes: Henri Verbeet 2025-06-16 17:49:09 +02:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1570

View File

@@ -4252,24 +4252,6 @@ static void fx_parse_fx_2_data_blob(struct fx_parser *parser)
fx_parser_skip(parser, align(size, 4)); fx_parser_skip(parser, align(size, 4));
} }
static void fx_dump_blob(struct fx_parser *parser, const void *blob, uint32_t size)
{
const uint32_t *data = blob;
unsigned int i, j, n;
size /= sizeof(*data);
i = 0;
while (i < size)
{
parse_fx_print_indent(parser);
n = min(size - i, 8);
for (j = 0; j < n; ++j)
vkd3d_string_buffer_printf(&parser->buffer, "0x%08x,", data[i + j]);
i += n;
vkd3d_string_buffer_printf(&parser->buffer, "\n");
}
}
static void fx_2_parse_fxlvm_expression(struct fx_parser *parser, const uint32_t *blob, uint32_t size); static void fx_2_parse_fxlvm_expression(struct fx_parser *parser, const uint32_t *blob, uint32_t size);
static void fx_parse_fx_2_array_selector(struct fx_parser *parser) static void fx_parse_fx_2_array_selector(struct fx_parser *parser)
@@ -4313,7 +4295,7 @@ static void fx_parse_fx_2_complex_state(struct fx_parser *parser)
uint32_t state; uint32_t state;
uint32_t assignment_type; uint32_t assignment_type;
} state; } state;
const char *data; const uint32_t *data;
uint32_t size; uint32_t size;
fx_parser_read_u32s(parser, &state, sizeof(state)); fx_parser_read_u32s(parser, &state, sizeof(state));
@@ -4342,9 +4324,9 @@ static void fx_parse_fx_2_complex_state(struct fx_parser *parser)
else if (state.assignment_type == FX_2_ASSIGNMENT_CODE_BLOB) else if (state.assignment_type == FX_2_ASSIGNMENT_CODE_BLOB)
{ {
size = fx_parser_read_u32(parser); size = fx_parser_read_u32(parser);
vkd3d_string_buffer_printf(&parser->buffer, "blob size %u\n", size);
data = fx_parser_get_ptr(parser, size); data = fx_parser_get_ptr(parser, size);
fx_dump_blob(parser, data, size); vkd3d_string_buffer_printf(&parser->buffer, "blob size %u\n", size);
fx_2_parse_fxlvm_expression(parser, data, size);
fx_parser_skip(parser, align(size, 4)); fx_parser_skip(parser, align(size, 4));
} }
else else
@@ -5053,6 +5035,9 @@ static void fx_2_parse_fxlvm_expression(struct fx_parser *parser, const uint32_t
uint32_t section_size; uint32_t section_size;
const uint32_t *data; const uint32_t *data;
if (!blob)
return;
/* Literal constants, using 64-bit floats. */ /* Literal constants, using 64-bit floats. */
if ((data = find_d3dbc_section(blob, count, TAG_CLIT, &section_size))) if ((data = find_d3dbc_section(blob, count, TAG_CLIT, &section_size)))
{ {