Wine-devel
Threads by month
- ----- 2026 -----
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
February 2021
- 81 participants
- 640 discussions
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50672
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
v2: Fixed commit message.
dlls/oleaut32/vartype.c | 7 ++++++-
include/msvcrt/corecrt_wstdio.h | 11 +++++++++++
2 files changed, 17 insertions(+), 1 deletion(-)
1
0
[tools] testbot/LogUtils: Rename the $ExtraGroup variable in ParseWineTestReport().
by Francois Gouget 16 Feb '21
by Francois Gouget 16 Feb '21
16 Feb '21
This makes it clearer that it has nothing to do with setting up the
current group of errors.
Signed-off-by: Francois Gouget <fgouget(a)codeweavers.com>
---
testbot/lib/WineTestBot/LogUtils.pm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/testbot/lib/WineTestBot/LogUtils.pm b/testbot/lib/WineTestBot/LogUtils.pm
index 7a729584e..2cb2ad290 100644
--- a/testbot/lib/WineTestBot/LogUtils.pm
+++ b/testbot/lib/WineTestBot/LogUtils.pm
@@ -738,10 +738,10 @@ sub ParseWineTestReport($$$)
my $ExtraCount = @{$LogInfo->{Extra}};
if ($ExtraCount)
{
- my $CurGroup = _AddLogGroup($LogInfo, "Report validation errors");
- $CurGroup->{Errors} = $LogInfo->{Extra};
+ my $ExtraGroup = _AddLogGroup($LogInfo, "Report validation errors");
+ $ExtraGroup->{Errors} = $LogInfo->{Extra};
my @LineNos = (0) x $ExtraCount;
- $CurGroup->{LineNos} = \@LineNos;
+ $ExtraGroup->{LineNos} = \@LineNos;
$LogInfo->{ErrCount} += $ExtraCount;
}
--
2.20.1
1
0
[tools] testbot/TestWTBS: There is no file for the "No patch found" disposition.
by Francois Gouget 16 Feb '21
by Francois Gouget 16 Feb '21
16 Feb '21
Signed-off-by: Francois Gouget <fgouget(a)codeweavers.com>
---
testbot/tests/TestWTBS | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/testbot/tests/TestWTBS b/testbot/tests/TestWTBS
index dbd1130ca..8a77b00de 100755
--- a/testbot/tests/TestWTBS
+++ b/testbot/tests/TestWTBS
@@ -1382,7 +1382,9 @@ sub CheckPatches()
}
elsif ($Patch->Subject =~ /\bWTBS\b/)
{
- ok(($Patch->Subject =~ /NoPatch/ or $Patch->Disposition eq "Reply to a patch series"),
+ ok(($Patch->Subject =~ /NoPatch/ or
+ $Patch->Disposition eq "Reply to a patch series" or
+ $Patch->Disposition eq "No patch found"),
"Found no file for patch ". $Patch->Id .": ". $Patch->Subject)
or diag("Disposition=". $Patch->Disposition);
}
--
2.20.1
1
0
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50672
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
dlls/oleaut32/vartype.c | 7 ++++++-
include/msvcrt/corecrt_wstdio.h | 11 +++++++++++
include/msvcrt/locale.h | 1 +
3 files changed, 18 insertions(+), 1 deletion(-)
1
0
16 Feb '21
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
libs/vkd3d-shader/trace.c | 51 ++++++++++++++++++++++++++++----
libs/vkd3d-shader/vkd3d_shader_main.c | 2 +-
libs/vkd3d-shader/vkd3d_shader_private.h | 3 +-
3 files changed, 49 insertions(+), 7 deletions(-)
diff --git a/libs/vkd3d-shader/trace.c b/libs/vkd3d-shader/trace.c
index 18e80e59..fb5370ad 100644
--- a/libs/vkd3d-shader/trace.c
+++ b/libs/vkd3d-shader/trace.c
@@ -300,10 +300,17 @@ shader_input_sysval_semantic_names[] =
{VKD3D_SIV_LINE_DENSITY_TESS_FACTOR, "finalLineDensityTessFactor"},
};
+struct vkd3d_d3d_asm_colours
+{
+ const char *reset;
+ const char *opcode;
+};
+
struct vkd3d_d3d_asm_compiler
{
struct vkd3d_string_buffer buffer;
struct vkd3d_shader_version shader_version;
+ struct vkd3d_d3d_asm_colours colours;
};
static int shader_ver_ge(const struct vkd3d_shader_version *v, int major, int minor)
@@ -1334,7 +1341,8 @@ static void shader_dump_register_space(struct vkd3d_d3d_asm_compiler *compiler,
static void shader_print_opcode(struct vkd3d_d3d_asm_compiler *compiler, enum vkd3d_shader_opcode opcode)
{
- vkd3d_string_buffer_printf(&compiler->buffer, "%s", shader_opcode_names[opcode]);
+ vkd3d_string_buffer_printf(&compiler->buffer, "%s%s%s", compiler->colours.opcode,
+ shader_opcode_names[opcode], compiler->colours.reset);
}
static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
@@ -1360,9 +1368,10 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
{
case VKD3DSIH_DCL:
case VKD3DSIH_DCL_UAV_TYPED:
+ vkd3d_string_buffer_printf(buffer, "%s", compiler->colours.opcode);
shader_dump_decl_usage(compiler, &ins->declaration.semantic, ins->flags);
shader_dump_ins_modifiers(compiler, &ins->declaration.semantic.resource.reg);
- shader_addline(buffer, " ");
+ vkd3d_string_buffer_printf(buffer, "%s ", compiler->colours.reset);
shader_dump_register(compiler, &ins->declaration.semantic.resource.reg.reg);
shader_dump_register_space(compiler, ins->declaration.semantic.resource.register_space);
break;
@@ -1602,21 +1611,53 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
shader_addline(buffer, "\n");
}
-enum vkd3d_result vkd3d_dxbc_binary_to_text(void *data, struct vkd3d_shader_code *out)
+enum vkd3d_result vkd3d_dxbc_binary_to_text(void *data,
+ const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out)
{
+ enum vkd3d_shader_compile_option_formatting_flags formatting;
struct vkd3d_shader_version *shader_version;
struct vkd3d_d3d_asm_compiler compiler;
enum vkd3d_result result = VKD3D_OK;
struct vkd3d_string_buffer *buffer;
const DWORD *ptr;
+ unsigned int i;
void *code;
+ static const struct vkd3d_d3d_asm_colours no_colours =
+ {
+ .reset = "",
+ .opcode = "",
+ };
+ static const struct vkd3d_d3d_asm_colours colours =
+ {
+ .reset = "\x1b[m",
+ .opcode = "\x1b[96;1m",
+ };
+
+ formatting = VKD3D_SHADER_COMPILE_OPTION_FORMATTING_INDENT
+ | VKD3D_SHADER_COMPILE_OPTION_FORMATTING_HEADER;
+ if (compile_info)
+ {
+ for (i = 0; i < compile_info->option_count; ++i)
+ {
+ const struct vkd3d_shader_compile_option *option = &compile_info->options[i];
+
+ if (option->name == VKD3D_SHADER_COMPILE_OPTION_FORMATTING)
+ formatting = option->value;
+ }
+ }
+
+ if (formatting & VKD3D_SHADER_COMPILE_OPTION_FORMATTING_COLOUR)
+ compiler.colours = colours;
+ else
+ compiler.colours = no_colours;
+
buffer = &compiler.buffer;
vkd3d_string_buffer_init(buffer);
shader_version = &compiler.shader_version;
shader_sm4_read_header(data, &ptr, shader_version);
- vkd3d_string_buffer_printf(buffer, "%s_%u_%u\n",
+ vkd3d_string_buffer_printf(buffer, "%s%s_%u_%u\n", compiler.colours.reset,
shader_get_type_prefix(shader_version->type), shader_version->major, shader_version->minor);
while (!shader_sm4_is_end(data, &ptr))
@@ -1656,7 +1697,7 @@ void vkd3d_shader_trace(void *data)
const char *p, *q, *end;
struct vkd3d_shader_code code;
- if (vkd3d_dxbc_binary_to_text(data, &code) != VKD3D_OK)
+ if (vkd3d_dxbc_binary_to_text(data, NULL, &code) != VKD3D_OK)
return;
end = (const char *)code.code + code.size;
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
index c1306cac..6f1482ab 100644
--- a/libs/vkd3d-shader/vkd3d_shader_main.c
+++ b/libs/vkd3d-shader/vkd3d_shader_main.c
@@ -920,7 +920,7 @@ static int compile_dxbc_tpf(const struct vkd3d_shader_compile_info *compile_info
if (compile_info->target_type == VKD3D_SHADER_TARGET_D3D_ASM)
{
vkd3d_shader_free_scan_descriptor_info(&scan_descriptor_info);
- ret = vkd3d_dxbc_binary_to_text(parser.data, out);
+ ret = vkd3d_dxbc_binary_to_text(parser.data, compile_info, out);
vkd3d_shader_parser_destroy(&parser);
return ret;
}
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index 19758481..e9e10baf 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -851,7 +851,8 @@ struct vkd3d_string_buffer
unsigned int content_size;
};
-enum vkd3d_result vkd3d_dxbc_binary_to_text(void *data, struct vkd3d_shader_code *out) DECLSPEC_HIDDEN;
+enum vkd3d_result vkd3d_dxbc_binary_to_text(void *data,
+ const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out) DECLSPEC_HIDDEN;
void vkd3d_string_buffer_cleanup(struct vkd3d_string_buffer *buffer) DECLSPEC_HIDDEN;
void vkd3d_string_buffer_init(struct vkd3d_string_buffer *buffer) DECLSPEC_HIDDEN;
int vkd3d_string_buffer_printf(struct vkd3d_string_buffer *buffer,
--
2.11.0
1
0
[PATCH vkd3d 4/5] vkd3d-shader: Introduce a helper to print d3d-asm opcodes.
by Henri Verbeet 16 Feb '21
by Henri Verbeet 16 Feb '21
16 Feb '21
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
libs/vkd3d-shader/trace.c | 98 ++++++++++++++++++++++-------------------------
1 file changed, 46 insertions(+), 52 deletions(-)
diff --git a/libs/vkd3d-shader/trace.c b/libs/vkd3d-shader/trace.c
index 2865fa47..18e80e59 100644
--- a/libs/vkd3d-shader/trace.c
+++ b/libs/vkd3d-shader/trace.c
@@ -583,8 +583,6 @@ static void shader_dump_decl_usage(struct vkd3d_d3d_asm_compiler *compiler,
{
struct vkd3d_string_buffer *buffer = &compiler->buffer;
- shader_addline(buffer, "dcl");
-
if (semantic->resource.reg.reg.type == VKD3DSPR_SAMPLER)
{
switch (semantic->resource_type)
@@ -610,9 +608,6 @@ static void shader_dump_decl_usage(struct vkd3d_d3d_asm_compiler *compiler,
{
if (semantic->resource.reg.reg.type == VKD3DSPR_RESOURCE)
shader_addline(buffer, "_resource_");
- else
- /* non typed UAVs don't go through this code path */
- shader_addline(buffer, "_uav_typed_");
shader_dump_resource_type(compiler, semantic->resource_type);
if (semantic->resource.reg.reg.type == VKD3DSPR_UAV)
@@ -1337,12 +1332,30 @@ static void shader_dump_register_space(struct vkd3d_d3d_asm_compiler *compiler,
vkd3d_string_buffer_printf(&compiler->buffer, ", space=%u", register_space);
}
+static void shader_print_opcode(struct vkd3d_d3d_asm_compiler *compiler, enum vkd3d_shader_opcode opcode)
+{
+ vkd3d_string_buffer_printf(&compiler->buffer, "%s", shader_opcode_names[opcode]);
+}
+
static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
const struct vkd3d_shader_instruction *ins)
{
struct vkd3d_string_buffer *buffer = &compiler->buffer;
unsigned int i;
+ if (ins->predicate)
+ {
+ vkd3d_string_buffer_printf(buffer, "(");
+ shader_dump_src_param(compiler, ins->predicate);
+ vkd3d_string_buffer_printf(buffer, ") ");
+ }
+
+ /* PixWin marks instructions with the coissue flag with a '+' */
+ if (ins->coissue)
+ vkd3d_string_buffer_printf(buffer, "+");
+
+ shader_print_opcode(compiler, ins->handler_idx);
+
switch (ins->handler_idx)
{
case VKD3DSIH_DCL:
@@ -1355,7 +1368,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
break;
case VKD3DSIH_DCL_CONSTANT_BUFFER:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_register(compiler, &ins->declaration.cb.src.reg);
if (shader_ver_ge(&compiler->shader_version, 5, 1))
shader_addline(buffer, "[%u]", ins->declaration.cb.size);
@@ -1365,27 +1378,24 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
break;
case VKD3DSIH_DCL_FUNCTION_BODY:
- shader_addline(buffer, "%s fb%u",
- shader_opcode_names[ins->handler_idx], ins->declaration.index);
+ vkd3d_string_buffer_printf(buffer, " fb%u", ins->declaration.index);
break;
case VKD3DSIH_DCL_FUNCTION_TABLE:
- shader_addline(buffer, "%s ft%u = {...}",
- shader_opcode_names[ins->handler_idx], ins->declaration.index);
+ vkd3d_string_buffer_printf(buffer, " ft%u = {...}", ins->declaration.index);
break;
case VKD3DSIH_DCL_GLOBAL_FLAGS:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_global_flags(compiler, ins->flags);
break;
case VKD3DSIH_DCL_HS_MAX_TESSFACTOR:
- shader_addline(buffer, "%s %.8e", shader_opcode_names[ins->handler_idx],
- ins->declaration.max_tessellation_factor);
+ vkd3d_string_buffer_printf(buffer, " %.8e", ins->declaration.max_tessellation_factor);
break;
case VKD3DSIH_DCL_IMMEDIATE_CONSTANT_BUFFER:
- shader_addline(buffer, "%s {\n", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " {\n");
for (i = 0; i < ins->declaration.icb->vec4_count; ++i)
{
shader_addline(buffer, " {0x%08x, 0x%08x, 0x%08x, 0x%08x},\n",
@@ -1398,20 +1408,20 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
break;
case VKD3DSIH_DCL_INDEX_RANGE:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.index_range.dst);
shader_addline(buffer, " %u", ins->declaration.index_range.register_count);
break;
case VKD3DSIH_DCL_INDEXABLE_TEMP:
- shader_addline(buffer, "%s x%u[%u], %u", shader_opcode_names[ins->handler_idx],
+ vkd3d_string_buffer_printf(buffer, " x%u[%u], %u",
ins->declaration.indexable_temp.register_idx,
ins->declaration.indexable_temp.register_size,
ins->declaration.indexable_temp.component_count);
break;
case VKD3DSIH_DCL_INPUT_PS:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_interpolation_mode(compiler, ins->flags);
shader_addline(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.dst);
@@ -1421,14 +1431,14 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_INPUT_SGV:
case VKD3DSIH_DCL_INPUT_SIV:
case VKD3DSIH_DCL_OUTPUT_SIV:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.register_semantic.reg);
shader_addline(buffer, ", ");
shader_dump_shader_input_sysval_semantic(compiler, ins->declaration.register_semantic.sysval_semantic);
break;
case VKD3DSIH_DCL_INPUT_PS_SIV:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_interpolation_mode(compiler, ins->flags);
shader_addline(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.register_semantic.reg);
@@ -1438,37 +1448,36 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_INPUT:
case VKD3DSIH_DCL_OUTPUT:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.dst);
break;
case VKD3DSIH_DCL_INPUT_PRIMITIVE:
case VKD3DSIH_DCL_OUTPUT_TOPOLOGY:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_primitive_type(compiler, &ins->declaration.primitive_type);
break;
case VKD3DSIH_DCL_INTERFACE:
- shader_addline(buffer, "%s fp%u[%u][%u] = {...}",
- shader_opcode_names[ins->handler_idx], ins->declaration.fp.index,
+ vkd3d_string_buffer_printf(buffer, " fp%u[%u][%u] = {...}", ins->declaration.fp.index,
ins->declaration.fp.array_size, ins->declaration.fp.body_count);
break;
case VKD3DSIH_DCL_RESOURCE_RAW:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.raw_resource.resource.reg);
shader_dump_register_space(compiler, ins->declaration.raw_resource.resource.register_space);
break;
case VKD3DSIH_DCL_RESOURCE_STRUCTURED:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.structured_resource.resource.reg);
shader_addline(buffer, ", %u", ins->declaration.structured_resource.byte_stride);
shader_dump_register_space(compiler, ins->declaration.structured_resource.resource.register_space);
break;
case VKD3DSIH_DCL_SAMPLER:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_register(compiler, &ins->declaration.sampler.src.reg);
if (ins->flags == VKD3DSI_SAMPLER_COMPARISON_MODE)
shader_addline(buffer, ", comparisonMode");
@@ -1482,46 +1491,45 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_INPUT_CONTROL_POINT_COUNT:
case VKD3DSIH_DCL_OUTPUT_CONTROL_POINT_COUNT:
case VKD3DSIH_DCL_VERTICES_OUT:
- shader_addline(buffer, "%s %u", shader_opcode_names[ins->handler_idx], ins->declaration.count);
+ vkd3d_string_buffer_printf(buffer, " %u", ins->declaration.count);
break;
case VKD3DSIH_DCL_TESSELLATOR_DOMAIN:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_tessellator_domain(compiler, ins->declaration.tessellator_domain);
break;
case VKD3DSIH_DCL_TESSELLATOR_OUTPUT_PRIMITIVE:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_tessellator_output_primitive(compiler, ins->declaration.tessellator_output_primitive);
break;
case VKD3DSIH_DCL_TESSELLATOR_PARTITIONING:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_tessellator_partitioning(compiler, ins->declaration.tessellator_partitioning);
break;
case VKD3DSIH_DCL_TGSM_RAW:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.tgsm_raw.reg);
shader_addline(buffer, ", %u", ins->declaration.tgsm_raw.byte_count);
break;
case VKD3DSIH_DCL_TGSM_STRUCTURED:
- shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
+ vkd3d_string_buffer_printf(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.tgsm_structured.reg);
shader_addline(buffer, ", %u, %u", ins->declaration.tgsm_structured.byte_stride,
ins->declaration.tgsm_structured.structure_count);
break;
case VKD3DSIH_DCL_THREAD_GROUP:
- shader_addline(buffer, "%s %u, %u, %u", shader_opcode_names[ins->handler_idx],
+ vkd3d_string_buffer_printf(buffer, " %u, %u, %u",
ins->declaration.thread_group_size.x,
ins->declaration.thread_group_size.y,
ins->declaration.thread_group_size.z);
break;
case VKD3DSIH_DCL_UAV_RAW:
- shader_addline(buffer, "%s", shader_opcode_names[ins->handler_idx]);
shader_dump_uav_flags(compiler, ins->flags);
shader_addline(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.raw_resource.resource.reg);
@@ -1529,7 +1537,6 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
break;
case VKD3DSIH_DCL_UAV_STRUCTURED:
- shader_addline(buffer, "%s", shader_opcode_names[ins->handler_idx]);
shader_dump_uav_flags(compiler, ins->flags);
shader_addline(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.structured_resource.resource.reg);
@@ -1538,37 +1545,24 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
break;
case VKD3DSIH_DEF:
- shader_addline(buffer, "def c%u = %.8e, %.8e, %.8e, %.8e",
+ vkd3d_string_buffer_printf(buffer, " c%u = %.8e, %.8e, %.8e, %.8e",
shader_get_float_offset(ins->dst[0].reg.type, ins->dst[0].reg.idx[0].offset),
ins->src[0].reg.u.immconst_float[0], ins->src[0].reg.u.immconst_float[1],
ins->src[0].reg.u.immconst_float[2], ins->src[0].reg.u.immconst_float[3]);
break;
case VKD3DSIH_DEFI:
- shader_addline(buffer, "defi i%u = %d, %d, %d, %d", ins->dst[0].reg.idx[0].offset,
+ vkd3d_string_buffer_printf(buffer, " i%u = %d, %d, %d, %d", ins->dst[0].reg.idx[0].offset,
ins->src[0].reg.u.immconst_uint[0], ins->src[0].reg.u.immconst_uint[1],
ins->src[0].reg.u.immconst_uint[2], ins->src[0].reg.u.immconst_uint[3]);
break;
case VKD3DSIH_DEFB:
- shader_addline(buffer, "defb b%u = %s",
- ins->dst[0].reg.idx[0].offset, ins->src[0].reg.u.immconst_uint[0] ? "true" : "false");
+ vkd3d_string_buffer_printf(buffer, " b%u = %s", ins->dst[0].reg.idx[0].offset,
+ ins->src[0].reg.u.immconst_uint[0] ? "true" : "false");
break;
default:
- if (ins->predicate)
- {
- shader_addline(buffer, "(");
- shader_dump_src_param(compiler, ins->predicate);
- shader_addline(buffer, ") ");
- }
-
- /* PixWin marks instructions with the coissue flag with a '+' */
- if (ins->coissue)
- shader_addline(buffer, "+");
-
- shader_addline(buffer, "%s", shader_opcode_names[ins->handler_idx]);
-
shader_dump_instruction_flags(compiler, ins);
if (vkd3d_shader_instruction_has_texel_offset(ins))
{
--
2.11.0
1
0
[PATCH vkd3d 3/5] vkd3d-shader: Store the output buffer in struct vkd3d_d3d_asm_compiler.
by Henri Verbeet 16 Feb '21
by Henri Verbeet 16 Feb '21
16 Feb '21
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
libs/vkd3d-shader/trace.c | 247 +++++++++++++++++++++++++---------------------
1 file changed, 134 insertions(+), 113 deletions(-)
diff --git a/libs/vkd3d-shader/trace.c b/libs/vkd3d-shader/trace.c
index 24eadf33..2865fa47 100644
--- a/libs/vkd3d-shader/trace.c
+++ b/libs/vkd3d-shader/trace.c
@@ -302,6 +302,7 @@ shader_input_sysval_semantic_names[] =
struct vkd3d_d3d_asm_compiler
{
+ struct vkd3d_string_buffer buffer;
struct vkd3d_shader_version shader_version;
};
@@ -338,7 +339,7 @@ static unsigned int shader_get_float_offset(enum vkd3d_shader_register_type regi
}
}
-static void shader_dump_global_flags(struct vkd3d_string_buffer *buffer, DWORD global_flags)
+static void shader_dump_global_flags(struct vkd3d_d3d_asm_compiler *compiler, uint32_t global_flags)
{
unsigned int i;
@@ -360,76 +361,78 @@ static void shader_dump_global_flags(struct vkd3d_string_buffer *buffer, DWORD g
{
if (global_flags & global_flag_info[i].flag)
{
- shader_addline(buffer, "%s", global_flag_info[i].name);
+ vkd3d_string_buffer_printf(&compiler->buffer, "%s", global_flag_info[i].name);
global_flags &= ~global_flag_info[i].flag;
if (global_flags)
- shader_addline(buffer, " | ");
+ vkd3d_string_buffer_printf(&compiler->buffer, " | ");
}
}
if (global_flags)
- shader_addline(buffer, "unknown_flags(%#x)", global_flags);
+ vkd3d_string_buffer_printf(&compiler->buffer, "unknown_flags(%#x)", global_flags);
}
-static void shader_dump_sync_flags(struct vkd3d_string_buffer *buffer, DWORD sync_flags)
+static void shader_dump_sync_flags(struct vkd3d_d3d_asm_compiler *compiler, uint32_t sync_flags)
{
if (sync_flags & VKD3DSSF_GLOBAL_UAV)
{
- shader_addline(buffer, "_uglobal");
+ vkd3d_string_buffer_printf(&compiler->buffer, "_uglobal");
sync_flags &= ~VKD3DSSF_GLOBAL_UAV;
}
if (sync_flags & VKD3DSSF_GROUP_SHARED_MEMORY)
{
- shader_addline(buffer, "_g");
+ vkd3d_string_buffer_printf(&compiler->buffer, "_g");
sync_flags &= ~VKD3DSSF_GROUP_SHARED_MEMORY;
}
if (sync_flags & VKD3DSSF_THREAD_GROUP)
{
- shader_addline(buffer, "_t");
+ vkd3d_string_buffer_printf(&compiler->buffer, "_t");
sync_flags &= ~VKD3DSSF_THREAD_GROUP;
}
if (sync_flags)
- shader_addline(buffer, "_unknown_flags(%#x)", sync_flags);
+ vkd3d_string_buffer_printf(&compiler->buffer, "_unknown_flags(%#x)", sync_flags);
}
-static void shader_dump_precise_flags(struct vkd3d_string_buffer *buffer, DWORD flags)
+static void shader_dump_precise_flags(struct vkd3d_d3d_asm_compiler *compiler, uint32_t flags)
{
if (!(flags & VKD3DSI_PRECISE_XYZW))
return;
- shader_addline(buffer, " [precise");
+ vkd3d_string_buffer_printf(&compiler->buffer, " [precise");
if (flags != VKD3DSI_PRECISE_XYZW)
{
- shader_addline(buffer, "(%s%s%s%s)",
+ vkd3d_string_buffer_printf(&compiler->buffer, "(%s%s%s%s)",
flags & VKD3DSI_PRECISE_X ? "x" : "",
flags & VKD3DSI_PRECISE_Y ? "y" : "",
flags & VKD3DSI_PRECISE_Z ? "z" : "",
flags & VKD3DSI_PRECISE_W ? "w" : "");
}
- shader_addline(buffer, "]");
+ vkd3d_string_buffer_printf(&compiler->buffer, "]");
}
-static void shader_dump_uav_flags(struct vkd3d_string_buffer *buffer, DWORD uav_flags)
+static void shader_dump_uav_flags(struct vkd3d_d3d_asm_compiler *compiler, uint32_t uav_flags)
{
if (uav_flags & VKD3DSUF_GLOBALLY_COHERENT)
{
- shader_addline(buffer, "_glc");
+ vkd3d_string_buffer_printf(&compiler->buffer, "_glc");
uav_flags &= ~VKD3DSUF_GLOBALLY_COHERENT;
}
if (uav_flags & VKD3DSUF_ORDER_PRESERVING_COUNTER)
{
- shader_addline(buffer, "_opc");
+ vkd3d_string_buffer_printf(&compiler->buffer, "_opc");
uav_flags &= ~VKD3DSUF_ORDER_PRESERVING_COUNTER;
}
if (uav_flags)
- shader_addline(buffer, "_unknown_flags(%#x)", uav_flags);
+ vkd3d_string_buffer_printf(&compiler->buffer, "_unknown_flags(%#x)", uav_flags);
}
-static void shader_dump_tessellator_domain(struct vkd3d_string_buffer *buffer,
+static void shader_dump_tessellator_domain(struct vkd3d_d3d_asm_compiler *compiler,
enum vkd3d_tessellator_domain domain)
{
+ struct vkd3d_string_buffer *buffer = &compiler->buffer;
+
shader_addline(buffer, "domain_");
switch (domain)
{
@@ -448,9 +451,11 @@ static void shader_dump_tessellator_domain(struct vkd3d_string_buffer *buffer,
}
}
-static void shader_dump_tessellator_output_primitive(struct vkd3d_string_buffer *buffer,
+static void shader_dump_tessellator_output_primitive(struct vkd3d_d3d_asm_compiler *compiler,
enum vkd3d_shader_tessellator_output_primitive output_primitive)
{
+ struct vkd3d_string_buffer *buffer = &compiler->buffer;
+
shader_addline(buffer, "output_");
switch (output_primitive)
{
@@ -472,9 +477,11 @@ static void shader_dump_tessellator_output_primitive(struct vkd3d_string_buffer
}
}
-static void shader_dump_tessellator_partitioning(struct vkd3d_string_buffer *buffer,
+static void shader_dump_tessellator_partitioning(struct vkd3d_d3d_asm_compiler *compiler,
enum vkd3d_shader_tessellator_partitioning partitioning)
{
+ struct vkd3d_string_buffer *buffer = &compiler->buffer;
+
shader_addline(buffer, "partitioning_");
switch (partitioning)
{
@@ -496,7 +503,7 @@ static void shader_dump_tessellator_partitioning(struct vkd3d_string_buffer *buf
}
}
-static void shader_dump_shader_input_sysval_semantic(struct vkd3d_string_buffer *buffer,
+static void shader_dump_shader_input_sysval_semantic(struct vkd3d_d3d_asm_compiler *compiler,
enum vkd3d_shader_input_sysval_semantic semantic)
{
unsigned int i;
@@ -505,15 +512,15 @@ static void shader_dump_shader_input_sysval_semantic(struct vkd3d_string_buffer
{
if (shader_input_sysval_semantic_names[i].sysval_semantic == semantic)
{
- shader_addline(buffer, "%s", shader_input_sysval_semantic_names[i].sysval_name);
+ vkd3d_string_buffer_printf(&compiler->buffer, "%s", shader_input_sysval_semantic_names[i].sysval_name);
return;
}
}
- shader_addline(buffer, "unknown_shader_input_sysval_semantic(%#x)", semantic);
+ vkd3d_string_buffer_printf(&compiler->buffer, "unknown_shader_input_sysval_semantic(%#x)", semantic);
}
-static void shader_dump_resource_type(struct vkd3d_string_buffer *buffer, enum vkd3d_shader_resource_type type)
+static void shader_dump_resource_type(struct vkd3d_d3d_asm_compiler *compiler, enum vkd3d_shader_resource_type type)
{
static const char *const resource_type_names[] =
{
@@ -531,12 +538,12 @@ static void shader_dump_resource_type(struct vkd3d_string_buffer *buffer, enum v
};
if (type < ARRAY_SIZE(resource_type_names))
- shader_addline(buffer, "%s", resource_type_names[type]);
+ vkd3d_string_buffer_printf(&compiler->buffer, "%s", resource_type_names[type]);
else
- shader_addline(buffer, "unknown");
+ vkd3d_string_buffer_printf(&compiler->buffer, "unknown");
}
-static void shader_dump_data_type(struct vkd3d_string_buffer *buffer, const enum vkd3d_data_type *type)
+static void shader_dump_data_type(struct vkd3d_d3d_asm_compiler *compiler, const enum vkd3d_data_type *type)
{
static const char *const data_type_names[] =
{
@@ -557,7 +564,7 @@ static void shader_dump_data_type(struct vkd3d_string_buffer *buffer, const enum
const char *name;
int i;
- shader_addline(buffer, "(");
+ vkd3d_string_buffer_printf(&compiler->buffer, "(");
for (i = 0; i < 4; i++)
{
@@ -565,15 +572,17 @@ static void shader_dump_data_type(struct vkd3d_string_buffer *buffer, const enum
name = data_type_names[type[i]];
else
name = "unknown";
- shader_addline(buffer, "%s%s", i == 0 ? "" : ",", name);
+ vkd3d_string_buffer_printf(&compiler->buffer, "%s%s", i == 0 ? "" : ",", name);
}
- shader_addline(buffer, ")");
+ vkd3d_string_buffer_printf(&compiler->buffer, ")");
}
static void shader_dump_decl_usage(struct vkd3d_d3d_asm_compiler *compiler,
- struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_semantic *semantic, unsigned int flags)
+ const struct vkd3d_shader_semantic *semantic, uint32_t flags)
{
+ struct vkd3d_string_buffer *buffer = &compiler->buffer;
+
shader_addline(buffer, "dcl");
if (semantic->resource.reg.reg.type == VKD3DSPR_SAMPLER)
@@ -605,10 +614,10 @@ static void shader_dump_decl_usage(struct vkd3d_d3d_asm_compiler *compiler,
/* non typed UAVs don't go through this code path */
shader_addline(buffer, "_uav_typed_");
- shader_dump_resource_type(buffer, semantic->resource_type);
+ shader_dump_resource_type(compiler, semantic->resource_type);
if (semantic->resource.reg.reg.type == VKD3DSPR_UAV)
- shader_dump_uav_flags(buffer, flags);
- shader_dump_data_type(buffer, semantic->resource_data_type);
+ shader_dump_uav_flags(compiler, flags);
+ shader_dump_data_type(compiler, semantic->resource_data_type);
}
else
{
@@ -688,14 +697,15 @@ static void shader_dump_decl_usage(struct vkd3d_d3d_asm_compiler *compiler,
}
static void shader_dump_src_param(struct vkd3d_d3d_asm_compiler *compiler,
- struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_src_param *param);
+ const struct vkd3d_shader_src_param *param);
-static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler,
- struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_register *reg)
+static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler, const struct vkd3d_shader_register *reg)
{
+ struct vkd3d_string_buffer *buffer = &compiler->buffer;
+ unsigned int offset = reg->idx[0].offset;
+
static const char * const rastout_reg_names[] = {"oPos", "oFog", "oPts"};
static const char * const misctype_reg_names[] = {"vPos", "vFace"};
- unsigned int offset = reg->idx[0].offset;
switch (reg->type)
{
@@ -978,7 +988,7 @@ static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler,
shader_addline(buffer, "[");
if (reg->idx[0].rel_addr)
{
- shader_dump_src_param(compiler, buffer, reg->idx[0].rel_addr);
+ shader_dump_src_param(compiler, reg->idx[0].rel_addr);
shader_addline(buffer, " + ");
}
shader_addline(buffer, "%u", offset);
@@ -994,7 +1004,7 @@ static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler,
shader_addline(buffer, "[");
if (reg->idx[1].rel_addr)
{
- shader_dump_src_param(compiler, buffer, reg->idx[1].rel_addr);
+ shader_dump_src_param(compiler, reg->idx[1].rel_addr);
shader_addline(buffer, " + ");
}
shader_addline(buffer, "%u]", reg->idx[1].offset);
@@ -1005,7 +1015,7 @@ static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler,
shader_addline(buffer, "[");
if (reg->idx[2].rel_addr)
{
- shader_dump_src_param(compiler, buffer, reg->idx[2].rel_addr);
+ shader_dump_src_param(compiler, reg->idx[2].rel_addr);
shader_addline(buffer, " + ");
}
shader_addline(buffer, "%u]", reg->idx[2].offset);
@@ -1018,11 +1028,12 @@ static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler,
}
static void shader_dump_dst_param(struct vkd3d_d3d_asm_compiler *compiler,
- struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_dst_param *param)
+ const struct vkd3d_shader_dst_param *param)
{
- DWORD write_mask = param->write_mask;
+ struct vkd3d_string_buffer *buffer = &compiler->buffer;
+ uint32_t write_mask = param->write_mask;
- shader_dump_register(compiler, buffer, ¶m->reg);
+ shader_dump_register(compiler, ¶m->reg);
if (write_mask)
{
@@ -1041,10 +1052,11 @@ static void shader_dump_dst_param(struct vkd3d_d3d_asm_compiler *compiler,
}
static void shader_dump_src_param(struct vkd3d_d3d_asm_compiler *compiler,
- struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_src_param *param)
+ const struct vkd3d_shader_src_param *param)
{
enum vkd3d_shader_src_modifier src_modifier = param->modifiers;
- DWORD swizzle = param->swizzle;
+ struct vkd3d_string_buffer *buffer = &compiler->buffer;
+ uint32_t swizzle = param->swizzle;
if (src_modifier == VKD3DSPSM_NEG
|| src_modifier == VKD3DSPSM_BIASNEG
@@ -1060,7 +1072,7 @@ static void shader_dump_src_param(struct vkd3d_d3d_asm_compiler *compiler,
if (src_modifier == VKD3DSPSM_ABS || src_modifier == VKD3DSPSM_ABSNEG)
shader_addline(buffer, "|");
- shader_dump_register(compiler, buffer, ¶m->reg);
+ shader_dump_register(compiler, ¶m->reg);
switch (src_modifier)
{
@@ -1105,10 +1117,11 @@ static void shader_dump_src_param(struct vkd3d_d3d_asm_compiler *compiler,
shader_addline(buffer, "|");
}
-static void shader_dump_ins_modifiers(struct vkd3d_string_buffer *buffer,
+static void shader_dump_ins_modifiers(struct vkd3d_d3d_asm_compiler *compiler,
const struct vkd3d_shader_dst_param *dst)
{
- DWORD mmask = dst->modifiers;
+ struct vkd3d_string_buffer *buffer = &compiler->buffer;
+ uint32_t mmask = dst->modifiers;
switch (dst->shift)
{
@@ -1130,9 +1143,11 @@ static void shader_dump_ins_modifiers(struct vkd3d_string_buffer *buffer,
if (mmask) FIXME("Unrecognised modifier %#x.\n", mmask);
}
-static void shader_dump_primitive_type(struct vkd3d_string_buffer *buffer,
+static void shader_dump_primitive_type(struct vkd3d_d3d_asm_compiler *compiler,
const struct vkd3d_shader_primitive_type *primitive_type)
{
+ struct vkd3d_string_buffer *buffer = &compiler->buffer;
+
switch (primitive_type->type)
{
case VKD3D_PT_UNDEFINED:
@@ -1177,9 +1192,11 @@ static void shader_dump_primitive_type(struct vkd3d_string_buffer *buffer,
}
}
-static void shader_dump_interpolation_mode(struct vkd3d_string_buffer *buffer,
+static void shader_dump_interpolation_mode(struct vkd3d_d3d_asm_compiler *compiler,
enum vkd3d_shader_interpolation_mode interpolation_mode)
{
+ struct vkd3d_string_buffer *buffer = &compiler->buffer;
+
switch (interpolation_mode)
{
case VKD3DSIM_CONSTANT:
@@ -1247,8 +1264,10 @@ const char *shader_get_type_prefix(enum vkd3d_shader_type type)
}
static void shader_dump_instruction_flags(struct vkd3d_d3d_asm_compiler *compiler,
- struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_instruction *ins)
+ const struct vkd3d_shader_instruction *ins)
{
+ struct vkd3d_string_buffer *buffer = &compiler->buffer;
+
switch (ins->handler_idx)
{
case VKD3DSIH_BREAKP:
@@ -1298,7 +1317,7 @@ static void shader_dump_instruction_flags(struct vkd3d_d3d_asm_compiler *compile
break;
case VKD3DSIH_SYNC:
- shader_dump_sync_flags(buffer, ins->flags);
+ shader_dump_sync_flags(compiler, ins->flags);
break;
case VKD3DSIH_TEX:
@@ -1307,42 +1326,42 @@ static void shader_dump_instruction_flags(struct vkd3d_d3d_asm_compiler *compile
break;
default:
- shader_dump_precise_flags(buffer, ins->flags);
+ shader_dump_precise_flags(compiler, ins->flags);
break;
}
}
-static void shader_dump_register_space(struct vkd3d_d3d_asm_compiler *compiler,
- struct vkd3d_string_buffer *buffer, unsigned int register_space)
+static void shader_dump_register_space(struct vkd3d_d3d_asm_compiler *compiler, unsigned int register_space)
{
if (shader_ver_ge(&compiler->shader_version, 5, 1))
- shader_addline(buffer, ", space=%u", register_space);
+ vkd3d_string_buffer_printf(&compiler->buffer, ", space=%u", register_space);
}
static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
- struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_instruction *ins)
+ const struct vkd3d_shader_instruction *ins)
{
+ struct vkd3d_string_buffer *buffer = &compiler->buffer;
unsigned int i;
switch (ins->handler_idx)
{
case VKD3DSIH_DCL:
case VKD3DSIH_DCL_UAV_TYPED:
- shader_dump_decl_usage(compiler, buffer, &ins->declaration.semantic, ins->flags);
- shader_dump_ins_modifiers(buffer, &ins->declaration.semantic.resource.reg);
+ shader_dump_decl_usage(compiler, &ins->declaration.semantic, ins->flags);
+ shader_dump_ins_modifiers(compiler, &ins->declaration.semantic.resource.reg);
shader_addline(buffer, " ");
- shader_dump_register(compiler, buffer, &ins->declaration.semantic.resource.reg.reg);
- shader_dump_register_space(compiler, buffer, ins->declaration.semantic.resource.register_space);
+ shader_dump_register(compiler, &ins->declaration.semantic.resource.reg.reg);
+ shader_dump_register_space(compiler, ins->declaration.semantic.resource.register_space);
break;
case VKD3DSIH_DCL_CONSTANT_BUFFER:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_register(compiler, buffer, &ins->declaration.cb.src.reg);
+ shader_dump_register(compiler, &ins->declaration.cb.src.reg);
if (shader_ver_ge(&compiler->shader_version, 5, 1))
shader_addline(buffer, "[%u]", ins->declaration.cb.size);
shader_addline(buffer, ", %s",
ins->flags & VKD3DSI_INDEXED_DYNAMIC ? "dynamicIndexed" : "immediateIndexed");
- shader_dump_register_space(compiler, buffer, ins->declaration.cb.register_space);
+ shader_dump_register_space(compiler, ins->declaration.cb.register_space);
break;
case VKD3DSIH_DCL_FUNCTION_BODY:
@@ -1357,7 +1376,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_GLOBAL_FLAGS:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_global_flags(buffer, ins->flags);
+ shader_dump_global_flags(compiler, ins->flags);
break;
case VKD3DSIH_DCL_HS_MAX_TESSFACTOR:
@@ -1380,7 +1399,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_INDEX_RANGE:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_dst_param(compiler, buffer, &ins->declaration.index_range.dst);
+ shader_dump_dst_param(compiler, &ins->declaration.index_range.dst);
shader_addline(buffer, " %u", ins->declaration.index_range.register_count);
break;
@@ -1393,9 +1412,9 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_INPUT_PS:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_interpolation_mode(buffer, ins->flags);
+ shader_dump_interpolation_mode(compiler, ins->flags);
shader_addline(buffer, " ");
- shader_dump_dst_param(compiler, buffer, &ins->declaration.dst);
+ shader_dump_dst_param(compiler, &ins->declaration.dst);
break;
case VKD3DSIH_DCL_INPUT_PS_SGV:
@@ -1403,30 +1422,30 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_INPUT_SIV:
case VKD3DSIH_DCL_OUTPUT_SIV:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_dst_param(compiler, buffer, &ins->declaration.register_semantic.reg);
+ shader_dump_dst_param(compiler, &ins->declaration.register_semantic.reg);
shader_addline(buffer, ", ");
- shader_dump_shader_input_sysval_semantic(buffer, ins->declaration.register_semantic.sysval_semantic);
+ shader_dump_shader_input_sysval_semantic(compiler, ins->declaration.register_semantic.sysval_semantic);
break;
case VKD3DSIH_DCL_INPUT_PS_SIV:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_interpolation_mode(buffer, ins->flags);
+ shader_dump_interpolation_mode(compiler, ins->flags);
shader_addline(buffer, " ");
- shader_dump_dst_param(compiler, buffer, &ins->declaration.register_semantic.reg);
+ shader_dump_dst_param(compiler, &ins->declaration.register_semantic.reg);
shader_addline(buffer, ", ");
- shader_dump_shader_input_sysval_semantic(buffer, ins->declaration.register_semantic.sysval_semantic);
+ shader_dump_shader_input_sysval_semantic(compiler, ins->declaration.register_semantic.sysval_semantic);
break;
case VKD3DSIH_DCL_INPUT:
case VKD3DSIH_DCL_OUTPUT:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_dst_param(compiler, buffer, &ins->declaration.dst);
+ shader_dump_dst_param(compiler, &ins->declaration.dst);
break;
case VKD3DSIH_DCL_INPUT_PRIMITIVE:
case VKD3DSIH_DCL_OUTPUT_TOPOLOGY:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_primitive_type(buffer, &ins->declaration.primitive_type);
+ shader_dump_primitive_type(compiler, &ins->declaration.primitive_type);
break;
case VKD3DSIH_DCL_INTERFACE:
@@ -1437,23 +1456,23 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_RESOURCE_RAW:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_dst_param(compiler, buffer, &ins->declaration.raw_resource.resource.reg);
- shader_dump_register_space(compiler, buffer, ins->declaration.raw_resource.resource.register_space);
+ shader_dump_dst_param(compiler, &ins->declaration.raw_resource.resource.reg);
+ shader_dump_register_space(compiler, ins->declaration.raw_resource.resource.register_space);
break;
case VKD3DSIH_DCL_RESOURCE_STRUCTURED:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_dst_param(compiler, buffer, &ins->declaration.structured_resource.resource.reg);
+ shader_dump_dst_param(compiler, &ins->declaration.structured_resource.resource.reg);
shader_addline(buffer, ", %u", ins->declaration.structured_resource.byte_stride);
- shader_dump_register_space(compiler, buffer, ins->declaration.structured_resource.resource.register_space);
+ shader_dump_register_space(compiler, ins->declaration.structured_resource.resource.register_space);
break;
case VKD3DSIH_DCL_SAMPLER:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_register(compiler, buffer, &ins->declaration.sampler.src.reg);
+ shader_dump_register(compiler, &ins->declaration.sampler.src.reg);
if (ins->flags == VKD3DSI_SAMPLER_COMPARISON_MODE)
shader_addline(buffer, ", comparisonMode");
- shader_dump_register_space(compiler, buffer, ins->declaration.sampler.register_space);
+ shader_dump_register_space(compiler, ins->declaration.sampler.register_space);
break;
case VKD3DSIH_DCL_TEMPS:
@@ -1468,28 +1487,28 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_TESSELLATOR_DOMAIN:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_tessellator_domain(buffer, ins->declaration.tessellator_domain);
+ shader_dump_tessellator_domain(compiler, ins->declaration.tessellator_domain);
break;
case VKD3DSIH_DCL_TESSELLATOR_OUTPUT_PRIMITIVE:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_tessellator_output_primitive(buffer, ins->declaration.tessellator_output_primitive);
+ shader_dump_tessellator_output_primitive(compiler, ins->declaration.tessellator_output_primitive);
break;
case VKD3DSIH_DCL_TESSELLATOR_PARTITIONING:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_tessellator_partitioning(buffer, ins->declaration.tessellator_partitioning);
+ shader_dump_tessellator_partitioning(compiler, ins->declaration.tessellator_partitioning);
break;
case VKD3DSIH_DCL_TGSM_RAW:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_dst_param(compiler, buffer, &ins->declaration.tgsm_raw.reg);
+ shader_dump_dst_param(compiler, &ins->declaration.tgsm_raw.reg);
shader_addline(buffer, ", %u", ins->declaration.tgsm_raw.byte_count);
break;
case VKD3DSIH_DCL_TGSM_STRUCTURED:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_dst_param(compiler, buffer, &ins->declaration.tgsm_structured.reg);
+ shader_dump_dst_param(compiler, &ins->declaration.tgsm_structured.reg);
shader_addline(buffer, ", %u, %u", ins->declaration.tgsm_structured.byte_stride,
ins->declaration.tgsm_structured.structure_count);
break;
@@ -1503,19 +1522,19 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_UAV_RAW:
shader_addline(buffer, "%s", shader_opcode_names[ins->handler_idx]);
- shader_dump_uav_flags(buffer, ins->flags);
+ shader_dump_uav_flags(compiler, ins->flags);
shader_addline(buffer, " ");
- shader_dump_dst_param(compiler, buffer, &ins->declaration.raw_resource.resource.reg);
- shader_dump_register_space(compiler, buffer, ins->declaration.raw_resource.resource.register_space);
+ shader_dump_dst_param(compiler, &ins->declaration.raw_resource.resource.reg);
+ shader_dump_register_space(compiler, ins->declaration.raw_resource.resource.register_space);
break;
case VKD3DSIH_DCL_UAV_STRUCTURED:
shader_addline(buffer, "%s", shader_opcode_names[ins->handler_idx]);
- shader_dump_uav_flags(buffer, ins->flags);
+ shader_dump_uav_flags(compiler, ins->flags);
shader_addline(buffer, " ");
- shader_dump_dst_param(compiler, buffer, &ins->declaration.structured_resource.resource.reg);
+ shader_dump_dst_param(compiler, &ins->declaration.structured_resource.resource.reg);
shader_addline(buffer, ", %u", ins->declaration.structured_resource.byte_stride);
- shader_dump_register_space(compiler, buffer, ins->declaration.structured_resource.resource.register_space);
+ shader_dump_register_space(compiler, ins->declaration.structured_resource.resource.register_space);
break;
case VKD3DSIH_DEF:
@@ -1540,7 +1559,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
if (ins->predicate)
{
shader_addline(buffer, "(");
- shader_dump_src_param(compiler, buffer, ins->predicate);
+ shader_dump_src_param(compiler, ins->predicate);
shader_addline(buffer, ") ");
}
@@ -1550,7 +1569,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
shader_addline(buffer, "%s", shader_opcode_names[ins->handler_idx]);
- shader_dump_instruction_flags(compiler, buffer, ins);
+ shader_dump_instruction_flags(compiler, ins);
if (vkd3d_shader_instruction_has_texel_offset(ins))
{
shader_addline(buffer, "(%d,%d,%d)",
@@ -1560,28 +1579,28 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
if (ins->resource_type != VKD3D_SHADER_RESOURCE_NONE)
{
shader_addline(buffer, "(");
- shader_dump_resource_type(buffer, ins->resource_type);
+ shader_dump_resource_type(compiler, ins->resource_type);
shader_addline(buffer, ")");
}
- if (ins->resource_data_type[0] != VKD3D_DATA_FLOAT ||
- ins->resource_data_type[1] != VKD3D_DATA_FLOAT ||
- ins->resource_data_type[2] != VKD3D_DATA_FLOAT ||
- ins->resource_data_type[3] != VKD3D_DATA_FLOAT)
- shader_dump_data_type(buffer, ins->resource_data_type);
+ if (ins->resource_data_type[0] != VKD3D_DATA_FLOAT
+ || ins->resource_data_type[1] != VKD3D_DATA_FLOAT
+ || ins->resource_data_type[2] != VKD3D_DATA_FLOAT
+ || ins->resource_data_type[3] != VKD3D_DATA_FLOAT)
+ shader_dump_data_type(compiler, ins->resource_data_type);
for (i = 0; i < ins->dst_count; ++i)
{
- shader_dump_ins_modifiers(buffer, &ins->dst[i]);
+ shader_dump_ins_modifiers(compiler, &ins->dst[i]);
shader_addline(buffer, !i ? " " : ", ");
- shader_dump_dst_param(compiler, buffer, &ins->dst[i]);
+ shader_dump_dst_param(compiler, &ins->dst[i]);
}
/* Other source tokens */
for (i = ins->dst_count; i < (ins->dst_count + ins->src_count); ++i)
{
shader_addline(buffer, !i ? " " : ", ");
- shader_dump_src_param(compiler, buffer, &ins->src[i - ins->dst_count]);
+ shader_dump_src_param(compiler, &ins->src[i - ins->dst_count]);
}
break;
}
@@ -1594,15 +1613,16 @@ enum vkd3d_result vkd3d_dxbc_binary_to_text(void *data, struct vkd3d_shader_code
struct vkd3d_shader_version *shader_version;
struct vkd3d_d3d_asm_compiler compiler;
enum vkd3d_result result = VKD3D_OK;
- struct vkd3d_string_buffer buffer;
+ struct vkd3d_string_buffer *buffer;
const DWORD *ptr;
void *code;
- vkd3d_string_buffer_init(&buffer);
+ buffer = &compiler.buffer;
+ vkd3d_string_buffer_init(buffer);
shader_version = &compiler.shader_version;
shader_sm4_read_header(data, &ptr, shader_version);
- shader_addline(&buffer, "%s_%u_%u\n",
+ vkd3d_string_buffer_printf(buffer, "%s_%u_%u\n",
shader_get_type_prefix(shader_version->type), shader_version->major, shader_version->minor);
while (!shader_sm4_is_end(data, &ptr))
@@ -1613,25 +1633,26 @@ enum vkd3d_result vkd3d_dxbc_binary_to_text(void *data, struct vkd3d_shader_code
if (ins.handler_idx == VKD3DSIH_INVALID)
{
WARN("Skipping unrecognized instruction.\n");
- shader_addline(&buffer, "<unrecognized instruction>\n");
+ vkd3d_string_buffer_printf(buffer, "<unrecognized instruction>\n");
result = VKD3D_ERROR;
continue;
}
- shader_dump_instruction(&compiler, &buffer, &ins);
+ shader_dump_instruction(&compiler, &ins);
}
- code = vkd3d_malloc(buffer.content_size);
- if (code)
+ if ((code = vkd3d_malloc(buffer->content_size)))
{
- memcpy(code, buffer.buffer, buffer.content_size);
- out->size = buffer.content_size;
+ memcpy(code, buffer->buffer, buffer->content_size);
+ out->size = buffer->content_size;
out->code = code;
}
else
+ {
result = VKD3D_ERROR_OUT_OF_MEMORY;
+ }
- vkd3d_string_buffer_cleanup(&buffer);
+ vkd3d_string_buffer_cleanup(buffer);
return result;
}
--
2.11.0
1
0
[PATCH vkd3d 2/5] vkd3d-shader: Introduce struct vkd3d_d3d_asm_compiler.
by Henri Verbeet 16 Feb '21
by Henri Verbeet 16 Feb '21
16 Feb '21
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
libs/vkd3d-shader/trace.c | 138 ++++++++++++++++++++++++----------------------
1 file changed, 72 insertions(+), 66 deletions(-)
diff --git a/libs/vkd3d-shader/trace.c b/libs/vkd3d-shader/trace.c
index 40b3e318..24eadf33 100644
--- a/libs/vkd3d-shader/trace.c
+++ b/libs/vkd3d-shader/trace.c
@@ -300,6 +300,11 @@ shader_input_sysval_semantic_names[] =
{VKD3D_SIV_LINE_DENSITY_TESS_FACTOR, "finalLineDensityTessFactor"},
};
+struct vkd3d_d3d_asm_compiler
+{
+ struct vkd3d_shader_version shader_version;
+};
+
static int shader_ver_ge(const struct vkd3d_shader_version *v, int major, int minor)
{
return v->major > major || (v->major == major && v->minor >= minor);
@@ -566,9 +571,8 @@ static void shader_dump_data_type(struct vkd3d_string_buffer *buffer, const enum
shader_addline(buffer, ")");
}
-static void shader_dump_decl_usage(struct vkd3d_string_buffer *buffer,
- const struct vkd3d_shader_semantic *semantic, unsigned int flags,
- const struct vkd3d_shader_version *shader_version)
+static void shader_dump_decl_usage(struct vkd3d_d3d_asm_compiler *compiler,
+ struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_semantic *semantic, unsigned int flags)
{
shader_addline(buffer, "dcl");
@@ -609,7 +613,8 @@ static void shader_dump_decl_usage(struct vkd3d_string_buffer *buffer,
else
{
/* Pixel shaders 3.0 don't have usage semantics. */
- if (!shader_ver_ge(shader_version, 3, 0) && shader_version->type == VKD3D_SHADER_TYPE_PIXEL)
+ if (!shader_ver_ge(&compiler->shader_version, 3, 0)
+ && compiler->shader_version.type == VKD3D_SHADER_TYPE_PIXEL)
return;
else
shader_addline(buffer, "_");
@@ -682,11 +687,11 @@ static void shader_dump_decl_usage(struct vkd3d_string_buffer *buffer,
}
}
-static void shader_dump_src_param(struct vkd3d_string_buffer *buffer,
- const struct vkd3d_shader_src_param *param, const struct vkd3d_shader_version *shader_version);
+static void shader_dump_src_param(struct vkd3d_d3d_asm_compiler *compiler,
+ struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_src_param *param);
-static void shader_dump_register(struct vkd3d_string_buffer *buffer,
- const struct vkd3d_shader_register *reg, const struct vkd3d_shader_version *shader_version)
+static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler,
+ struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_register *reg)
{
static const char * const rastout_reg_names[] = {"oPos", "oFog", "oPts"};
static const char * const misctype_reg_names[] = {"vPos", "vFace"};
@@ -711,7 +716,8 @@ static void shader_dump_register(struct vkd3d_string_buffer *buffer,
break;
case VKD3DSPR_TEXTURE: /* vs: case VKD3DSPR_ADDR */
- shader_addline(buffer, "%c", shader_version->type == VKD3D_SHADER_TYPE_PIXEL ? 't' : 'a');
+ vkd3d_string_buffer_printf(buffer, "%c",
+ compiler->shader_version.type == VKD3D_SHADER_TYPE_PIXEL ? 't' : 'a');
break;
case VKD3DSPR_RASTOUT:
@@ -720,7 +726,7 @@ static void shader_dump_register(struct vkd3d_string_buffer *buffer,
case VKD3DSPR_COLOROUT:
shader_addline(buffer, "o");
- if (!shader_ver_ge(shader_version, 4, 0))
+ if (!shader_ver_ge(&compiler->shader_version, 4, 0))
shader_addline(buffer, "C");
break;
@@ -743,7 +749,7 @@ static void shader_dump_register(struct vkd3d_string_buffer *buffer,
case VKD3DSPR_TEXCRDOUT:
/* Vertex shaders >= 3.0 use general purpose output registers
* (VKD3DSPR_OUTPUT), which can include an address token. */
- if (shader_ver_ge(shader_version, 3, 0))
+ if (shader_ver_ge(&compiler->shader_version, 3, 0))
shader_addline(buffer, "o");
else
shader_addline(buffer, "oT");
@@ -964,15 +970,15 @@ static void shader_dump_register(struct vkd3d_string_buffer *buffer,
bool printbrackets = reg->idx[0].rel_addr
|| reg->type == VKD3DSPR_INCONTROLPOINT
|| reg->type == VKD3DSPR_IMMCONSTBUFFER
- || ((shader_version->type == VKD3D_SHADER_TYPE_GEOMETRY
- || shader_version->type == VKD3D_SHADER_TYPE_HULL)
+ || ((compiler->shader_version.type == VKD3D_SHADER_TYPE_GEOMETRY
+ || compiler->shader_version.type == VKD3D_SHADER_TYPE_HULL)
&& reg->type == VKD3DSPR_INPUT);
if (printbrackets)
shader_addline(buffer, "[");
if (reg->idx[0].rel_addr)
{
- shader_dump_src_param(buffer, reg->idx[0].rel_addr, shader_version);
+ shader_dump_src_param(compiler, buffer, reg->idx[0].rel_addr);
shader_addline(buffer, " + ");
}
shader_addline(buffer, "%u", offset);
@@ -983,12 +989,12 @@ static void shader_dump_register(struct vkd3d_string_buffer *buffer,
* to normalise it with 5.1.
* Here we should ignore it if it's a CB in sm < 5.1. */
if (reg->idx[1].offset != ~0u &&
- (reg->type != VKD3DSPR_CONSTBUFFER || shader_ver_ge(shader_version, 5, 1)))
+ (reg->type != VKD3DSPR_CONSTBUFFER || shader_ver_ge(&compiler->shader_version, 5, 1)))
{
shader_addline(buffer, "[");
if (reg->idx[1].rel_addr)
{
- shader_dump_src_param(buffer, reg->idx[1].rel_addr, shader_version);
+ shader_dump_src_param(compiler, buffer, reg->idx[1].rel_addr);
shader_addline(buffer, " + ");
}
shader_addline(buffer, "%u]", reg->idx[1].offset);
@@ -999,7 +1005,7 @@ static void shader_dump_register(struct vkd3d_string_buffer *buffer,
shader_addline(buffer, "[");
if (reg->idx[2].rel_addr)
{
- shader_dump_src_param(buffer, reg->idx[2].rel_addr, shader_version);
+ shader_dump_src_param(compiler, buffer, reg->idx[2].rel_addr);
shader_addline(buffer, " + ");
}
shader_addline(buffer, "%u]", reg->idx[2].offset);
@@ -1011,12 +1017,12 @@ static void shader_dump_register(struct vkd3d_string_buffer *buffer,
}
}
-static void shader_dump_dst_param(struct vkd3d_string_buffer *buffer,
- const struct vkd3d_shader_dst_param *param, const struct vkd3d_shader_version *shader_version)
+static void shader_dump_dst_param(struct vkd3d_d3d_asm_compiler *compiler,
+ struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_dst_param *param)
{
DWORD write_mask = param->write_mask;
- shader_dump_register(buffer, ¶m->reg, shader_version);
+ shader_dump_register(compiler, buffer, ¶m->reg);
if (write_mask)
{
@@ -1034,8 +1040,8 @@ static void shader_dump_dst_param(struct vkd3d_string_buffer *buffer,
}
}
-static void shader_dump_src_param(struct vkd3d_string_buffer *buffer,
- const struct vkd3d_shader_src_param *param, const struct vkd3d_shader_version *shader_version)
+static void shader_dump_src_param(struct vkd3d_d3d_asm_compiler *compiler,
+ struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_src_param *param)
{
enum vkd3d_shader_src_modifier src_modifier = param->modifiers;
DWORD swizzle = param->swizzle;
@@ -1054,7 +1060,7 @@ static void shader_dump_src_param(struct vkd3d_string_buffer *buffer,
if (src_modifier == VKD3DSPSM_ABS || src_modifier == VKD3DSPSM_ABSNEG)
shader_addline(buffer, "|");
- shader_dump_register(buffer, ¶m->reg, shader_version);
+ shader_dump_register(compiler, buffer, ¶m->reg);
switch (src_modifier)
{
@@ -1240,8 +1246,8 @@ const char *shader_get_type_prefix(enum vkd3d_shader_type type)
}
}
-static void shader_dump_instruction_flags(struct vkd3d_string_buffer *buffer,
- const struct vkd3d_shader_instruction *ins, const struct vkd3d_shader_version *shader_version)
+static void shader_dump_instruction_flags(struct vkd3d_d3d_asm_compiler *compiler,
+ struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_instruction *ins)
{
switch (ins->handler_idx)
{
@@ -1296,7 +1302,7 @@ static void shader_dump_instruction_flags(struct vkd3d_string_buffer *buffer,
break;
case VKD3DSIH_TEX:
- if (shader_ver_ge(shader_version, 2, 0) && (ins->flags & VKD3DSI_TEXLD_PROJECT))
+ if (shader_ver_ge(&compiler->shader_version, 2, 0) && (ins->flags & VKD3DSI_TEXLD_PROJECT))
shader_addline(buffer, "p");
break;
@@ -1306,15 +1312,15 @@ static void shader_dump_instruction_flags(struct vkd3d_string_buffer *buffer,
}
}
-static void shader_dump_register_space(struct vkd3d_string_buffer *buffer,
- unsigned int register_space, const struct vkd3d_shader_version *shader_version)
+static void shader_dump_register_space(struct vkd3d_d3d_asm_compiler *compiler,
+ struct vkd3d_string_buffer *buffer, unsigned int register_space)
{
- if (shader_ver_ge(shader_version, 5, 1))
+ if (shader_ver_ge(&compiler->shader_version, 5, 1))
shader_addline(buffer, ", space=%u", register_space);
}
-static void shader_dump_instruction(struct vkd3d_string_buffer *buffer,
- const struct vkd3d_shader_instruction *ins, const struct vkd3d_shader_version *shader_version)
+static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
+ struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_instruction *ins)
{
unsigned int i;
@@ -1322,21 +1328,21 @@ static void shader_dump_instruction(struct vkd3d_string_buffer *buffer,
{
case VKD3DSIH_DCL:
case VKD3DSIH_DCL_UAV_TYPED:
- shader_dump_decl_usage(buffer, &ins->declaration.semantic, ins->flags, shader_version);
+ shader_dump_decl_usage(compiler, buffer, &ins->declaration.semantic, ins->flags);
shader_dump_ins_modifiers(buffer, &ins->declaration.semantic.resource.reg);
shader_addline(buffer, " ");
- shader_dump_register(buffer, &ins->declaration.semantic.resource.reg.reg, shader_version);
- shader_dump_register_space(buffer, ins->declaration.semantic.resource.register_space, shader_version);
+ shader_dump_register(compiler, buffer, &ins->declaration.semantic.resource.reg.reg);
+ shader_dump_register_space(compiler, buffer, ins->declaration.semantic.resource.register_space);
break;
case VKD3DSIH_DCL_CONSTANT_BUFFER:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_register(buffer, &ins->declaration.cb.src.reg, shader_version);
- if (shader_ver_ge(shader_version, 5, 1))
+ shader_dump_register(compiler, buffer, &ins->declaration.cb.src.reg);
+ if (shader_ver_ge(&compiler->shader_version, 5, 1))
shader_addline(buffer, "[%u]", ins->declaration.cb.size);
shader_addline(buffer, ", %s",
ins->flags & VKD3DSI_INDEXED_DYNAMIC ? "dynamicIndexed" : "immediateIndexed");
- shader_dump_register_space(buffer, ins->declaration.cb.register_space, shader_version);
+ shader_dump_register_space(compiler, buffer, ins->declaration.cb.register_space);
break;
case VKD3DSIH_DCL_FUNCTION_BODY:
@@ -1374,7 +1380,7 @@ static void shader_dump_instruction(struct vkd3d_string_buffer *buffer,
case VKD3DSIH_DCL_INDEX_RANGE:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_dst_param(buffer, &ins->declaration.index_range.dst, shader_version);
+ shader_dump_dst_param(compiler, buffer, &ins->declaration.index_range.dst);
shader_addline(buffer, " %u", ins->declaration.index_range.register_count);
break;
@@ -1389,7 +1395,7 @@ static void shader_dump_instruction(struct vkd3d_string_buffer *buffer,
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
shader_dump_interpolation_mode(buffer, ins->flags);
shader_addline(buffer, " ");
- shader_dump_dst_param(buffer, &ins->declaration.dst, shader_version);
+ shader_dump_dst_param(compiler, buffer, &ins->declaration.dst);
break;
case VKD3DSIH_DCL_INPUT_PS_SGV:
@@ -1397,7 +1403,7 @@ static void shader_dump_instruction(struct vkd3d_string_buffer *buffer,
case VKD3DSIH_DCL_INPUT_SIV:
case VKD3DSIH_DCL_OUTPUT_SIV:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_dst_param(buffer, &ins->declaration.register_semantic.reg, shader_version);
+ shader_dump_dst_param(compiler, buffer, &ins->declaration.register_semantic.reg);
shader_addline(buffer, ", ");
shader_dump_shader_input_sysval_semantic(buffer, ins->declaration.register_semantic.sysval_semantic);
break;
@@ -1406,7 +1412,7 @@ static void shader_dump_instruction(struct vkd3d_string_buffer *buffer,
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
shader_dump_interpolation_mode(buffer, ins->flags);
shader_addline(buffer, " ");
- shader_dump_dst_param(buffer, &ins->declaration.register_semantic.reg, shader_version);
+ shader_dump_dst_param(compiler, buffer, &ins->declaration.register_semantic.reg);
shader_addline(buffer, ", ");
shader_dump_shader_input_sysval_semantic(buffer, ins->declaration.register_semantic.sysval_semantic);
break;
@@ -1414,7 +1420,7 @@ static void shader_dump_instruction(struct vkd3d_string_buffer *buffer,
case VKD3DSIH_DCL_INPUT:
case VKD3DSIH_DCL_OUTPUT:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_dst_param(buffer, &ins->declaration.dst, shader_version);
+ shader_dump_dst_param(compiler, buffer, &ins->declaration.dst);
break;
case VKD3DSIH_DCL_INPUT_PRIMITIVE:
@@ -1431,24 +1437,23 @@ static void shader_dump_instruction(struct vkd3d_string_buffer *buffer,
case VKD3DSIH_DCL_RESOURCE_RAW:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_dst_param(buffer, &ins->declaration.raw_resource.resource.reg, shader_version);
- shader_dump_register_space(buffer, ins->declaration.raw_resource.resource.register_space, shader_version);
+ shader_dump_dst_param(compiler, buffer, &ins->declaration.raw_resource.resource.reg);
+ shader_dump_register_space(compiler, buffer, ins->declaration.raw_resource.resource.register_space);
break;
case VKD3DSIH_DCL_RESOURCE_STRUCTURED:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_dst_param(buffer, &ins->declaration.structured_resource.resource.reg, shader_version);
+ shader_dump_dst_param(compiler, buffer, &ins->declaration.structured_resource.resource.reg);
shader_addline(buffer, ", %u", ins->declaration.structured_resource.byte_stride);
- shader_dump_register_space(buffer,
- ins->declaration.structured_resource.resource.register_space, shader_version);
+ shader_dump_register_space(compiler, buffer, ins->declaration.structured_resource.resource.register_space);
break;
case VKD3DSIH_DCL_SAMPLER:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_register(buffer, &ins->declaration.sampler.src.reg, shader_version);
+ shader_dump_register(compiler, buffer, &ins->declaration.sampler.src.reg);
if (ins->flags == VKD3DSI_SAMPLER_COMPARISON_MODE)
shader_addline(buffer, ", comparisonMode");
- shader_dump_register_space(buffer, ins->declaration.sampler.register_space, shader_version);
+ shader_dump_register_space(compiler, buffer, ins->declaration.sampler.register_space);
break;
case VKD3DSIH_DCL_TEMPS:
@@ -1478,13 +1483,13 @@ static void shader_dump_instruction(struct vkd3d_string_buffer *buffer,
case VKD3DSIH_DCL_TGSM_RAW:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_dst_param(buffer, &ins->declaration.tgsm_raw.reg, shader_version);
+ shader_dump_dst_param(compiler, buffer, &ins->declaration.tgsm_raw.reg);
shader_addline(buffer, ", %u", ins->declaration.tgsm_raw.byte_count);
break;
case VKD3DSIH_DCL_TGSM_STRUCTURED:
shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]);
- shader_dump_dst_param(buffer, &ins->declaration.tgsm_structured.reg, shader_version);
+ shader_dump_dst_param(compiler, buffer, &ins->declaration.tgsm_structured.reg);
shader_addline(buffer, ", %u, %u", ins->declaration.tgsm_structured.byte_stride,
ins->declaration.tgsm_structured.structure_count);
break;
@@ -1500,18 +1505,17 @@ static void shader_dump_instruction(struct vkd3d_string_buffer *buffer,
shader_addline(buffer, "%s", shader_opcode_names[ins->handler_idx]);
shader_dump_uav_flags(buffer, ins->flags);
shader_addline(buffer, " ");
- shader_dump_dst_param(buffer, &ins->declaration.raw_resource.resource.reg, shader_version);
- shader_dump_register_space(buffer, ins->declaration.raw_resource.resource.register_space, shader_version);
+ shader_dump_dst_param(compiler, buffer, &ins->declaration.raw_resource.resource.reg);
+ shader_dump_register_space(compiler, buffer, ins->declaration.raw_resource.resource.register_space);
break;
case VKD3DSIH_DCL_UAV_STRUCTURED:
shader_addline(buffer, "%s", shader_opcode_names[ins->handler_idx]);
shader_dump_uav_flags(buffer, ins->flags);
shader_addline(buffer, " ");
- shader_dump_dst_param(buffer, &ins->declaration.structured_resource.resource.reg, shader_version);
+ shader_dump_dst_param(compiler, buffer, &ins->declaration.structured_resource.resource.reg);
shader_addline(buffer, ", %u", ins->declaration.structured_resource.byte_stride);
- shader_dump_register_space(buffer,
- ins->declaration.structured_resource.resource.register_space, shader_version);
+ shader_dump_register_space(compiler, buffer, ins->declaration.structured_resource.resource.register_space);
break;
case VKD3DSIH_DEF:
@@ -1536,7 +1540,7 @@ static void shader_dump_instruction(struct vkd3d_string_buffer *buffer,
if (ins->predicate)
{
shader_addline(buffer, "(");
- shader_dump_src_param(buffer, ins->predicate, shader_version);
+ shader_dump_src_param(compiler, buffer, ins->predicate);
shader_addline(buffer, ") ");
}
@@ -1546,7 +1550,7 @@ static void shader_dump_instruction(struct vkd3d_string_buffer *buffer,
shader_addline(buffer, "%s", shader_opcode_names[ins->handler_idx]);
- shader_dump_instruction_flags(buffer, ins, shader_version);
+ shader_dump_instruction_flags(compiler, buffer, ins);
if (vkd3d_shader_instruction_has_texel_offset(ins))
{
shader_addline(buffer, "(%d,%d,%d)",
@@ -1570,14 +1574,14 @@ static void shader_dump_instruction(struct vkd3d_string_buffer *buffer,
{
shader_dump_ins_modifiers(buffer, &ins->dst[i]);
shader_addline(buffer, !i ? " " : ", ");
- shader_dump_dst_param(buffer, &ins->dst[i], shader_version);
+ shader_dump_dst_param(compiler, buffer, &ins->dst[i]);
}
/* Other source tokens */
for (i = ins->dst_count; i < (ins->dst_count + ins->src_count); ++i)
{
shader_addline(buffer, !i ? " " : ", ");
- shader_dump_src_param(buffer, &ins->src[i - ins->dst_count], shader_version);
+ shader_dump_src_param(compiler, buffer, &ins->src[i - ins->dst_count]);
}
break;
}
@@ -1587,17 +1591,19 @@ static void shader_dump_instruction(struct vkd3d_string_buffer *buffer,
enum vkd3d_result vkd3d_dxbc_binary_to_text(void *data, struct vkd3d_shader_code *out)
{
- struct vkd3d_shader_version shader_version;
- const DWORD *ptr;
- struct vkd3d_string_buffer buffer;
+ struct vkd3d_shader_version *shader_version;
+ struct vkd3d_d3d_asm_compiler compiler;
enum vkd3d_result result = VKD3D_OK;
+ struct vkd3d_string_buffer buffer;
+ const DWORD *ptr;
void *code;
vkd3d_string_buffer_init(&buffer);
- shader_sm4_read_header(data, &ptr, &shader_version);
+ shader_version = &compiler.shader_version;
+ shader_sm4_read_header(data, &ptr, shader_version);
shader_addline(&buffer, "%s_%u_%u\n",
- shader_get_type_prefix(shader_version.type), shader_version.major, shader_version.minor);
+ shader_get_type_prefix(shader_version->type), shader_version->major, shader_version->minor);
while (!shader_sm4_is_end(data, &ptr))
{
@@ -1612,7 +1618,7 @@ enum vkd3d_result vkd3d_dxbc_binary_to_text(void *data, struct vkd3d_shader_code
continue;
}
- shader_dump_instruction(&buffer, &ins, &shader_version);
+ shader_dump_instruction(&compiler, &buffer, &ins);
}
code = vkd3d_malloc(buffer.content_size);
--
2.11.0
1
0
[PATCH vkd3d 1/5] vkd3d-shader: Rename VKD3D_SHADER_INSTRUCTION_HANDLER to vkd3d_shader_opcode.
by Henri Verbeet 16 Feb '21
by Henri Verbeet 16 Feb '21
16 Feb '21
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
libs/vkd3d-shader/dxbc.c | 2 +-
libs/vkd3d-shader/spirv.c | 14 +++++++-------
libs/vkd3d-shader/vkd3d_shader_main.c | 4 ++--
libs/vkd3d-shader/vkd3d_shader_private.h | 4 ++--
4 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c
index 278912d8..5b562599 100644
--- a/libs/vkd3d-shader/dxbc.c
+++ b/libs/vkd3d-shader/dxbc.c
@@ -481,7 +481,7 @@ struct vkd3d_sm4_data
struct vkd3d_sm4_opcode_info
{
enum vkd3d_sm4_opcode opcode;
- enum VKD3D_SHADER_INSTRUCTION_HANDLER handler_idx;
+ enum vkd3d_shader_opcode handler_idx;
const char *dst_info;
const char *src_info;
void (*read_opcode_func)(struct vkd3d_shader_instruction *ins,
diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c
index 148115a8..b0b23991 100644
--- a/libs/vkd3d-shader/spirv.c
+++ b/libs/vkd3d-shader/spirv.c
@@ -2131,7 +2131,7 @@ struct vkd3d_push_constant_buffer_binding
struct vkd3d_shader_phase
{
- enum VKD3D_SHADER_INSTRUCTION_HANDLER type;
+ enum vkd3d_shader_opcode type;
unsigned int idx;
unsigned int instance_count;
uint32_t function_id;
@@ -6417,7 +6417,7 @@ static SpvOp vkd3d_dxbc_compiler_map_alu_instruction(const struct vkd3d_shader_i
{
static const struct
{
- enum VKD3D_SHADER_INSTRUCTION_HANDLER handler_idx;
+ enum vkd3d_shader_opcode handler_idx;
SpvOp spirv_op;
}
alu_ops[] =
@@ -6491,7 +6491,7 @@ static enum GLSLstd450 vkd3d_dxbc_compiler_map_ext_glsl_instruction(
{
static const struct
{
- enum VKD3D_SHADER_INSTRUCTION_HANDLER handler_idx;
+ enum vkd3d_shader_opcode handler_idx;
enum GLSLstd450 glsl_inst;
}
glsl_insts[] =
@@ -7514,7 +7514,7 @@ static void vkd3d_dxbc_compiler_emit_deriv_instruction(struct vkd3d_dxbc_compile
static const struct instruction_info
{
- enum VKD3D_SHADER_INSTRUCTION_HANDLER handler_idx;
+ enum vkd3d_shader_opcode handler_idx;
SpvOp op;
bool needs_derivative_control;
}
@@ -8402,7 +8402,7 @@ static SpvOp vkd3d_dxbc_compiler_map_atomic_instruction(const struct vkd3d_shade
{
static const struct
{
- enum VKD3D_SHADER_INSTRUCTION_HANDLER handler_idx;
+ enum vkd3d_shader_opcode handler_idx;
SpvOp spirv_op;
}
atomic_ops[] =
@@ -8438,7 +8438,7 @@ static SpvOp vkd3d_dxbc_compiler_map_atomic_instruction(const struct vkd3d_shade
return SpvOpMax;
}
-static bool is_imm_atomic_instruction(enum VKD3D_SHADER_INSTRUCTION_HANDLER handler_idx)
+static bool is_imm_atomic_instruction(enum vkd3d_shader_opcode handler_idx)
{
return VKD3DSIH_IMM_ATOMIC_ALLOC <= handler_idx && handler_idx <= VKD3DSIH_IMM_ATOMIC_XOR;
}
@@ -9029,7 +9029,7 @@ static void vkd3d_dxbc_compiler_emit_main_prolog(struct vkd3d_dxbc_compiler *com
vkd3d_dxbc_compiler_emit_hull_shader_inputs(compiler);
}
-static bool is_dcl_instruction(enum VKD3D_SHADER_INSTRUCTION_HANDLER handler_idx)
+static bool is_dcl_instruction(enum vkd3d_shader_opcode handler_idx)
{
return (VKD3DSIH_DCL <= handler_idx && handler_idx <= VKD3DSIH_DCL_VERTICES_OUT)
|| handler_idx == VKD3DSIH_HS_DECLS;
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
index ff917dbf..c1306cac 100644
--- a/libs/vkd3d-shader/vkd3d_shader_main.c
+++ b/libs/vkd3d-shader/vkd3d_shader_main.c
@@ -460,7 +460,7 @@ static struct vkd3d_shader_descriptor_info *vkd3d_shader_scan_get_uav_descriptor
static bool vkd3d_shader_instruction_is_uav_read(const struct vkd3d_shader_instruction *instruction)
{
- enum VKD3D_SHADER_INSTRUCTION_HANDLER handler_idx = instruction->handler_idx;
+ enum vkd3d_shader_opcode handler_idx = instruction->handler_idx;
return (VKD3DSIH_ATOMIC_AND <= handler_idx && handler_idx <= VKD3DSIH_ATOMIC_XOR)
|| (VKD3DSIH_IMM_ATOMIC_ALLOC <= handler_idx && handler_idx <= VKD3DSIH_IMM_ATOMIC_XOR)
|| handler_idx == VKD3DSIH_LD_UAV_TYPED
@@ -482,7 +482,7 @@ static void vkd3d_shader_scan_record_uav_read(struct vkd3d_shader_scan_context *
static bool vkd3d_shader_instruction_is_uav_counter(const struct vkd3d_shader_instruction *instruction)
{
- enum VKD3D_SHADER_INSTRUCTION_HANDLER handler_idx = instruction->handler_idx;
+ enum vkd3d_shader_opcode handler_idx = instruction->handler_idx;
return handler_idx == VKD3DSIH_IMM_ATOMIC_ALLOC
|| handler_idx == VKD3DSIH_IMM_ATOMIC_CONSUME;
}
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index 01ad0872..19758481 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -93,7 +93,7 @@ enum vkd3d_shader_error
VKD3D_SHADER_WARNING_PP_DIV_BY_ZERO = 4306,
};
-enum VKD3D_SHADER_INSTRUCTION_HANDLER
+enum vkd3d_shader_opcode
{
VKD3DSIH_ABS,
VKD3DSIH_ADD,
@@ -779,7 +779,7 @@ struct vkd3d_shader_primitive_type
struct vkd3d_shader_instruction
{
- enum VKD3D_SHADER_INSTRUCTION_HANDLER handler_idx;
+ enum vkd3d_shader_opcode handler_idx;
DWORD flags;
unsigned int dst_count;
unsigned int src_count;
--
2.11.0
1
0
[PATCH v3 19/19] ntdll: Use syscall frames for x86_64 NtSetContextThread implementation.
by Jacek Caban 16 Feb '21
by Jacek Caban 16 Feb '21
16 Feb '21
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
v3: Preserve current NtContinue handling of ContextFlags.
dlls/ntdll/unix/server.c | 5 ++++-
dlls/ntdll/unix/signal_arm.c | 10 ++++++++++
dlls/ntdll/unix/signal_arm64.c | 10 ++++++++++
dlls/ntdll/unix/signal_i386.c | 11 +++++++++++
dlls/ntdll/unix/signal_x86_64.c | 21 ++++++++++++++++-----
dlls/ntdll/unix/unix_private.h | 1 +
tools/winebuild/import.c | 13 ++++++++++++-
7 files changed, 64 insertions(+), 7 deletions(-)
1
0