mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d-shader/dxbc: Pass a vkd3d_shader_code structure to parse_dxbc().
This commit is contained in:
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
@ -1725,12 +1725,14 @@ static const char *shader_get_string(const char *data, size_t data_size, DWORD o
|
|||||||
return data + offset;
|
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,
|
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)
|
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};
|
const struct vkd3d_shader_location location = {.source_name = source_name};
|
||||||
uint32_t checksum[4], calculated_checksum[4];
|
uint32_t checksum[4], calculated_checksum[4];
|
||||||
|
const char *data = dxbc->code;
|
||||||
|
size_t data_size = dxbc->size;
|
||||||
const char *ptr = data;
|
const char *ptr = data;
|
||||||
int ret = VKD3D_OK;
|
int ret = VKD3D_OK;
|
||||||
uint32_t chunk_count;
|
uint32_t chunk_count;
|
||||||
@ -1941,7 +1943,7 @@ int shader_parse_input_signature(const struct vkd3d_shader_code *dxbc,
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
memset(signature, 0, sizeof(*signature));
|
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");
|
ERR("Failed to parse input signature.\n");
|
||||||
|
|
||||||
return ret;
|
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->output_signature, 0, sizeof(desc->output_signature));
|
||||||
memset(&desc->patch_constant_signature, 0, sizeof(desc->patch_constant_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)
|
if (!desc->byte_code)
|
||||||
ret = VKD3D_ERROR_INVALID_ARGUMENT;
|
ret = VKD3D_ERROR_INVALID_ARGUMENT;
|
||||||
|
|
||||||
@ -2559,7 +2561,7 @@ int vkd3d_shader_parse_root_signature(const struct vkd3d_shader_code *dxbc,
|
|||||||
*messages = NULL;
|
*messages = NULL;
|
||||||
vkd3d_shader_message_context_init(&message_context, VKD3D_SHADER_LOG_INFO);
|
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);
|
vkd3d_shader_message_context_trace_messages(&message_context);
|
||||||
if (!vkd3d_shader_message_context_copy_messages(&message_context, messages))
|
if (!vkd3d_shader_message_context_copy_messages(&message_context, messages))
|
||||||
ret = VKD3D_ERROR_OUT_OF_MEMORY;
|
ret = VKD3D_ERROR_OUT_OF_MEMORY;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user