From: Francisco Casas fcasas@codeweavers.com
---
We may prefer to call hlsl_dump_state_block() somewhere else, like in fx.c. But for now this will do. --- libs/vkd3d-shader/hlsl.c | 18 ++++++++++++++++++ libs/vkd3d-shader/hlsl.h | 1 + libs/vkd3d-shader/hlsl.y | 4 ++++ 3 files changed, 23 insertions(+)
diff --git a/libs/vkd3d-shader/hlsl.c b/libs/vkd3d-shader/hlsl.c index 8a4b9a4ef..dc07f4164 100644 --- a/libs/vkd3d-shader/hlsl.c +++ b/libs/vkd3d-shader/hlsl.c @@ -2898,6 +2898,24 @@ void hlsl_dump_function(struct hlsl_ctx *ctx, const struct hlsl_ir_function_decl vkd3d_string_buffer_cleanup(&buffer); }
+void hlsl_dump_state_block(struct hlsl_ctx *ctx, const char *var_name, const struct hlsl_state_block *stateb) +{ + struct vkd3d_string_buffer buffer; + unsigned int i; + + vkd3d_string_buffer_init(&buffer); + vkd3d_string_buffer_printf(&buffer, "Dumping state block for variable '%s' (count: %lu).\n", var_name, stateb->count); + + for (i = 0; i < stateb->count; ++i) + { + vkd3d_string_buffer_printf(&buffer, "Field '%s':\n", stateb->entries[i].lhs_name); + dump_block(ctx, &buffer, stateb->entries[i].rhs_instrs); + } + + vkd3d_string_buffer_trace(&buffer); + vkd3d_string_buffer_cleanup(&buffer); +} + void hlsl_replace_node(struct hlsl_ir_node *old, struct hlsl_ir_node *new) { struct hlsl_src *src, *next; diff --git a/libs/vkd3d-shader/hlsl.h b/libs/vkd3d-shader/hlsl.h index d46675e70..892ae4497 100644 --- a/libs/vkd3d-shader/hlsl.h +++ b/libs/vkd3d-shader/hlsl.h @@ -1184,6 +1184,7 @@ void hlsl_block_cleanup(struct hlsl_block *block); bool hlsl_clone_block(struct hlsl_ctx *ctx, struct hlsl_block *dst_block, const struct hlsl_block *src_block);
void hlsl_dump_function(struct hlsl_ctx *ctx, const struct hlsl_ir_function_decl *func); +void hlsl_dump_state_block(struct hlsl_ctx *ctx, const char *var_name, const struct hlsl_state_block *stateb);
int hlsl_emit_bytecode(struct hlsl_ctx *ctx, struct hlsl_ir_function_decl *entry_func, enum vkd3d_shader_target_type target_type, struct vkd3d_shader_code *out); diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y index d88de8a6a..944f0f5f0 100644 --- a/libs/vkd3d-shader/hlsl.y +++ b/libs/vkd3d-shader/hlsl.y @@ -6484,6 +6484,10 @@ variable_def: { $$ = $1; $$->state_block = $4; + + if (TRACE_ON()) + hlsl_dump_state_block(ctx, $1->name, $4); + ctx->in_state_block = 0; hlsl_pop_scope(ctx); }