vkd3d-shader/dxbc: Pass a vkd3d_shader_code structure to parse_dxbc().

This commit is contained in:
Henri Verbeet 2023-02-20 15:57:29 +01:00 committed by Alexandre Julliard
parent 2f762465a6
commit a06320c1fc
Notes: Alexandre Julliard 2023-02-23 22:20:24 +01:00
Approved-by: Zebediah Figura (@zfigura)
Approved-by: Henri Verbeet (@hverbeet)
Approved-by: Alexandre Julliard (@julliard)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/103

View File

@ -1725,12 +1725,14 @@ static const char *shader_get_string(const char *data, size_t data_size, DWORD o
return data + offset;
}
static int parse_dxbc(const char *data, size_t data_size,
static int parse_dxbc(const struct vkd3d_shader_code *dxbc,
struct vkd3d_shader_message_context *message_context, const char *source_name,
int (*section_handler)(const struct vkd3d_shader_dxbc_section_desc *section, void *ctx), void *ctx)
{
const struct vkd3d_shader_location location = {.source_name = source_name};
uint32_t checksum[4], calculated_checksum[4];
const char *data = dxbc->code;
size_t data_size = dxbc->size;
const char *ptr = data;
int ret = VKD3D_OK;
uint32_t chunk_count;
@ -1941,7 +1943,7 @@ int shader_parse_input_signature(const struct vkd3d_shader_code *dxbc,
int ret;
memset(signature, 0, sizeof(*signature));
if ((ret = parse_dxbc(dxbc->code, dxbc->size, message_context, NULL, isgn_handler, signature)) < 0)
if ((ret = parse_dxbc(dxbc, message_context, NULL, isgn_handler, signature)) < 0)
ERR("Failed to parse input signature.\n");
return ret;
@ -2030,7 +2032,7 @@ static int shader_extract_from_dxbc(const struct vkd3d_shader_code *dxbc,
memset(&desc->output_signature, 0, sizeof(desc->output_signature));
memset(&desc->patch_constant_signature, 0, sizeof(desc->patch_constant_signature));
ret = parse_dxbc(dxbc->code, dxbc->size, message_context, source_name, shdr_handler, desc);
ret = parse_dxbc(dxbc, message_context, source_name, shdr_handler, desc);
if (!desc->byte_code)
ret = VKD3D_ERROR_INVALID_ARGUMENT;
@ -2559,7 +2561,7 @@ int vkd3d_shader_parse_root_signature(const struct vkd3d_shader_code *dxbc,
*messages = NULL;
vkd3d_shader_message_context_init(&message_context, VKD3D_SHADER_LOG_INFO);
ret = parse_dxbc(dxbc->code, dxbc->size, &message_context, NULL, rts0_handler, root_signature);
ret = parse_dxbc(dxbc, &message_context, NULL, rts0_handler, root_signature);
vkd3d_shader_message_context_trace_messages(&message_context);
if (!vkd3d_shader_message_context_copy_messages(&message_context, messages))
ret = VKD3D_ERROR_OUT_OF_MEMORY;