mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d-shader: Pass a vkd3d_shader_parser structure to shader_sm4_read_instruction().
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
12190ee3a9
commit
bb482332bf
@ -1527,24 +1527,25 @@ static void shader_sm4_read_instruction_modifier(DWORD modifier, struct vkd3d_sh
|
||||
}
|
||||
}
|
||||
|
||||
void shader_sm4_read_instruction(void *data, const DWORD **ptr, struct vkd3d_shader_instruction *ins)
|
||||
void shader_sm4_read_instruction(struct vkd3d_shader_parser *parser,
|
||||
const uint32_t **ptr, struct vkd3d_shader_instruction *ins)
|
||||
{
|
||||
const struct vkd3d_sm4_opcode_info *opcode_info;
|
||||
DWORD opcode_token, opcode, previous_token;
|
||||
struct vkd3d_sm4_data *priv = data;
|
||||
uint32_t opcode_token, opcode, previous_token;
|
||||
struct vkd3d_sm4_data *sm4 = parser->data;
|
||||
unsigned int i, len;
|
||||
size_t remaining;
|
||||
const DWORD *p;
|
||||
DWORD precise;
|
||||
|
||||
list_move_head(&priv->src_free, &priv->src);
|
||||
list_move_head(&sm4->src_free, &sm4->src);
|
||||
|
||||
if (*ptr >= priv->end)
|
||||
if (*ptr >= sm4->end)
|
||||
{
|
||||
WARN("End of byte-code, failed to read opcode.\n");
|
||||
goto fail;
|
||||
}
|
||||
remaining = priv->end - *ptr;
|
||||
remaining = sm4->end - *ptr;
|
||||
|
||||
opcode_token = *(*ptr)++;
|
||||
opcode = opcode_token & VKD3D_SM4_OPCODE_MASK;
|
||||
@ -1581,9 +1582,9 @@ void shader_sm4_read_instruction(void *data, const DWORD **ptr, struct vkd3d_sha
|
||||
ins->structured = false;
|
||||
ins->predicate = NULL;
|
||||
ins->dst_count = strlen(opcode_info->dst_info);
|
||||
ins->dst = priv->dst_param;
|
||||
ins->dst = sm4->dst_param;
|
||||
ins->src_count = strlen(opcode_info->src_info);
|
||||
ins->src = priv->src_param;
|
||||
ins->src = sm4->src_param;
|
||||
ins->resource_type = VKD3D_SHADER_RESOURCE_NONE;
|
||||
ins->resource_stride = 0;
|
||||
ins->resource_data_type[0] = VKD3D_DATA_FLOAT;
|
||||
@ -1597,7 +1598,7 @@ void shader_sm4_read_instruction(void *data, const DWORD **ptr, struct vkd3d_sha
|
||||
|
||||
if (opcode_info->read_opcode_func)
|
||||
{
|
||||
opcode_info->read_opcode_func(ins, opcode, opcode_token, p, len, priv);
|
||||
opcode_info->read_opcode_func(ins, opcode, opcode_token, p, len, sm4);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1618,19 +1619,19 @@ void shader_sm4_read_instruction(void *data, const DWORD **ptr, struct vkd3d_sha
|
||||
|
||||
for (i = 0; i < ins->dst_count; ++i)
|
||||
{
|
||||
if (!(shader_sm4_read_dst_param(priv, &p, *ptr, map_data_type(opcode_info->dst_info[i]),
|
||||
&priv->dst_param[i])))
|
||||
if (!(shader_sm4_read_dst_param(sm4, &p, *ptr, map_data_type(opcode_info->dst_info[i]),
|
||||
&sm4->dst_param[i])))
|
||||
{
|
||||
ins->handler_idx = VKD3DSIH_INVALID;
|
||||
return;
|
||||
}
|
||||
priv->dst_param[i].modifiers |= instruction_dst_modifier;
|
||||
sm4->dst_param[i].modifiers |= instruction_dst_modifier;
|
||||
}
|
||||
|
||||
for (i = 0; i < ins->src_count; ++i)
|
||||
{
|
||||
if (!(shader_sm4_read_src_param(priv, &p, *ptr, map_data_type(opcode_info->src_info[i]),
|
||||
&priv->src_param[i])))
|
||||
if (!(shader_sm4_read_src_param(sm4, &p, *ptr, map_data_type(opcode_info->src_info[i]),
|
||||
&sm4->src_param[i])))
|
||||
{
|
||||
ins->handler_idx = VKD3DSIH_INVALID;
|
||||
return;
|
||||
@ -1641,7 +1642,7 @@ void shader_sm4_read_instruction(void *data, const DWORD **ptr, struct vkd3d_sha
|
||||
return;
|
||||
|
||||
fail:
|
||||
*ptr = priv->end;
|
||||
*ptr = sm4->end;
|
||||
ins->handler_idx = VKD3DSIH_INVALID;
|
||||
return;
|
||||
}
|
||||
|
@ -95,9 +95,8 @@ static void vkd3d_glsl_handle_instruction(struct vkd3d_glsl_generator *generator
|
||||
return;
|
||||
}
|
||||
|
||||
int vkd3d_glsl_generator_generate(void *parser_data, const uint32_t *parser_ptr,
|
||||
struct vkd3d_glsl_generator *generator,
|
||||
struct vkd3d_shader_code *out)
|
||||
int vkd3d_glsl_generator_generate(struct vkd3d_glsl_generator *generator,
|
||||
struct vkd3d_shader_parser *parser, struct vkd3d_shader_code *out)
|
||||
{
|
||||
void *code;
|
||||
struct vkd3d_shader_instruction ins;
|
||||
@ -105,9 +104,9 @@ int vkd3d_glsl_generator_generate(void *parser_data, const uint32_t *parser_ptr,
|
||||
vkd3d_string_buffer_printf(&generator->buffer, "#version 440\n\n");
|
||||
vkd3d_string_buffer_printf(&generator->buffer, "void main()\n{\n");
|
||||
|
||||
while (!shader_sm4_is_end(parser_data, &parser_ptr))
|
||||
while (!shader_sm4_is_end(parser->data, &parser->ptr))
|
||||
{
|
||||
shader_sm4_read_instruction(parser_data, &parser_ptr, &ins);
|
||||
shader_sm4_read_instruction(parser, &parser->ptr, &ins);
|
||||
|
||||
if (ins.handler_idx == VKD3DSIH_INVALID)
|
||||
{
|
||||
|
@ -1841,7 +1841,7 @@ enum vkd3d_result vkd3d_dxbc_binary_to_text(struct vkd3d_shader_parser *parser,
|
||||
{
|
||||
struct vkd3d_shader_instruction ins;
|
||||
|
||||
shader_sm4_read_instruction(parser->data, &ptr, &ins);
|
||||
shader_sm4_read_instruction(parser, &ptr, &ins);
|
||||
if (ins.handler_idx == VKD3DSIH_INVALID)
|
||||
{
|
||||
WARN("Skipping unrecognized instruction.\n");
|
||||
|
@ -956,7 +956,7 @@ static int scan_dxbc(const struct vkd3d_shader_compile_info *compile_info,
|
||||
|
||||
while (!shader_sm4_is_end(parser.data, &parser.ptr))
|
||||
{
|
||||
shader_sm4_read_instruction(parser.data, &parser.ptr, &instruction);
|
||||
shader_sm4_read_instruction(&parser, &parser.ptr, &instruction);
|
||||
|
||||
if (instruction.handler_idx == VKD3DSIH_INVALID)
|
||||
{
|
||||
@ -1068,7 +1068,7 @@ static int compile_dxbc_tpf(const struct vkd3d_shader_compile_info *compile_info
|
||||
return VKD3D_ERROR;
|
||||
}
|
||||
|
||||
ret = vkd3d_glsl_generator_generate(parser.data, parser.ptr, glsl_generator, out);
|
||||
ret = vkd3d_glsl_generator_generate(glsl_generator, &parser, out);
|
||||
|
||||
vkd3d_glsl_generator_destroy(glsl_generator);
|
||||
vkd3d_shader_parser_destroy(&parser);
|
||||
@ -1087,7 +1087,7 @@ static int compile_dxbc_tpf(const struct vkd3d_shader_compile_info *compile_info
|
||||
|
||||
while (!shader_sm4_is_end(parser.data, &parser.ptr))
|
||||
{
|
||||
shader_sm4_read_instruction(parser.data, &parser.ptr, &instruction);
|
||||
shader_sm4_read_instruction(&parser, &parser.ptr, &instruction);
|
||||
|
||||
if (instruction.handler_idx == VKD3DSIH_INVALID)
|
||||
{
|
||||
|
@ -893,8 +893,8 @@ void *shader_sm4_init(const DWORD *byte_code, size_t byte_code_size,
|
||||
void shader_sm4_free(struct vkd3d_shader_parser *parser);
|
||||
void shader_sm4_read_header(struct vkd3d_shader_parser *parser,
|
||||
const uint32_t **ptr, struct vkd3d_shader_version *shader_version);
|
||||
void shader_sm4_read_instruction(void *data, const DWORD **ptr,
|
||||
struct vkd3d_shader_instruction *ins);
|
||||
void shader_sm4_read_instruction(struct vkd3d_shader_parser *parser,
|
||||
const uint32_t **ptr, struct vkd3d_shader_instruction *ins);
|
||||
bool shader_sm4_is_end(void *data, const DWORD **ptr);
|
||||
|
||||
struct vkd3d_string_buffer
|
||||
@ -998,9 +998,8 @@ struct vkd3d_glsl_generator;
|
||||
struct vkd3d_glsl_generator *vkd3d_glsl_generator_create(const struct vkd3d_shader_version *version,
|
||||
const struct vkd3d_shader_compile_info *compile_info,
|
||||
struct vkd3d_shader_message_context *message_context);
|
||||
int vkd3d_glsl_generator_generate(void *parser_data, const uint32_t *parser_ptr,
|
||||
struct vkd3d_glsl_generator *generator,
|
||||
struct vkd3d_shader_code *out);
|
||||
int vkd3d_glsl_generator_generate(struct vkd3d_glsl_generator *generator,
|
||||
struct vkd3d_shader_parser *parser, struct vkd3d_shader_code *out);
|
||||
void vkd3d_glsl_generator_destroy(struct vkd3d_glsl_generator *generator);
|
||||
|
||||
struct vkd3d_dxbc_compiler;
|
||||
|
Loading…
x
Reference in New Issue
Block a user