mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/fx: Use appropriate BlendState description when tracing.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
This commit is contained in:
committed by
Henri Verbeet
parent
5d5d892830
commit
960244bf1e
Notes:
Henri Verbeet
2025-05-06 19:06:09 +02:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1484
@@ -2655,11 +2655,8 @@ fx_4_states[] =
|
|||||||
{ "ComputeShader", HLSL_CLASS_PASS, HLSL_CLASS_SCALAR, FX_COMPUTESHADER, 1, 1, 58 },
|
{ "ComputeShader", HLSL_CLASS_PASS, HLSL_CLASS_SCALAR, FX_COMPUTESHADER, 1, 1, 58 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static void resolve_fx_4_state_block_values(struct hlsl_ir_var *var, struct hlsl_state_block_entry *entry,
|
static const struct fx_4_state fx_5_blend_states[] =
|
||||||
struct fx_write_context *fx)
|
|
||||||
{
|
{
|
||||||
static const struct fx_4_state fx_5_blend_states[] =
|
|
||||||
{
|
|
||||||
{ "AlphaToCoverageEnable", HLSL_CLASS_BLEND_STATE, HLSL_CLASS_SCALAR, FX_BOOL, 1, 1, 36, bool_values },
|
{ "AlphaToCoverageEnable", HLSL_CLASS_BLEND_STATE, HLSL_CLASS_SCALAR, FX_BOOL, 1, 1, 36, bool_values },
|
||||||
{ "BlendEnable", HLSL_CLASS_BLEND_STATE, HLSL_CLASS_SCALAR, FX_BOOL, 1, 8, 37, bool_values },
|
{ "BlendEnable", HLSL_CLASS_BLEND_STATE, HLSL_CLASS_SCALAR, FX_BOOL, 1, 8, 37, bool_values },
|
||||||
{ "SrcBlend", HLSL_CLASS_BLEND_STATE, HLSL_CLASS_SCALAR, FX_UINT, 1, 8, 38, blend_values },
|
{ "SrcBlend", HLSL_CLASS_BLEND_STATE, HLSL_CLASS_SCALAR, FX_UINT, 1, 8, 38, blend_values },
|
||||||
@@ -2669,24 +2666,20 @@ static void resolve_fx_4_state_block_values(struct hlsl_ir_var *var, struct hlsl
|
|||||||
{ "DestBlendAlpha", HLSL_CLASS_BLEND_STATE, HLSL_CLASS_SCALAR, FX_UINT, 1, 8, 42, blend_values },
|
{ "DestBlendAlpha", HLSL_CLASS_BLEND_STATE, HLSL_CLASS_SCALAR, FX_UINT, 1, 8, 42, blend_values },
|
||||||
{ "BlendOpAlpha", HLSL_CLASS_BLEND_STATE, HLSL_CLASS_SCALAR, FX_UINT, 1, 8, 43, blendop_values },
|
{ "BlendOpAlpha", HLSL_CLASS_BLEND_STATE, HLSL_CLASS_SCALAR, FX_UINT, 1, 8, 43, blendop_values },
|
||||||
{ "RenderTargetWriteMask", HLSL_CLASS_BLEND_STATE, HLSL_CLASS_SCALAR, FX_UINT8, 1, 8, 44 },
|
{ "RenderTargetWriteMask", HLSL_CLASS_BLEND_STATE, HLSL_CLASS_SCALAR, FX_UINT8, 1, 8, 44 },
|
||||||
};
|
};
|
||||||
|
|
||||||
struct state_table
|
struct fx_4_state_table
|
||||||
{
|
{
|
||||||
const struct fx_4_state *ptr;
|
const struct fx_4_state *ptr;
|
||||||
unsigned int count;
|
unsigned int count;
|
||||||
} table;
|
};
|
||||||
|
|
||||||
const struct hlsl_type *type = hlsl_get_multiarray_element_type(var->data_type);
|
static struct fx_4_state_table fx_4_get_state_table(enum hlsl_type_class type_class,
|
||||||
struct replace_state_context replace_context;
|
unsigned int major, unsigned int minor)
|
||||||
const struct fx_4_state *state = NULL;
|
{
|
||||||
struct hlsl_type *state_type = NULL;
|
struct fx_4_state_table table;
|
||||||
struct hlsl_ctx *ctx = fx->ctx;
|
|
||||||
enum hlsl_base_type base_type;
|
|
||||||
struct hlsl_ir_node *node;
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
if (type->class == HLSL_CLASS_BLEND_STATE && hlsl_version_ge(ctx, 4, 1))
|
if (type_class == HLSL_CLASS_BLEND_STATE && (major == 5 || (major == 4 && minor == 1)))
|
||||||
{
|
{
|
||||||
table.ptr = fx_5_blend_states;
|
table.ptr = fx_5_blend_states;
|
||||||
table.count = ARRAY_SIZE(fx_5_blend_states);
|
table.count = ARRAY_SIZE(fx_5_blend_states);
|
||||||
@@ -2697,6 +2690,24 @@ static void resolve_fx_4_state_block_values(struct hlsl_ir_var *var, struct hlsl
|
|||||||
table.count = ARRAY_SIZE(fx_4_states);
|
table.count = ARRAY_SIZE(fx_4_states);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return table;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void resolve_fx_4_state_block_values(struct hlsl_ir_var *var,
|
||||||
|
struct hlsl_state_block_entry *entry, struct fx_write_context *fx)
|
||||||
|
{
|
||||||
|
const struct hlsl_type *type = hlsl_get_multiarray_element_type(var->data_type);
|
||||||
|
struct replace_state_context replace_context;
|
||||||
|
const struct fx_4_state *state = NULL;
|
||||||
|
struct hlsl_type *state_type = NULL;
|
||||||
|
struct hlsl_ctx *ctx = fx->ctx;
|
||||||
|
enum hlsl_base_type base_type;
|
||||||
|
struct fx_4_state_table table;
|
||||||
|
struct hlsl_ir_node *node;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
table = fx_4_get_state_table(type->class, ctx->profile->major_version, ctx->profile->minor_version);
|
||||||
|
|
||||||
for (i = 0; i < table.count; ++i)
|
for (i = 0; i < table.count; ++i)
|
||||||
{
|
{
|
||||||
if (type->class == table.ptr[i].container
|
if (type->class == table.ptr[i].container
|
||||||
@@ -3439,7 +3450,11 @@ struct fx_parser
|
|||||||
struct vkd3d_shader_message_context *message_context;
|
struct vkd3d_shader_message_context *message_context;
|
||||||
struct vkd3d_string_buffer buffer;
|
struct vkd3d_string_buffer buffer;
|
||||||
unsigned int indent;
|
unsigned int indent;
|
||||||
unsigned int version;
|
struct
|
||||||
|
{
|
||||||
|
unsigned int major;
|
||||||
|
unsigned int minor;
|
||||||
|
} version;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
const uint8_t *ptr;
|
const uint8_t *ptr;
|
||||||
@@ -4904,16 +4919,18 @@ static void fx_4_parse_state_object_initializer(struct fx_parser *parser, uint32
|
|||||||
};
|
};
|
||||||
const struct rhs_named_value *named_value;
|
const struct rhs_named_value *named_value;
|
||||||
struct fx_5_shader shader = { 0 };
|
struct fx_5_shader shader = { 0 };
|
||||||
|
struct fx_4_state_table table;
|
||||||
unsigned int shader_type = 0;
|
unsigned int shader_type = 0;
|
||||||
uint32_t i, j, comp_count;
|
uint32_t i, j, comp_count;
|
||||||
struct fx_4_state *state;
|
struct fx_4_state *state;
|
||||||
|
|
||||||
|
table = fx_4_get_state_table(type_class, parser->version.major, parser->version.minor);
|
||||||
|
|
||||||
for (i = 0; i < count; ++i)
|
for (i = 0; i < count; ++i)
|
||||||
{
|
{
|
||||||
fx_parser_read_u32s(parser, &entry, sizeof(entry));
|
fx_parser_read_u32s(parser, &entry, sizeof(entry));
|
||||||
|
|
||||||
if (!(state = bsearch(&entry.id, fx_4_states, ARRAY_SIZE(fx_4_states),
|
if (!(state = bsearch(&entry.id, table.ptr, table.count, sizeof(*table.ptr), fx_4_state_id_compare)))
|
||||||
sizeof(*fx_4_states), fx_4_state_id_compare)))
|
|
||||||
{
|
{
|
||||||
fx_parser_error(parser, VKD3D_SHADER_ERROR_FX_INVALID_DATA, "Unrecognized state id %#x.", entry.id);
|
fx_parser_error(parser, VKD3D_SHADER_ERROR_FX_INVALID_DATA, "Unrecognized state id %#x.", entry.id);
|
||||||
break;
|
break;
|
||||||
@@ -5183,7 +5200,7 @@ static void fx_parse_fx_4_technique(struct fx_parser *parser)
|
|||||||
name = fx_4_get_string(parser, technique.name);
|
name = fx_4_get_string(parser, technique.name);
|
||||||
|
|
||||||
parse_fx_print_indent(parser);
|
parse_fx_print_indent(parser);
|
||||||
vkd3d_string_buffer_printf(&parser->buffer, "technique%u %s", parser->version, name);
|
vkd3d_string_buffer_printf(&parser->buffer, "technique%u %s", parser->version.major == 4 ? 10 : 11, name);
|
||||||
fx_parse_fx_4_annotations(parser);
|
fx_parse_fx_4_annotations(parser);
|
||||||
|
|
||||||
vkd3d_string_buffer_printf(&parser->buffer, "\n");
|
vkd3d_string_buffer_printf(&parser->buffer, "\n");
|
||||||
@@ -5277,7 +5294,6 @@ static void fx_4_parse(struct fx_parser *parser)
|
|||||||
} header;
|
} header;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
parser->version = 10;
|
|
||||||
fx_parser_read_u32s(parser, &header, sizeof(header));
|
fx_parser_read_u32s(parser, &header, sizeof(header));
|
||||||
parser->buffer_count = header.buffer_count;
|
parser->buffer_count = header.buffer_count;
|
||||||
parser->object_count = header.object_count;
|
parser->object_count = header.object_count;
|
||||||
@@ -5331,7 +5347,6 @@ static void fx_5_parse(struct fx_parser *parser)
|
|||||||
uint32_t class_instance_element_count;
|
uint32_t class_instance_element_count;
|
||||||
} header;
|
} header;
|
||||||
|
|
||||||
parser->version = 11;
|
|
||||||
fx_parser_read_u32s(parser, &header, sizeof(header));
|
fx_parser_read_u32s(parser, &header, sizeof(header));
|
||||||
parser->buffer_count = header.buffer_count;
|
parser->buffer_count = header.buffer_count;
|
||||||
parser->object_count = header.object_count;
|
parser->object_count = header.object_count;
|
||||||
@@ -5390,13 +5405,20 @@ int fx_parse(const struct vkd3d_shader_compile_info *compile_info,
|
|||||||
switch (version)
|
switch (version)
|
||||||
{
|
{
|
||||||
case 0xfeff0901:
|
case 0xfeff0901:
|
||||||
|
parser.version.major = 3;
|
||||||
fx_2_parse(&parser);
|
fx_2_parse(&parser);
|
||||||
break;
|
break;
|
||||||
case 0xfeff1001:
|
case 0xfeff1001:
|
||||||
|
parser.version.major = 4;
|
||||||
|
fx_4_parse(&parser);
|
||||||
|
break;
|
||||||
case 0xfeff1011:
|
case 0xfeff1011:
|
||||||
|
parser.version.major = 4;
|
||||||
|
parser.version.minor = 1;
|
||||||
fx_4_parse(&parser);
|
fx_4_parse(&parser);
|
||||||
break;
|
break;
|
||||||
case 0xfeff2001:
|
case 0xfeff2001:
|
||||||
|
parser.version.major = 5;
|
||||||
fx_5_parse(&parser);
|
fx_5_parse(&parser);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Reference in New Issue
Block a user