Wine-devel
Threads by month
- ----- 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
July 2021
- 86 participants
- 642 discussions
Signed-off-by: Conor McCarthy <cmccarthy(a)codeweavers.com>
---
tests/d3d12.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/tests/d3d12.c b/tests/d3d12.c
index 3892c1db..448bd290 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -15114,7 +15114,6 @@ static void test_srv_component_mapping(void)
float4 main(float4 position : SV_POSITION) : SV_Target
{
float2 p;
- D3D12_SUBRESOURCE_DATA data;
p.x = position.x / 32.0f;
p.y = position.y / 32.0f;
--
2.31.1
2
1
13 Jul '21
Signed-off-by: Conor McCarthy <cmccarthy(a)codeweavers.com>
---
libs/vkd3d-shader/trace.c | 77 +++++++++++++++++++++++++--------------
1 file changed, 49 insertions(+), 28 deletions(-)
diff --git a/libs/vkd3d-shader/trace.c b/libs/vkd3d-shader/trace.c
index 79a60897..0173075f 100644
--- a/libs/vkd3d-shader/trace.c
+++ b/libs/vkd3d-shader/trace.c
@@ -762,7 +762,18 @@ static void shader_print_subscript(struct vkd3d_d3d_asm_compiler *compiler,
shader_print_uint_literal(compiler, "", offset, "]");
}
-static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler, const struct vkd3d_shader_register *reg)
+static void shader_print_subscript_range(struct vkd3d_d3d_asm_compiler *compiler,
+ unsigned int offset_first, unsigned int offset_last)
+{
+ shader_print_uint_literal(compiler, "[", offset_first, ":");
+ if (offset_last != ~0u)
+ shader_print_uint_literal(compiler, "", offset_last, "]");
+ else
+ vkd3d_string_buffer_printf(&compiler->buffer, "*]");
+}
+
+static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler, const struct vkd3d_shader_register *reg,
+ bool is_declaration)
{
struct vkd3d_string_buffer *buffer = &compiler->buffer;
unsigned int offset = reg->idx[0].offset;
@@ -1049,6 +1060,8 @@ static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler, const
{
if (offset != ~0u)
{
+ bool is_sm_5_1 = shader_ver_ge(&compiler->shader_version, 5, 1);
+
if (reg->idx[0].rel_addr || reg->type == VKD3DSPR_IMMCONSTBUFFER
|| reg->type == VKD3DSPR_INCONTROLPOINT || (reg->type == VKD3DSPR_INPUT
&& (compiler->shader_version.type == VKD3D_SHADER_TYPE_GEOMETRY
@@ -1062,15 +1075,23 @@ static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler, const
vkd3d_string_buffer_printf(buffer, "%u%s", offset, compiler->colours.reset);
}
- /* For descriptors in sm < 5.1 we move the reg->idx values up one slot
- * to normalise with 5.1.
- * Here we should ignore it if it's a descriptor in sm < 5.1. */
- if (reg->idx[1].offset != ~0u &&
- (!is_descriptor || shader_ver_ge(&compiler->shader_version, 5, 1)))
- shader_print_subscript(compiler, reg->idx[1].offset, reg->idx[1].rel_addr);
-
- if (reg->idx[2].offset != ~0u)
- shader_print_subscript(compiler, reg->idx[2].offset, reg->idx[2].rel_addr);
+ /* For sm 5.1 descriptor declarations we need to print the register range instead of
+ * a single register index. */
+ if (is_descriptor && is_declaration && is_sm_5_1)
+ {
+ shader_print_subscript_range(compiler, reg->idx[1].offset, reg->idx[2].offset);
+ }
+ else
+ {
+ /* For descriptors in sm < 5.1 we move the reg->idx values up one slot
+ * to normalise with 5.1.
+ * Here we should ignore it if it's a descriptor in sm < 5.1. */
+ if (reg->idx[1].offset != ~0u && (!is_descriptor || is_sm_5_1))
+ shader_print_subscript(compiler, reg->idx[1].offset, reg->idx[1].rel_addr);
+
+ if (reg->idx[2].offset != ~0u)
+ shader_print_subscript(compiler, reg->idx[2].offset, reg->idx[2].rel_addr);
+ }
}
else
{
@@ -1087,12 +1108,12 @@ static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler, const
}
static void shader_dump_dst_param(struct vkd3d_d3d_asm_compiler *compiler,
- const struct vkd3d_shader_dst_param *param)
+ const struct vkd3d_shader_dst_param *param, bool is_declaration)
{
struct vkd3d_string_buffer *buffer = &compiler->buffer;
uint32_t write_mask = param->write_mask;
- shader_dump_register(compiler, ¶m->reg);
+ shader_dump_register(compiler, ¶m->reg, is_declaration);
if (write_mask)
{
@@ -1132,7 +1153,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, ¶m->reg);
+ shader_dump_register(compiler, ¶m->reg, false);
switch (src_modifier)
{
@@ -1432,13 +1453,13 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
shader_dump_decl_usage(compiler, &ins->declaration.semantic, ins->flags);
shader_dump_ins_modifiers(compiler, &ins->declaration.semantic.resource.reg);
vkd3d_string_buffer_printf(buffer, "%s ", compiler->colours.reset);
- shader_dump_register(compiler, &ins->declaration.semantic.resource.reg.reg);
+ shader_dump_register(compiler, &ins->declaration.semantic.resource.reg.reg, true);
shader_dump_register_space(compiler, ins->declaration.semantic.resource.range.space);
break;
case VKD3DSIH_DCL_CONSTANT_BUFFER:
vkd3d_string_buffer_printf(buffer, " ");
- shader_dump_register(compiler, &ins->declaration.cb.src.reg);
+ shader_dump_register(compiler, &ins->declaration.cb.src.reg, true);
if (shader_ver_ge(&compiler->shader_version, 5, 1))
shader_print_subscript(compiler, ins->declaration.cb.size, NULL);
shader_addline(buffer, ", %s",
@@ -1477,7 +1498,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_INDEX_RANGE:
vkd3d_string_buffer_printf(buffer, " ");
- shader_dump_dst_param(compiler, &ins->declaration.index_range.dst);
+ shader_dump_dst_param(compiler, &ins->declaration.index_range.dst, true);
shader_print_uint_literal(compiler, " ", ins->declaration.index_range.register_count, "");
break;
@@ -1492,7 +1513,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
vkd3d_string_buffer_printf(buffer, " ");
shader_dump_interpolation_mode(compiler, ins->flags);
shader_addline(buffer, " ");
- shader_dump_dst_param(compiler, &ins->declaration.dst);
+ shader_dump_dst_param(compiler, &ins->declaration.dst, true);
break;
case VKD3DSIH_DCL_INPUT_PS_SGV:
@@ -1500,7 +1521,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_INPUT_SIV:
case VKD3DSIH_DCL_OUTPUT_SIV:
vkd3d_string_buffer_printf(buffer, " ");
- shader_dump_dst_param(compiler, &ins->declaration.register_semantic.reg);
+ shader_dump_dst_param(compiler, &ins->declaration.register_semantic.reg, true);
shader_addline(buffer, ", ");
shader_dump_shader_input_sysval_semantic(compiler, ins->declaration.register_semantic.sysval_semantic);
break;
@@ -1509,7 +1530,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
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);
+ shader_dump_dst_param(compiler, &ins->declaration.register_semantic.reg, true);
shader_addline(buffer, ", ");
shader_dump_shader_input_sysval_semantic(compiler, ins->declaration.register_semantic.sysval_semantic);
break;
@@ -1517,7 +1538,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_INPUT:
case VKD3DSIH_DCL_OUTPUT:
vkd3d_string_buffer_printf(buffer, " ");
- shader_dump_dst_param(compiler, &ins->declaration.dst);
+ shader_dump_dst_param(compiler, &ins->declaration.dst, true);
break;
case VKD3DSIH_DCL_INPUT_PRIMITIVE:
@@ -1535,20 +1556,20 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_RESOURCE_RAW:
vkd3d_string_buffer_printf(buffer, " ");
- shader_dump_dst_param(compiler, &ins->declaration.raw_resource.resource.reg);
+ shader_dump_dst_param(compiler, &ins->declaration.raw_resource.resource.reg, true);
shader_dump_register_space(compiler, ins->declaration.raw_resource.resource.range.space);
break;
case VKD3DSIH_DCL_RESOURCE_STRUCTURED:
vkd3d_string_buffer_printf(buffer, " ");
- shader_dump_dst_param(compiler, &ins->declaration.structured_resource.resource.reg);
+ shader_dump_dst_param(compiler, &ins->declaration.structured_resource.resource.reg, true);
shader_print_uint_literal(compiler, ", ", ins->declaration.structured_resource.byte_stride, "");
shader_dump_register_space(compiler, ins->declaration.structured_resource.resource.range.space);
break;
case VKD3DSIH_DCL_SAMPLER:
vkd3d_string_buffer_printf(buffer, " ");
- shader_dump_register(compiler, &ins->declaration.sampler.src.reg);
+ shader_dump_register(compiler, &ins->declaration.sampler.src.reg, true);
if (ins->flags == VKD3DSI_SAMPLER_COMPARISON_MODE)
shader_addline(buffer, ", comparisonMode");
shader_dump_register_space(compiler, ins->declaration.sampler.range.space);
@@ -1581,13 +1602,13 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_TGSM_RAW:
vkd3d_string_buffer_printf(buffer, " ");
- shader_dump_dst_param(compiler, &ins->declaration.tgsm_raw.reg);
+ shader_dump_dst_param(compiler, &ins->declaration.tgsm_raw.reg, true);
shader_print_uint_literal(compiler, ", ", ins->declaration.tgsm_raw.byte_count, "");
break;
case VKD3DSIH_DCL_TGSM_STRUCTURED:
vkd3d_string_buffer_printf(buffer, " ");
- shader_dump_dst_param(compiler, &ins->declaration.tgsm_structured.reg);
+ shader_dump_dst_param(compiler, &ins->declaration.tgsm_structured.reg, true);
shader_print_uint_literal(compiler, ", ", ins->declaration.tgsm_structured.byte_stride, "");
shader_print_uint_literal(compiler, ", ", ins->declaration.tgsm_structured.structure_count, "");
break;
@@ -1601,14 +1622,14 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_UAV_RAW:
shader_dump_uav_flags(compiler, ins->flags);
shader_addline(buffer, " ");
- shader_dump_dst_param(compiler, &ins->declaration.raw_resource.resource.reg);
+ shader_dump_dst_param(compiler, &ins->declaration.raw_resource.resource.reg, true);
shader_dump_register_space(compiler, ins->declaration.raw_resource.resource.range.space);
break;
case VKD3DSIH_DCL_UAV_STRUCTURED:
shader_dump_uav_flags(compiler, ins->flags);
shader_addline(buffer, " ");
- shader_dump_dst_param(compiler, &ins->declaration.structured_resource.resource.reg);
+ shader_dump_dst_param(compiler, &ins->declaration.structured_resource.resource.reg, true);
shader_print_uint_literal(compiler, ", ", ins->declaration.structured_resource.byte_stride, "");
shader_dump_register_space(compiler, ins->declaration.structured_resource.resource.range.space);
break;
@@ -1671,7 +1692,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
{
shader_dump_ins_modifiers(compiler, &ins->dst[i]);
shader_addline(buffer, !i ? " " : ", ");
- shader_dump_dst_param(compiler, &ins->dst[i]);
+ shader_dump_dst_param(compiler, &ins->dst[i], false);
}
/* Other source tokens */
--
2.31.1
2
1
[PATCH v4 1/4] include: Add d2d1effects.idl with defines for D2D12DAffineTransform.
by Ziqing Hui 13 Jul '21
by Ziqing Hui 13 Jul '21
13 Jul '21
Signed-off-by: Ziqing Hui <zhui(a)codeweavers.com>
---
include/Makefile.in | 1 +
include/d2d1_1.idl | 1 +
include/d2d1effects.idl | 46 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 48 insertions(+)
create mode 100755 include/d2d1effects.idl
diff --git a/include/Makefile.in b/include/Makefile.in
index 61a74a210c9..46cb0f53a5e 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -99,6 +99,7 @@ SOURCES = \
d2d1.idl \
d2d1_1.idl \
d2d1_2.idl \
+ d2d1effects.idl \
d2dbasetypes.h \
d2derr.h \
d3d.h \
diff --git a/include/d2d1_1.idl b/include/d2d1_1.idl
index 257a970968f..fdec8ae5f9c 100644
--- a/include/d2d1_1.idl
+++ b/include/d2d1_1.idl
@@ -17,6 +17,7 @@
*/
import "d2d1.idl";
+import "d2d1effects.idl";
interface ID2D1DeviceContext;
interface ID2D1PathGeometry1;
diff --git a/include/d2d1effects.idl b/include/d2d1effects.idl
new file mode 100755
index 00000000000..ee1dbe94728
--- /dev/null
+++ b/include/d2d1effects.idl
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2021 Ziqing Hui for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+cpp_quote("DEFINE_GUID(CLSID_D2D12DAffineTransform, 0x6aa97485,0x6354,0x4cfc,0x90,0x8c,0xe4,0xa7,0x4f,0x62,0xc9,0x6c);")
+
+typedef enum D2D1_BORDER_MODE
+{
+ D2D1_BORDER_MODE_SOFT = 0x0,
+ D2D1_BORDER_MODE_HARD = 0x1,
+ D2D1_BORDER_MODE_FORCE_DWORD = 0xffffffff
+} D2D1_BORDER_MODE;
+
+typedef enum D2D1_2DAFFINETRANSFORM_PROP
+{
+ D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE = 0x0,
+ D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE = 0x1,
+ D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX = 0x2,
+ D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS = 0x3,
+ D2D1_2DAFFINETRANSFORM_PROP_FORCE_DWORD = 0xffffffff
+} D2D1_2DAFFINETRANSFORM_PROP;
+
+typedef enum D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE
+{
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR = 0x0,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR = 0x1,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_CUBIC = 0x2,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR = 0x3,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC = 0x4,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC = 0x5,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff
+} D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE;
--
2.25.1
2
4
This allows GDB to load symbols and resolve pending breakpoints for
dynamically loaded DLLs.
Signed-off-by: Anton Baskanov <baskanov(a)gmail.com>
---
programs/winedbg/gdbproxy.c | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/programs/winedbg/gdbproxy.c b/programs/winedbg/gdbproxy.c
index b8a8a1da2f8..4fbb3cdff59 100644
--- a/programs/winedbg/gdbproxy.c
+++ b/programs/winedbg/gdbproxy.c
@@ -395,7 +395,7 @@ static BOOL handle_exception(struct gdb_context* gdbctx, EXCEPTION_DEBUG_INFO* e
}
}
-static BOOL handle_debug_event(struct gdb_context* gdbctx)
+static BOOL handle_debug_event(struct gdb_context* gdbctx, BOOL stop_on_dll_load)
{
DEBUG_EVENT *de = &gdbctx->de;
struct dbg_thread *thread;
@@ -456,6 +456,8 @@ static BOOL handle_debug_event(struct gdb_context* gdbctx)
de->u.LoadDll.nDebugInfoSize);
dbg_load_module(gdbctx->process->handle, de->u.LoadDll.hFile, u.buffer,
(DWORD_PTR)de->u.LoadDll.lpBaseOfDll, 0);
+ if (stop_on_dll_load)
+ break;
return TRUE;
case UNLOAD_DLL_DEBUG_EVENT:
@@ -463,6 +465,8 @@ static BOOL handle_debug_event(struct gdb_context* gdbctx)
de->dwProcessId, de->dwThreadId, de->u.UnloadDll.lpBaseOfDll);
SymUnloadModule(gdbctx->process->handle,
(DWORD_PTR)de->u.UnloadDll.lpBaseOfDll);
+ if (stop_on_dll_load)
+ break;
return TRUE;
case EXCEPTION_DEBUG_EVENT:
@@ -596,7 +600,7 @@ static void wait_for_debuggee(struct gdb_context* gdbctx)
break;
}
}
- if (!handle_debug_event(gdbctx))
+ if (!handle_debug_event(gdbctx, TRUE))
break;
ContinueDebugEvent(gdbctx->de.dwProcessId, gdbctx->de.dwThreadId, DBG_CONTINUE);
}
@@ -916,6 +920,15 @@ static enum packet_return packet_reply_status(struct gdb_context* gdbctx)
packet_reply_val(gdbctx, gdbctx->de.u.ExitProcess.dwExitCode, 4);
packet_reply_close(gdbctx);
return packet_done | packet_last_f;
+
+ case LOAD_DLL_DEBUG_EVENT:
+ case UNLOAD_DLL_DEBUG_EVENT:
+ packet_reply_open(gdbctx);
+ packet_reply_add(gdbctx, "T");
+ packet_reply_val(gdbctx, SIGTRAP, 1);
+ packet_reply_add(gdbctx, "library:;");
+ packet_reply_close(gdbctx);
+ return packet_done;
}
}
@@ -2161,7 +2174,7 @@ static BOOL gdb_startup(struct gdb_context* gdbctx, unsigned flags, unsigned por
goto cleanup;
/* step 2: do the process internal creation */
- handle_debug_event(gdbctx);
+ handle_debug_event(gdbctx, FALSE);
/* step 3: fire up gdb (if requested) */
if (flags & FLAG_NO_START)
@@ -2250,7 +2263,7 @@ static BOOL gdb_init_context(struct gdb_context* gdbctx, unsigned flags, unsigne
/* gdbctx->dwProcessId = pid; */
if (!gdb_startup(gdbctx, flags, port)) return FALSE;
}
- else if (!handle_debug_event(gdbctx))
+ else if (!handle_debug_event(gdbctx, FALSE))
break;
ContinueDebugEvent(gdbctx->de.dwProcessId, gdbctx->de.dwThreadId, DBG_CONTINUE);
}
--
2.25.1
2
2
13 Jul '21
This allows GDB to load symbols and resolve pending breakpoints for
dynamically loaded DLLs.
Signed-off-by: Anton Baskanov <baskanov(a)gmail.com>
---
programs/winedbg/gdbproxy.c | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/programs/winedbg/gdbproxy.c b/programs/winedbg/gdbproxy.c
index b8a8a1da2f8..fb875cd1b29 100644
--- a/programs/winedbg/gdbproxy.c
+++ b/programs/winedbg/gdbproxy.c
@@ -395,7 +395,7 @@ static BOOL handle_exception(struct gdb_context* gdbctx, EXCEPTION_DEBUG_INFO* e
}
}
-static BOOL handle_debug_event(struct gdb_context* gdbctx)
+static BOOL handle_debug_event(struct gdb_context* gdbctx, BOOL stop_on_dll_load_unload)
{
DEBUG_EVENT *de = &gdbctx->de;
struct dbg_thread *thread;
@@ -456,6 +456,8 @@ static BOOL handle_debug_event(struct gdb_context* gdbctx)
de->u.LoadDll.nDebugInfoSize);
dbg_load_module(gdbctx->process->handle, de->u.LoadDll.hFile, u.buffer,
(DWORD_PTR)de->u.LoadDll.lpBaseOfDll, 0);
+ if (stop_on_dll_load_unload)
+ break;
return TRUE;
case UNLOAD_DLL_DEBUG_EVENT:
@@ -463,6 +465,8 @@ static BOOL handle_debug_event(struct gdb_context* gdbctx)
de->dwProcessId, de->dwThreadId, de->u.UnloadDll.lpBaseOfDll);
SymUnloadModule(gdbctx->process->handle,
(DWORD_PTR)de->u.UnloadDll.lpBaseOfDll);
+ if (stop_on_dll_load_unload)
+ break;
return TRUE;
case EXCEPTION_DEBUG_EVENT:
@@ -596,7 +600,7 @@ static void wait_for_debuggee(struct gdb_context* gdbctx)
break;
}
}
- if (!handle_debug_event(gdbctx))
+ if (!handle_debug_event(gdbctx, TRUE))
break;
ContinueDebugEvent(gdbctx->de.dwProcessId, gdbctx->de.dwThreadId, DBG_CONTINUE);
}
@@ -916,6 +920,15 @@ static enum packet_return packet_reply_status(struct gdb_context* gdbctx)
packet_reply_val(gdbctx, gdbctx->de.u.ExitProcess.dwExitCode, 4);
packet_reply_close(gdbctx);
return packet_done | packet_last_f;
+
+ case LOAD_DLL_DEBUG_EVENT:
+ case UNLOAD_DLL_DEBUG_EVENT:
+ packet_reply_open(gdbctx);
+ packet_reply_add(gdbctx, "T");
+ packet_reply_val(gdbctx, SIGTRAP, 1);
+ packet_reply_add(gdbctx, "library:;");
+ packet_reply_close(gdbctx);
+ return packet_done;
}
}
@@ -2161,7 +2174,7 @@ static BOOL gdb_startup(struct gdb_context* gdbctx, unsigned flags, unsigned por
goto cleanup;
/* step 2: do the process internal creation */
- handle_debug_event(gdbctx);
+ handle_debug_event(gdbctx, FALSE);
/* step 3: fire up gdb (if requested) */
if (flags & FLAG_NO_START)
@@ -2250,7 +2263,7 @@ static BOOL gdb_init_context(struct gdb_context* gdbctx, unsigned flags, unsigne
/* gdbctx->dwProcessId = pid; */
if (!gdb_startup(gdbctx, flags, port)) return FALSE;
}
- else if (!handle_debug_event(gdbctx))
+ else if (!handle_debug_event(gdbctx, FALSE))
break;
ContinueDebugEvent(gdbctx->de.dwProcessId, gdbctx->de.dwThreadId, DBG_CONTINUE);
}
--
2.25.1
1
0
12 Jul '21
We tag far fewer symbols this way.
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
---
configure.ac | 1 +
include/private/vkd3d_common.h | 6 +
include/private/vkd3d_debug.h | 19 ++-
include/private/vkd3d_memory.h | 3 +-
include/private/vkd3d_utf8.h | 2 +-
libs/vkd3d-common/debug.c | 2 +-
libs/vkd3d-shader/dxbc.c | 6 +-
libs/vkd3d-shader/vkd3d_shader_main.c | 24 +--
libs/vkd3d-shader/vkd3d_shader_private.h | 48 +++---
libs/vkd3d-utils/vkd3d_utils_main.c | 22 +--
libs/vkd3d/command.c | 6 +-
libs/vkd3d/device.c | 16 +-
libs/vkd3d/resource.c | 6 +-
libs/vkd3d/utils.c | 4 +-
libs/vkd3d/vkd3d_main.c | 10 +-
libs/vkd3d/vkd3d_private.h | 188 +++++++++++------------
16 files changed, 184 insertions(+), 179 deletions(-)
diff --git a/configure.ac b/configure.ac
index d5f6588..e9c135a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -47,6 +47,7 @@ AC_SUBST([VKD3D_CFLAGS])
AS_IF([test "x${GCC}" = "xyes"],
[VKD3D_CFLAGS="-Wall -pipe"
VKD3D_CHECK_CFLAGS([-std=c99])
+ VKD3D_CHECK_CFLAGS([-fvisibility=hidden])
VKD3D_CHECK_CFLAGS([-Wdeclaration-after-statement])
VKD3D_CHECK_CFLAGS([-Wimplicit-fallthrough])
VKD3D_CHECK_CFLAGS([-Wmissing-prototypes])
diff --git a/include/private/vkd3d_common.h b/include/private/vkd3d_common.h
index ac217e9..fd62ae8 100644
--- a/include/private/vkd3d_common.h
+++ b/include/private/vkd3d_common.h
@@ -53,6 +53,12 @@ static inline size_t align(size_t addr, size_t alignment)
# define VKD3D_UNUSED
#endif /* __GNUC__ */
+#if defined(__GNUC__) && !defined(__MINGW32__)
+# define VKD3D_API __attribute__((visibility("default")))
+#else
+# define VKD3D_API
+#endif
+
static inline unsigned int vkd3d_popcount(unsigned int v)
{
#ifdef _MSC_VER
diff --git a/include/private/vkd3d_debug.h b/include/private/vkd3d_debug.h
index c37c841..a206a92 100644
--- a/include/private/vkd3d_debug.h
+++ b/include/private/vkd3d_debug.h
@@ -44,15 +44,14 @@ enum vkd3d_dbg_level
VKD3D_DBG_LEVEL_TRACE,
};
-enum vkd3d_dbg_level vkd3d_dbg_get_level(void) DECLSPEC_HIDDEN;
+enum vkd3d_dbg_level vkd3d_dbg_get_level(void);
-void vkd3d_dbg_printf(enum vkd3d_dbg_level level, const char *function,
- const char *fmt, ...) VKD3D_PRINTF_FUNC(3, 4) DECLSPEC_HIDDEN;
+void vkd3d_dbg_printf(enum vkd3d_dbg_level level, const char *function, const char *fmt, ...) VKD3D_PRINTF_FUNC(3, 4);
-const char *vkd3d_dbg_sprintf(const char *fmt, ...) VKD3D_PRINTF_FUNC(1, 2) DECLSPEC_HIDDEN;
-const char *vkd3d_dbg_vsprintf(const char *fmt, va_list args) DECLSPEC_HIDDEN;
-const char *debugstr_a(const char *str) DECLSPEC_HIDDEN;
-const char *debugstr_w(const WCHAR *wstr, size_t wchar_size) DECLSPEC_HIDDEN;
+const char *vkd3d_dbg_sprintf(const char *fmt, ...) VKD3D_PRINTF_FUNC(1, 2);
+const char *vkd3d_dbg_vsprintf(const char *fmt, va_list args);
+const char *debugstr_a(const char *str);
+const char *debugstr_w(const WCHAR *wstr, size_t wchar_size);
#define VKD3D_DBG_LOG(level) \
do { \
@@ -103,7 +102,7 @@ static inline const char *debugstr_guid(const GUID *guid)
guid->Data4[5], guid->Data4[6], guid->Data4[7]);
}
-unsigned int vkd3d_env_var_as_uint(const char *name, unsigned int default_value) DECLSPEC_HIDDEN;
+unsigned int vkd3d_env_var_as_uint(const char *name, unsigned int default_value);
struct vkd3d_debug_option
{
@@ -111,8 +110,8 @@ struct vkd3d_debug_option
uint64_t flag;
};
-bool vkd3d_debug_list_has_member(const char *string, const char *member) DECLSPEC_HIDDEN;
+bool vkd3d_debug_list_has_member(const char *string, const char *member);
uint64_t vkd3d_parse_debug_options(const char *string,
- const struct vkd3d_debug_option *options, unsigned int option_count) DECLSPEC_HIDDEN;
+ const struct vkd3d_debug_option *options, unsigned int option_count);
#endif /* __VKD3D_DEBUG_H */
diff --git a/include/private/vkd3d_memory.h b/include/private/vkd3d_memory.h
index df93abf..8bbc691 100644
--- a/include/private/vkd3d_memory.h
+++ b/include/private/vkd3d_memory.h
@@ -54,7 +54,6 @@ static inline void vkd3d_free(void *ptr)
free(ptr);
}
-bool vkd3d_array_reserve(void **elements, size_t *capacity,
- size_t element_count, size_t element_size) DECLSPEC_HIDDEN;
+bool vkd3d_array_reserve(void **elements, size_t *capacity, size_t element_count, size_t element_size);
#endif /* __VKD3D_MEMORY_H */
diff --git a/include/private/vkd3d_utf8.h b/include/private/vkd3d_utf8.h
index ab32884..ccb9e17 100644
--- a/include/private/vkd3d_utf8.h
+++ b/include/private/vkd3d_utf8.h
@@ -21,6 +21,6 @@
#include "vkd3d_common.h"
-char *vkd3d_strdup_w_utf8(const WCHAR *wstr, size_t wchar_size) DECLSPEC_HIDDEN;
+char *vkd3d_strdup_w_utf8(const WCHAR *wstr, size_t wchar_size);
#endif /* __VKD3D_UTF8_H */
diff --git a/libs/vkd3d-common/debug.c b/libs/vkd3d-common/debug.c
index 33deed6..a4d5a3d 100644
--- a/libs/vkd3d-common/debug.c
+++ b/libs/vkd3d-common/debug.c
@@ -31,7 +31,7 @@
#define VKD3D_DEBUG_BUFFER_COUNT 64
#define VKD3D_DEBUG_BUFFER_SIZE 512
-extern const char *vkd3d_dbg_env_name DECLSPEC_HIDDEN;
+extern const char *vkd3d_dbg_env_name;
static const char *debug_level_names[] =
{
diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c
index 973a80d..231c48b 100644
--- a/libs/vkd3d-shader/dxbc.c
+++ b/libs/vkd3d-shader/dxbc.c
@@ -2726,7 +2726,7 @@ static int rts0_handler(const char *data, DWORD data_size, DWORD tag, void *cont
return shader_parse_root_signature(data, data_size, desc);
}
-int vkd3d_shader_parse_root_signature(const struct vkd3d_shader_code *dxbc,
+VKD3D_API int vkd3d_shader_parse_root_signature(const struct vkd3d_shader_code *dxbc,
struct vkd3d_shader_versioned_root_signature_desc *root_signature, char **messages)
{
struct vkd3d_shader_message_context message_context;
@@ -3288,7 +3288,7 @@ static int validate_root_signature_desc(const struct vkd3d_shader_versioned_root
return ret;
}
-int vkd3d_shader_serialize_root_signature(const struct vkd3d_shader_versioned_root_signature_desc *root_signature,
+VKD3D_API int vkd3d_shader_serialize_root_signature(const struct vkd3d_shader_versioned_root_signature_desc *root_signature,
struct vkd3d_shader_code *dxbc, char **messages)
{
struct root_signature_writer_context context;
@@ -3592,7 +3592,7 @@ fail:
return ret;
}
-int vkd3d_shader_convert_root_signature(struct vkd3d_shader_versioned_root_signature_desc *dst,
+VKD3D_API int vkd3d_shader_convert_root_signature(struct vkd3d_shader_versioned_root_signature_desc *dst,
enum vkd3d_shader_root_signature_version version, const struct vkd3d_shader_versioned_root_signature_desc *src)
{
int ret;
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
index 16d895f..4d49eef 100644
--- a/libs/vkd3d-shader/vkd3d_shader_main.c
+++ b/libs/vkd3d-shader/vkd3d_shader_main.c
@@ -292,14 +292,14 @@ static int vkd3d_shader_validate_compile_info(const struct vkd3d_shader_compile_
return VKD3D_OK;
}
-void vkd3d_shader_free_messages(char *messages)
+VKD3D_API void vkd3d_shader_free_messages(char *messages)
{
TRACE("messages %p.\n", messages);
vkd3d_free(messages);
}
-int vkd3d_shader_compile(const struct vkd3d_shader_compile_info *compile_info,
+VKD3D_API int vkd3d_shader_compile(const struct vkd3d_shader_compile_info *compile_info,
struct vkd3d_shader_code *out, char **messages)
{
struct vkd3d_shader_scan_descriptor_info scan_descriptor_info;
@@ -837,7 +837,7 @@ static int vkd3d_shader_scan_instruction(struct vkd3d_shader_scan_context *conte
return VKD3D_OK;
}
-int vkd3d_shader_scan(const struct vkd3d_shader_compile_info *compile_info, char **messages)
+VKD3D_API int vkd3d_shader_scan(const struct vkd3d_shader_compile_info *compile_info, char **messages)
{
struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info;
struct vkd3d_shader_message_context *message_context;
@@ -912,14 +912,14 @@ done:
return ret;
}
-void vkd3d_shader_free_scan_descriptor_info(struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info)
+VKD3D_API void vkd3d_shader_free_scan_descriptor_info(struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info)
{
TRACE("scan_descriptor_info %p.\n", scan_descriptor_info);
vkd3d_free(scan_descriptor_info->descriptors);
}
-void vkd3d_shader_free_shader_code(struct vkd3d_shader_code *shader_code)
+VKD3D_API void vkd3d_shader_free_shader_code(struct vkd3d_shader_code *shader_code)
{
TRACE("shader_code %p.\n", shader_code);
@@ -960,7 +960,7 @@ static void vkd3d_shader_free_root_signature_v_1_1(struct vkd3d_shader_root_sign
memset(root_signature, 0, sizeof(*root_signature));
}
-void vkd3d_shader_free_root_signature(struct vkd3d_shader_versioned_root_signature_desc *desc)
+VKD3D_API void vkd3d_shader_free_root_signature(struct vkd3d_shader_versioned_root_signature_desc *desc)
{
TRACE("desc %p.\n", desc);
@@ -981,7 +981,7 @@ void vkd3d_shader_free_root_signature(struct vkd3d_shader_versioned_root_signatu
desc->version = 0;
}
-int vkd3d_shader_parse_input_signature(const struct vkd3d_shader_code *dxbc,
+VKD3D_API int vkd3d_shader_parse_input_signature(const struct vkd3d_shader_code *dxbc,
struct vkd3d_shader_signature *signature, char **messages)
{
struct vkd3d_shader_message_context message_context;
@@ -1004,7 +1004,7 @@ int vkd3d_shader_parse_input_signature(const struct vkd3d_shader_code *dxbc,
return ret;
}
-struct vkd3d_shader_signature_element *vkd3d_shader_find_signature_element(
+VKD3D_API struct vkd3d_shader_signature_element *vkd3d_shader_find_signature_element(
const struct vkd3d_shader_signature *signature, const char *semantic_name,
unsigned int semantic_index, unsigned int stream_index)
{
@@ -1026,7 +1026,7 @@ struct vkd3d_shader_signature_element *vkd3d_shader_find_signature_element(
return NULL;
}
-void vkd3d_shader_free_shader_signature(struct vkd3d_shader_signature *signature)
+VKD3D_API void vkd3d_shader_free_shader_signature(struct vkd3d_shader_signature *signature)
{
TRACE("signature %p.\n", signature);
@@ -1034,7 +1034,7 @@ void vkd3d_shader_free_shader_signature(struct vkd3d_shader_signature *signature
signature->elements = NULL;
}
-const char *vkd3d_shader_get_version(unsigned int *major, unsigned int *minor)
+VKD3D_API const char *vkd3d_shader_get_version(unsigned int *major, unsigned int *minor)
{
int x, y;
@@ -1052,7 +1052,7 @@ const char *vkd3d_shader_get_version(unsigned int *major, unsigned int *minor)
return "vkd3d-shader " PACKAGE_VERSION VKD3D_VCS_ID;
}
-const enum vkd3d_shader_source_type *vkd3d_shader_get_supported_source_types(unsigned int *count)
+VKD3D_API const enum vkd3d_shader_source_type *vkd3d_shader_get_supported_source_types(unsigned int *count)
{
static const enum vkd3d_shader_source_type types[] =
{
@@ -1065,7 +1065,7 @@ const enum vkd3d_shader_source_type *vkd3d_shader_get_supported_source_types(uns
return types;
}
-const enum vkd3d_shader_target_type *vkd3d_shader_get_supported_target_types(
+VKD3D_API const enum vkd3d_shader_target_type *vkd3d_shader_get_supported_target_types(
enum vkd3d_shader_source_type source_type, unsigned int *count)
{
static const enum vkd3d_shader_target_type dxbc_tpf_types[] =
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index 1acb01f..1291148 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -809,18 +809,18 @@ static inline bool vkd3d_shader_register_is_output(const struct vkd3d_shader_reg
return reg->type == VKD3DSPR_OUTPUT || reg->type == VKD3DSPR_COLOROUT;
}
-void vkd3d_shader_trace(void *data) DECLSPEC_HIDDEN;
+void vkd3d_shader_trace(void *data);
-const char *shader_get_type_prefix(enum vkd3d_shader_type type) DECLSPEC_HIDDEN;
+const char *shader_get_type_prefix(enum vkd3d_shader_type type);
void *shader_sm4_init(const DWORD *byte_code, size_t byte_code_size,
- const struct vkd3d_shader_signature *output_signature) DECLSPEC_HIDDEN;
-void shader_sm4_free(void *data) DECLSPEC_HIDDEN;
+ const struct vkd3d_shader_signature *output_signature);
+void shader_sm4_free(void *data);
void shader_sm4_read_header(void *data, const DWORD **ptr,
- struct vkd3d_shader_version *shader_version) DECLSPEC_HIDDEN;
+ struct vkd3d_shader_version *shader_version);
void shader_sm4_read_instruction(void *data, const DWORD **ptr,
- struct vkd3d_shader_instruction *ins) DECLSPEC_HIDDEN;
-bool shader_sm4_is_end(void *data, const DWORD **ptr) DECLSPEC_HIDDEN;
+ struct vkd3d_shader_instruction *ins);
+bool shader_sm4_is_end(void *data, const DWORD **ptr);
struct vkd3d_string_buffer
{
@@ -829,9 +829,9 @@ struct vkd3d_string_buffer
unsigned int content_size;
};
-void vkd3d_string_buffer_cleanup(struct vkd3d_string_buffer *buffer) DECLSPEC_HIDDEN;
-bool vkd3d_string_buffer_init(struct vkd3d_string_buffer *buffer) DECLSPEC_HIDDEN;
-int vkd3d_string_buffer_vprintf(struct vkd3d_string_buffer *buffer, const char *format, va_list args) DECLSPEC_HIDDEN;
+void vkd3d_string_buffer_cleanup(struct vkd3d_string_buffer *buffer);
+bool vkd3d_string_buffer_init(struct vkd3d_string_buffer *buffer);
+int vkd3d_string_buffer_vprintf(struct vkd3d_string_buffer *buffer, const char *format, va_list args);
struct vkd3d_shader_message_context
{
@@ -841,39 +841,39 @@ struct vkd3d_shader_message_context
struct vkd3d_string_buffer messages;
};
-void vkd3d_shader_message_context_cleanup(struct vkd3d_shader_message_context *context) DECLSPEC_HIDDEN;
-char *vkd3d_shader_message_context_copy_messages(struct vkd3d_shader_message_context *context) DECLSPEC_HIDDEN;
+void vkd3d_shader_message_context_cleanup(struct vkd3d_shader_message_context *context);
+char *vkd3d_shader_message_context_copy_messages(struct vkd3d_shader_message_context *context);
bool vkd3d_shader_message_context_init(struct vkd3d_shader_message_context *context,
- enum vkd3d_shader_log_level log_level, const char *source_name) DECLSPEC_HIDDEN;
+ enum vkd3d_shader_log_level log_level, const char *source_name);
void vkd3d_shader_message_context_trace_messages_(const struct vkd3d_shader_message_context *context,
- const char *function) DECLSPEC_HIDDEN;
+ const char *function);
#define vkd3d_shader_message_context_trace_messages(context) \
vkd3d_shader_message_context_trace_messages_(context, __FUNCTION__)
void vkd3d_shader_error(struct vkd3d_shader_message_context *context, enum vkd3d_shader_error error,
- const char *format, ...) VKD3D_PRINTF_FUNC(3, 4) DECLSPEC_HIDDEN;
+ const char *format, ...) VKD3D_PRINTF_FUNC(3, 4);
void vkd3d_shader_verror(struct vkd3d_shader_message_context *context,
- enum vkd3d_shader_error error, const char *format, va_list args) DECLSPEC_HIDDEN;
+ enum vkd3d_shader_error error, const char *format, va_list args);
int shader_extract_from_dxbc(const void *dxbc, size_t dxbc_length,
- struct vkd3d_shader_message_context *message_context, struct vkd3d_shader_desc *desc) DECLSPEC_HIDDEN;
-void free_shader_desc(struct vkd3d_shader_desc *desc) DECLSPEC_HIDDEN;
+ struct vkd3d_shader_message_context *message_context, struct vkd3d_shader_desc *desc);
+void free_shader_desc(struct vkd3d_shader_desc *desc);
int shader_parse_input_signature(const void *dxbc, size_t dxbc_length,
- struct vkd3d_shader_message_context *message_context, struct vkd3d_shader_signature *signature) DECLSPEC_HIDDEN;
+ struct vkd3d_shader_message_context *message_context, struct vkd3d_shader_signature *signature);
struct vkd3d_dxbc_compiler;
struct vkd3d_dxbc_compiler *vkd3d_dxbc_compiler_create(const struct vkd3d_shader_version *shader_version,
const struct vkd3d_shader_desc *shader_desc, const struct vkd3d_shader_compile_info *compile_info,
const struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info,
- struct vkd3d_shader_message_context *message_context) DECLSPEC_HIDDEN;
+ struct vkd3d_shader_message_context *message_context);
int vkd3d_dxbc_compiler_handle_instruction(struct vkd3d_dxbc_compiler *compiler,
- const struct vkd3d_shader_instruction *instruction) DECLSPEC_HIDDEN;
+ const struct vkd3d_shader_instruction *instruction);
int vkd3d_dxbc_compiler_generate_spirv(struct vkd3d_dxbc_compiler *compiler,
- const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *spirv) DECLSPEC_HIDDEN;
-void vkd3d_dxbc_compiler_destroy(struct vkd3d_dxbc_compiler *compiler) DECLSPEC_HIDDEN;
+ const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *spirv);
+void vkd3d_dxbc_compiler_destroy(struct vkd3d_dxbc_compiler *compiler);
-void vkd3d_compute_dxbc_checksum(const void *dxbc, size_t size, uint32_t checksum[4]) DECLSPEC_HIDDEN;
+void vkd3d_compute_dxbc_checksum(const void *dxbc, size_t size, uint32_t checksum[4]);
static inline enum vkd3d_shader_component_type vkd3d_component_type_from_data_type(
enum vkd3d_data_type data_type)
diff --git a/libs/vkd3d-utils/vkd3d_utils_main.c b/libs/vkd3d-utils/vkd3d_utils_main.c
index c19fe7f..b64693e 100644
--- a/libs/vkd3d-utils/vkd3d_utils_main.c
+++ b/libs/vkd3d-utils/vkd3d_utils_main.c
@@ -21,14 +21,14 @@
VKD3D_DEBUG_ENV_NAME("VKD3D_DEBUG");
-HRESULT WINAPI D3D12GetDebugInterface(REFIID iid, void **debug)
+VKD3D_API HRESULT WINAPI D3D12GetDebugInterface(REFIID iid, void **debug)
{
FIXME("iid %s, debug %p stub!\n", debugstr_guid(iid), debug);
return E_NOTIMPL;
}
-HRESULT WINAPI D3D12CreateDeviceVKD3D(IUnknown *adapter, D3D_FEATURE_LEVEL minimum_feature_level,
+VKD3D_API HRESULT WINAPI D3D12CreateDeviceVKD3D(IUnknown *adapter, D3D_FEATURE_LEVEL minimum_feature_level,
REFIID iid, void **device, enum vkd3d_api_version api_version)
{
struct vkd3d_optional_instance_extensions_info optional_extensions_info;
@@ -85,13 +85,13 @@ HRESULT WINAPI D3D12CreateDeviceVKD3D(IUnknown *adapter, D3D_FEATURE_LEVEL minim
return vkd3d_create_device(&device_create_info, iid, device);
}
-HRESULT WINAPI D3D12CreateDevice(IUnknown *adapter,
+VKD3D_API HRESULT WINAPI D3D12CreateDevice(IUnknown *adapter,
D3D_FEATURE_LEVEL minimum_feature_level, REFIID iid, void **device)
{
return D3D12CreateDeviceVKD3D(adapter, minimum_feature_level, iid, device, VKD3D_API_VERSION_1_0);
}
-HRESULT WINAPI D3D12CreateRootSignatureDeserializer(const void *data, SIZE_T data_size,
+VKD3D_API HRESULT WINAPI D3D12CreateRootSignatureDeserializer(const void *data, SIZE_T data_size,
REFIID iid, void **deserializer)
{
TRACE("data %p, data_size %lu, iid %s, deserializer %p.\n",
@@ -100,7 +100,7 @@ HRESULT WINAPI D3D12CreateRootSignatureDeserializer(const void *data, SIZE_T dat
return vkd3d_create_root_signature_deserializer(data, data_size, iid, deserializer);
}
-HRESULT WINAPI D3D12CreateVersionedRootSignatureDeserializer(const void *data, SIZE_T data_size,
+VKD3D_API HRESULT WINAPI D3D12CreateVersionedRootSignatureDeserializer(const void *data, SIZE_T data_size,
REFIID iid,void **deserializer)
{
TRACE("data %p, data_size %lu, iid %s, deserializer %p.\n",
@@ -109,7 +109,7 @@ HRESULT WINAPI D3D12CreateVersionedRootSignatureDeserializer(const void *data, S
return vkd3d_create_versioned_root_signature_deserializer(data, data_size, iid, deserializer);
}
-HRESULT WINAPI D3D12SerializeRootSignature(const D3D12_ROOT_SIGNATURE_DESC *desc,
+VKD3D_API HRESULT WINAPI D3D12SerializeRootSignature(const D3D12_ROOT_SIGNATURE_DESC *desc,
D3D_ROOT_SIGNATURE_VERSION version, ID3DBlob **blob, ID3DBlob **error_blob)
{
TRACE("desc %p, version %#x, blob %p, error_blob %p.\n", desc, version, blob, error_blob);
@@ -117,7 +117,7 @@ HRESULT WINAPI D3D12SerializeRootSignature(const D3D12_ROOT_SIGNATURE_DESC *desc
return vkd3d_serialize_root_signature(desc, version, blob, error_blob);
}
-HRESULT WINAPI D3D12SerializeVersionedRootSignature(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *desc,
+VKD3D_API HRESULT WINAPI D3D12SerializeVersionedRootSignature(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *desc,
ID3DBlob **blob, ID3DBlob **error_blob)
{
TRACE("desc %p, blob %p, error_blob %p.\n", desc, blob, error_blob);
@@ -126,7 +126,7 @@ HRESULT WINAPI D3D12SerializeVersionedRootSignature(const D3D12_VERSIONED_ROOT_S
}
/* Events */
-HANDLE vkd3d_create_event(void)
+VKD3D_API HANDLE vkd3d_create_event(void)
{
struct vkd3d_event *event;
int rc;
@@ -157,7 +157,7 @@ HANDLE vkd3d_create_event(void)
return event;
}
-unsigned int vkd3d_wait_event(HANDLE event, unsigned int milliseconds)
+VKD3D_API unsigned int vkd3d_wait_event(HANDLE event, unsigned int milliseconds)
{
struct vkd3d_event *impl = event;
int rc;
@@ -200,7 +200,7 @@ unsigned int vkd3d_wait_event(HANDLE event, unsigned int milliseconds)
return VKD3D_WAIT_FAILED;
}
-HRESULT vkd3d_signal_event(HANDLE event)
+VKD3D_API HRESULT vkd3d_signal_event(HANDLE event)
{
struct vkd3d_event *impl = event;
int rc;
@@ -219,7 +219,7 @@ HRESULT vkd3d_signal_event(HANDLE event)
return S_OK;
}
-void vkd3d_destroy_event(HANDLE event)
+VKD3D_API void vkd3d_destroy_event(HANDLE event)
{
struct vkd3d_event *impl = event;
int rc;
diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c
index e5c6791..4ff510a 100644
--- a/libs/vkd3d/command.c
+++ b/libs/vkd3d/command.c
@@ -6251,21 +6251,21 @@ HRESULT d3d12_command_queue_create(struct d3d12_device *device,
return S_OK;
}
-uint32_t vkd3d_get_vk_queue_family_index(ID3D12CommandQueue *queue)
+VKD3D_API uint32_t vkd3d_get_vk_queue_family_index(ID3D12CommandQueue *queue)
{
struct d3d12_command_queue *d3d12_queue = impl_from_ID3D12CommandQueue(queue);
return d3d12_queue->vkd3d_queue->vk_family_index;
}
-VkQueue vkd3d_acquire_vk_queue(ID3D12CommandQueue *queue)
+VKD3D_API VkQueue vkd3d_acquire_vk_queue(ID3D12CommandQueue *queue)
{
struct d3d12_command_queue *d3d12_queue = impl_from_ID3D12CommandQueue(queue);
return vkd3d_queue_acquire(d3d12_queue->vkd3d_queue);
}
-void vkd3d_release_vk_queue(ID3D12CommandQueue *queue)
+VKD3D_API void vkd3d_release_vk_queue(ID3D12CommandQueue *queue)
{
struct d3d12_command_queue *d3d12_queue = impl_from_ID3D12CommandQueue(queue);
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index bef6477..38d3d56 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -589,7 +589,7 @@ static HRESULT vkd3d_instance_init(struct vkd3d_instance *instance,
return S_OK;
}
-HRESULT vkd3d_create_instance(const struct vkd3d_instance_create_info *create_info,
+VKD3D_API HRESULT vkd3d_create_instance(const struct vkd3d_instance_create_info *create_info,
struct vkd3d_instance **instance)
{
struct vkd3d_instance *object;
@@ -637,7 +637,7 @@ static void vkd3d_destroy_instance(struct vkd3d_instance *instance)
vkd3d_free(instance);
}
-ULONG vkd3d_instance_incref(struct vkd3d_instance *instance)
+VKD3D_API ULONG vkd3d_instance_incref(struct vkd3d_instance *instance)
{
ULONG refcount = InterlockedIncrement(&instance->refcount);
@@ -646,7 +646,7 @@ ULONG vkd3d_instance_incref(struct vkd3d_instance *instance)
return refcount;
}
-ULONG vkd3d_instance_decref(struct vkd3d_instance *instance)
+VKD3D_API ULONG vkd3d_instance_decref(struct vkd3d_instance *instance)
{
ULONG refcount = InterlockedDecrement(&instance->refcount);
@@ -658,7 +658,7 @@ ULONG vkd3d_instance_decref(struct vkd3d_instance *instance)
return refcount;
}
-VkInstance vkd3d_instance_get_vk_instance(struct vkd3d_instance *instance)
+VKD3D_API VkInstance vkd3d_instance_get_vk_instance(struct vkd3d_instance *instance)
{
return instance->vk_instance;
}
@@ -3828,28 +3828,28 @@ HRESULT vkd3d_join_thread(struct vkd3d_instance *instance, union vkd3d_thread_ha
return hr;
}
-IUnknown *vkd3d_get_device_parent(ID3D12Device *device)
+VKD3D_API IUnknown *vkd3d_get_device_parent(ID3D12Device *device)
{
struct d3d12_device *d3d12_device = impl_from_ID3D12Device(device);
return d3d12_device->parent;
}
-VkDevice vkd3d_get_vk_device(ID3D12Device *device)
+VKD3D_API VkDevice vkd3d_get_vk_device(ID3D12Device *device)
{
struct d3d12_device *d3d12_device = impl_from_ID3D12Device(device);
return d3d12_device->vk_device;
}
-VkPhysicalDevice vkd3d_get_vk_physical_device(ID3D12Device *device)
+VKD3D_API VkPhysicalDevice vkd3d_get_vk_physical_device(ID3D12Device *device)
{
struct d3d12_device *d3d12_device = impl_from_ID3D12Device(device);
return d3d12_device->vk_physical_device;
}
-struct vkd3d_instance *vkd3d_instance_from_device(ID3D12Device *device)
+VKD3D_API struct vkd3d_instance *vkd3d_instance_from_device(ID3D12Device *device)
{
struct d3d12_device *d3d12_device = impl_from_ID3D12Device(device);
diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c
index a9d4d46..a432806 100644
--- a/libs/vkd3d/resource.c
+++ b/libs/vkd3d/resource.c
@@ -1983,7 +1983,7 @@ HRESULT d3d12_reserved_resource_create(struct d3d12_device *device,
return S_OK;
}
-HRESULT vkd3d_create_image_resource(ID3D12Device *device,
+VKD3D_API HRESULT vkd3d_create_image_resource(ID3D12Device *device,
const struct vkd3d_image_resource_create_info *create_info, ID3D12Resource **resource)
{
struct d3d12_device *d3d12_device = unsafe_impl_from_ID3D12Device(device);
@@ -2035,13 +2035,13 @@ HRESULT vkd3d_create_image_resource(ID3D12Device *device,
return S_OK;
}
-ULONG vkd3d_resource_incref(ID3D12Resource *resource)
+VKD3D_API ULONG vkd3d_resource_incref(ID3D12Resource *resource)
{
TRACE("resource %p.\n", resource);
return d3d12_resource_incref(impl_from_ID3D12Resource(resource));
}
-ULONG vkd3d_resource_decref(ID3D12Resource *resource)
+VKD3D_API ULONG vkd3d_resource_decref(ID3D12Resource *resource)
{
TRACE("resource %p.\n", resource);
return d3d12_resource_decref(impl_from_ID3D12Resource(resource));
diff --git a/libs/vkd3d/utils.c b/libs/vkd3d/utils.c
index 7abfd42..ea11f3a 100644
--- a/libs/vkd3d/utils.c
+++ b/libs/vkd3d/utils.c
@@ -506,7 +506,7 @@ void vkd3d_format_copy_data(const struct vkd3d_format *format, const uint8_t *sr
}
}
-VkFormat vkd3d_get_vk_format(DXGI_FORMAT format)
+VKD3D_API VkFormat vkd3d_get_vk_format(DXGI_FORMAT format)
{
const struct vkd3d_format *vkd3d_format;
@@ -516,7 +516,7 @@ VkFormat vkd3d_get_vk_format(DXGI_FORMAT format)
return vkd3d_format->vk_format;
}
-DXGI_FORMAT vkd3d_get_dxgi_format(VkFormat format)
+VKD3D_API DXGI_FORMAT vkd3d_get_dxgi_format(VkFormat format)
{
DXGI_FORMAT dxgi_format;
VkFormat vk_format;
diff --git a/libs/vkd3d/vkd3d_main.c b/libs/vkd3d/vkd3d_main.c
index 327cdf8..4c0d6c5 100644
--- a/libs/vkd3d/vkd3d_main.c
+++ b/libs/vkd3d/vkd3d_main.c
@@ -21,7 +21,7 @@
VKD3D_DEBUG_ENV_NAME("VKD3D_DEBUG");
-HRESULT vkd3d_create_device(const struct vkd3d_device_create_info *create_info,
+VKD3D_API HRESULT vkd3d_create_device(const struct vkd3d_device_create_info *create_info,
REFIID iid, void **device)
{
struct vkd3d_instance *instance;
@@ -216,7 +216,7 @@ static HRESULT d3d12_root_signature_deserializer_init(struct d3d12_root_signatur
return S_OK;
}
-HRESULT vkd3d_create_root_signature_deserializer(const void *data, SIZE_T data_size,
+VKD3D_API HRESULT vkd3d_create_root_signature_deserializer(const void *data, SIZE_T data_size,
REFIID iid, void **deserializer)
{
struct vkd3d_shader_code dxbc = {data, data_size};
@@ -400,7 +400,7 @@ static HRESULT d3d12_versioned_root_signature_deserializer_init(struct d3d12_ver
return S_OK;
}
-HRESULT vkd3d_create_versioned_root_signature_deserializer(const void *data, SIZE_T data_size,
+VKD3D_API HRESULT vkd3d_create_versioned_root_signature_deserializer(const void *data, SIZE_T data_size,
REFIID iid, void **deserializer)
{
struct d3d12_versioned_root_signature_deserializer *object;
@@ -537,7 +537,7 @@ static HRESULT d3d_blob_create(void *buffer, SIZE_T size, struct d3d_blob **blob
return S_OK;
}
-HRESULT vkd3d_serialize_root_signature(const D3D12_ROOT_SIGNATURE_DESC *desc,
+VKD3D_API HRESULT vkd3d_serialize_root_signature(const D3D12_ROOT_SIGNATURE_DESC *desc,
D3D_ROOT_SIGNATURE_VERSION version, ID3DBlob **blob, ID3DBlob **error_blob)
{
struct vkd3d_shader_versioned_root_signature_desc vkd3d_desc;
@@ -592,7 +592,7 @@ HRESULT vkd3d_serialize_root_signature(const D3D12_ROOT_SIGNATURE_DESC *desc,
return S_OK;
}
-HRESULT vkd3d_serialize_versioned_root_signature(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *desc,
+VKD3D_API HRESULT vkd3d_serialize_versioned_root_signature(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *desc,
ID3DBlob **blob, ID3DBlob **error_blob)
{
const struct vkd3d_shader_versioned_root_signature_desc *vkd3d_desc;
diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h
index 9f0982d..54077f9 100644
--- a/libs/vkd3d/vkd3d_private.h
+++ b/libs/vkd3d/vkd3d_private.h
@@ -82,9 +82,9 @@ struct vkd3d_vk_device_procs
};
#undef DECLARE_VK_PFN
-HRESULT hresult_from_errno(int rc) DECLSPEC_HIDDEN;
-HRESULT hresult_from_vk_result(VkResult vr) DECLSPEC_HIDDEN;
-HRESULT hresult_from_vkd3d_result(int vkd3d_result) DECLSPEC_HIDDEN;
+HRESULT hresult_from_errno(int rc);
+HRESULT hresult_from_vk_result(VkResult vr);
+HRESULT hresult_from_vkd3d_result(int vkd3d_result);
struct vkd3d_vulkan_info
{
@@ -161,8 +161,8 @@ union vkd3d_thread_handle
};
HRESULT vkd3d_create_thread(struct vkd3d_instance *instance,
- PFN_vkd3d_thread thread_main, void *data, union vkd3d_thread_handle *thread) DECLSPEC_HIDDEN;
-HRESULT vkd3d_join_thread(struct vkd3d_instance *instance, union vkd3d_thread_handle *thread) DECLSPEC_HIDDEN;
+ PFN_vkd3d_thread thread_main, void *data, union vkd3d_thread_handle *thread);
+HRESULT vkd3d_join_thread(struct vkd3d_instance *instance, union vkd3d_thread_handle *thread);
struct vkd3d_waiting_fence
{
@@ -199,9 +199,9 @@ struct vkd3d_fence_worker
};
HRESULT vkd3d_fence_worker_start(struct vkd3d_fence_worker *worker,
- struct d3d12_device *device) DECLSPEC_HIDDEN;
+ struct d3d12_device *device);
HRESULT vkd3d_fence_worker_stop(struct vkd3d_fence_worker *worker,
- struct d3d12_device *device) DECLSPEC_HIDDEN;
+ struct d3d12_device *device);
struct vkd3d_gpu_va_allocation
{
@@ -230,11 +230,11 @@ struct vkd3d_gpu_va_allocator
};
D3D12_GPU_VIRTUAL_ADDRESS vkd3d_gpu_va_allocator_allocate(struct vkd3d_gpu_va_allocator *allocator,
- size_t alignment, size_t size, void *ptr) DECLSPEC_HIDDEN;
+ size_t alignment, size_t size, void *ptr);
void *vkd3d_gpu_va_allocator_dereference(struct vkd3d_gpu_va_allocator *allocator,
- D3D12_GPU_VIRTUAL_ADDRESS address) DECLSPEC_HIDDEN;
+ D3D12_GPU_VIRTUAL_ADDRESS address);
void vkd3d_gpu_va_allocator_free(struct vkd3d_gpu_va_allocator *allocator,
- D3D12_GPU_VIRTUAL_ADDRESS address) DECLSPEC_HIDDEN;
+ D3D12_GPU_VIRTUAL_ADDRESS address);
struct vkd3d_render_pass_key
{
@@ -257,11 +257,11 @@ struct vkd3d_render_pass_cache
};
void vkd3d_render_pass_cache_cleanup(struct vkd3d_render_pass_cache *cache,
- struct d3d12_device *device) DECLSPEC_HIDDEN;
+ struct d3d12_device *device);
HRESULT vkd3d_render_pass_cache_find(struct vkd3d_render_pass_cache *cache,
struct d3d12_device *device, const struct vkd3d_render_pass_key *key,
- VkRenderPass *vk_render_pass) DECLSPEC_HIDDEN;
-void vkd3d_render_pass_cache_init(struct vkd3d_render_pass_cache *cache) DECLSPEC_HIDDEN;
+ VkRenderPass *vk_render_pass);
+void vkd3d_render_pass_cache_init(struct vkd3d_render_pass_cache *cache);
struct vkd3d_private_store
{
@@ -317,11 +317,11 @@ static inline void vkd3d_private_store_destroy(struct vkd3d_private_store *store
}
HRESULT vkd3d_get_private_data(struct vkd3d_private_store *store,
- const GUID *tag, unsigned int *out_size, void *out) DECLSPEC_HIDDEN;
+ const GUID *tag, unsigned int *out_size, void *out);
HRESULT vkd3d_set_private_data(struct vkd3d_private_store *store,
- const GUID *tag, unsigned int data_size, const void *data) DECLSPEC_HIDDEN;
+ const GUID *tag, unsigned int data_size, const void *data);
HRESULT vkd3d_set_private_data_interface(struct vkd3d_private_store *store,
- const GUID *tag, const IUnknown *object) DECLSPEC_HIDDEN;
+ const GUID *tag, const IUnknown *object);
struct vkd3d_signaled_semaphore
{
@@ -362,7 +362,7 @@ struct d3d12_fence
};
HRESULT d3d12_fence_create(struct d3d12_device *device,
- uint64_t initial_value, D3D12_FENCE_FLAGS flags, struct d3d12_fence **fence) DECLSPEC_HIDDEN;
+ uint64_t initial_value, D3D12_FENCE_FLAGS flags, struct d3d12_fence **fence);
/* ID3D12Heap */
struct d3d12_heap
@@ -386,8 +386,8 @@ struct d3d12_heap
};
HRESULT d3d12_heap_create(struct d3d12_device *device, const D3D12_HEAP_DESC *desc,
- const struct d3d12_resource *resource, struct d3d12_heap **heap) DECLSPEC_HIDDEN;
-struct d3d12_heap *unsafe_impl_from_ID3D12Heap(ID3D12Heap *iface) DECLSPEC_HIDDEN;
+ const struct d3d12_resource *resource, struct d3d12_heap **heap);
+struct d3d12_heap *unsafe_impl_from_ID3D12Heap(ID3D12Heap *iface);
#define VKD3D_RESOURCE_PUBLIC_FLAGS \
(VKD3D_RESOURCE_INITIAL_STATE_TRANSITION | VKD3D_RESOURCE_PRESENT_STATE_TRANSITION)
@@ -435,29 +435,29 @@ static inline bool d3d12_resource_is_texture(const struct d3d12_resource *resour
return resource->desc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER;
}
-bool d3d12_resource_is_cpu_accessible(const struct d3d12_resource *resource) DECLSPEC_HIDDEN;
-HRESULT d3d12_resource_validate_desc(const D3D12_RESOURCE_DESC *desc, struct d3d12_device *device) DECLSPEC_HIDDEN;
+bool d3d12_resource_is_cpu_accessible(const struct d3d12_resource *resource);
+HRESULT d3d12_resource_validate_desc(const D3D12_RESOURCE_DESC *desc, struct d3d12_device *device);
HRESULT d3d12_committed_resource_create(struct d3d12_device *device,
const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags,
const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state,
- const D3D12_CLEAR_VALUE *optimized_clear_value, struct d3d12_resource **resource) DECLSPEC_HIDDEN;
+ const D3D12_CLEAR_VALUE *optimized_clear_value, struct d3d12_resource **resource);
HRESULT d3d12_placed_resource_create(struct d3d12_device *device, struct d3d12_heap *heap, uint64_t heap_offset,
const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state,
- const D3D12_CLEAR_VALUE *optimized_clear_value, struct d3d12_resource **resource) DECLSPEC_HIDDEN;
+ const D3D12_CLEAR_VALUE *optimized_clear_value, struct d3d12_resource **resource);
HRESULT d3d12_reserved_resource_create(struct d3d12_device *device,
const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state,
- const D3D12_CLEAR_VALUE *optimized_clear_value, struct d3d12_resource **resource) DECLSPEC_HIDDEN;
-struct d3d12_resource *unsafe_impl_from_ID3D12Resource(ID3D12Resource *iface) DECLSPEC_HIDDEN;
+ const D3D12_CLEAR_VALUE *optimized_clear_value, struct d3d12_resource **resource);
+struct d3d12_resource *unsafe_impl_from_ID3D12Resource(ID3D12Resource *iface);
HRESULT vkd3d_allocate_buffer_memory(struct d3d12_device *device, VkBuffer vk_buffer,
const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags,
- VkDeviceMemory *vk_memory, uint32_t *vk_memory_type, VkDeviceSize *vk_memory_size) DECLSPEC_HIDDEN;
+ VkDeviceMemory *vk_memory, uint32_t *vk_memory_type, VkDeviceSize *vk_memory_size);
HRESULT vkd3d_create_buffer(struct d3d12_device *device,
const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags,
- const D3D12_RESOURCE_DESC *desc, VkBuffer *vk_buffer) DECLSPEC_HIDDEN;
+ const D3D12_RESOURCE_DESC *desc, VkBuffer *vk_buffer);
HRESULT vkd3d_get_image_allocation_info(struct d3d12_device *device,
- const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_ALLOCATION_INFO *allocation_info) DECLSPEC_HIDDEN;
+ const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_ALLOCATION_INFO *allocation_info);
enum vkd3d_view_type
{
@@ -495,8 +495,8 @@ struct vkd3d_view
} info;
};
-void vkd3d_view_decref(struct vkd3d_view *view, struct d3d12_device *device) DECLSPEC_HIDDEN;
-void vkd3d_view_incref(struct vkd3d_view *view) DECLSPEC_HIDDEN;
+void vkd3d_view_decref(struct vkd3d_view *view, struct d3d12_device *device);
+void vkd3d_view_incref(struct vkd3d_view *view);
struct vkd3d_texture_view_desc
{
@@ -511,9 +511,9 @@ struct vkd3d_texture_view_desc
};
bool vkd3d_create_buffer_view(struct d3d12_device *device, VkBuffer vk_buffer, const struct vkd3d_format *format,
- VkDeviceSize offset, VkDeviceSize size, struct vkd3d_view **view) DECLSPEC_HIDDEN;
+ VkDeviceSize offset, VkDeviceSize size, struct vkd3d_view **view);
bool vkd3d_create_texture_view(struct d3d12_device *device, VkImage vk_image,
- const struct vkd3d_texture_view_desc *desc, struct vkd3d_view **view) DECLSPEC_HIDDEN;
+ const struct vkd3d_texture_view_desc *desc, struct vkd3d_view **view);
struct d3d12_desc
{
@@ -537,24 +537,24 @@ static inline struct d3d12_desc *d3d12_desc_from_gpu_handle(D3D12_GPU_DESCRIPTOR
}
void d3d12_desc_copy(struct d3d12_desc *dst, const struct d3d12_desc *src,
- struct d3d12_device *device) DECLSPEC_HIDDEN;
+ struct d3d12_device *device);
void d3d12_desc_create_cbv(struct d3d12_desc *descriptor,
- struct d3d12_device *device, const D3D12_CONSTANT_BUFFER_VIEW_DESC *desc) DECLSPEC_HIDDEN;
+ struct d3d12_device *device, const D3D12_CONSTANT_BUFFER_VIEW_DESC *desc);
void d3d12_desc_create_srv(struct d3d12_desc *descriptor,
struct d3d12_device *device, struct d3d12_resource *resource,
- const D3D12_SHADER_RESOURCE_VIEW_DESC *desc) DECLSPEC_HIDDEN;
+ const D3D12_SHADER_RESOURCE_VIEW_DESC *desc);
void d3d12_desc_create_uav(struct d3d12_desc *descriptor, struct d3d12_device *device,
struct d3d12_resource *resource, struct d3d12_resource *counter_resource,
- const D3D12_UNORDERED_ACCESS_VIEW_DESC *desc) DECLSPEC_HIDDEN;
+ const D3D12_UNORDERED_ACCESS_VIEW_DESC *desc);
void d3d12_desc_create_sampler(struct d3d12_desc *sampler,
- struct d3d12_device *device, const D3D12_SAMPLER_DESC *desc) DECLSPEC_HIDDEN;
+ struct d3d12_device *device, const D3D12_SAMPLER_DESC *desc);
void d3d12_desc_write_atomic(struct d3d12_desc *dst, const struct d3d12_desc *src,
- struct d3d12_device *device) DECLSPEC_HIDDEN;
+ struct d3d12_device *device);
bool vkd3d_create_raw_buffer_view(struct d3d12_device *device,
- D3D12_GPU_VIRTUAL_ADDRESS gpu_address, VkBufferView *vk_buffer_view) DECLSPEC_HIDDEN;
+ D3D12_GPU_VIRTUAL_ADDRESS gpu_address, VkBufferView *vk_buffer_view);
HRESULT vkd3d_create_static_sampler(struct d3d12_device *device,
- const D3D12_STATIC_SAMPLER_DESC *desc, VkSampler *vk_sampler) DECLSPEC_HIDDEN;
+ const D3D12_STATIC_SAMPLER_DESC *desc, VkSampler *vk_sampler);
struct d3d12_rtv_desc
{
@@ -574,7 +574,7 @@ static inline struct d3d12_rtv_desc *d3d12_rtv_desc_from_cpu_handle(D3D12_CPU_DE
}
void d3d12_rtv_desc_create_rtv(struct d3d12_rtv_desc *rtv_desc, struct d3d12_device *device,
- struct d3d12_resource *resource, const D3D12_RENDER_TARGET_VIEW_DESC *desc) DECLSPEC_HIDDEN;
+ struct d3d12_resource *resource, const D3D12_RENDER_TARGET_VIEW_DESC *desc);
struct d3d12_dsv_desc
{
@@ -594,7 +594,7 @@ static inline struct d3d12_dsv_desc *d3d12_dsv_desc_from_cpu_handle(D3D12_CPU_DE
}
void d3d12_dsv_desc_create_dsv(struct d3d12_dsv_desc *dsv_desc, struct d3d12_device *device,
- struct d3d12_resource *resource, const D3D12_DEPTH_STENCIL_VIEW_DESC *desc) DECLSPEC_HIDDEN;
+ struct d3d12_resource *resource, const D3D12_DEPTH_STENCIL_VIEW_DESC *desc);
/* ID3D12DescriptorHeap */
struct d3d12_descriptor_heap
@@ -612,7 +612,7 @@ struct d3d12_descriptor_heap
};
HRESULT d3d12_descriptor_heap_create(struct d3d12_device *device,
- const D3D12_DESCRIPTOR_HEAP_DESC *desc, struct d3d12_descriptor_heap **descriptor_heap) DECLSPEC_HIDDEN;
+ const D3D12_DESCRIPTOR_HEAP_DESC *desc, struct d3d12_descriptor_heap **descriptor_heap);
/* ID3D12QueryHeap */
struct d3d12_query_heap
@@ -630,8 +630,8 @@ struct d3d12_query_heap
};
HRESULT d3d12_query_heap_create(struct d3d12_device *device, const D3D12_QUERY_HEAP_DESC *desc,
- struct d3d12_query_heap **heap) DECLSPEC_HIDDEN;
-struct d3d12_query_heap *unsafe_impl_from_ID3D12QueryHeap(ID3D12QueryHeap *iface) DECLSPEC_HIDDEN;
+ struct d3d12_query_heap **heap);
+struct d3d12_query_heap *unsafe_impl_from_ID3D12QueryHeap(ID3D12QueryHeap *iface);
/* A Vulkan query has to be issued at least one time before the result is
* available. In D3D12 it is legal to get query reults for not issued queries.
@@ -731,11 +731,11 @@ struct d3d12_root_signature
};
HRESULT d3d12_root_signature_create(struct d3d12_device *device, const void *bytecode,
- size_t bytecode_length, struct d3d12_root_signature **root_signature) DECLSPEC_HIDDEN;
-struct d3d12_root_signature *unsafe_impl_from_ID3D12RootSignature(ID3D12RootSignature *iface) DECLSPEC_HIDDEN;
+ size_t bytecode_length, struct d3d12_root_signature **root_signature);
+struct d3d12_root_signature *unsafe_impl_from_ID3D12RootSignature(ID3D12RootSignature *iface);
int vkd3d_parse_root_signature_v_1_0(const struct vkd3d_shader_code *dxbc,
- struct vkd3d_shader_versioned_root_signature_desc *desc) DECLSPEC_HIDDEN;
+ struct vkd3d_shader_versioned_root_signature_desc *desc);
struct d3d12_graphics_pipeline_state
{
@@ -829,13 +829,13 @@ static inline bool d3d12_pipeline_state_has_unknown_dsv_format(struct d3d12_pipe
}
HRESULT d3d12_pipeline_state_create_compute(struct d3d12_device *device,
- const D3D12_COMPUTE_PIPELINE_STATE_DESC *desc, struct d3d12_pipeline_state **state) DECLSPEC_HIDDEN;
+ const D3D12_COMPUTE_PIPELINE_STATE_DESC *desc, struct d3d12_pipeline_state **state);
HRESULT d3d12_pipeline_state_create_graphics(struct d3d12_device *device,
- const D3D12_GRAPHICS_PIPELINE_STATE_DESC *desc, struct d3d12_pipeline_state **state) DECLSPEC_HIDDEN;
+ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *desc, struct d3d12_pipeline_state **state);
VkPipeline d3d12_pipeline_state_get_or_create_pipeline(struct d3d12_pipeline_state *state,
D3D12_PRIMITIVE_TOPOLOGY topology, const uint32_t *strides, VkFormat dsv_format,
- VkRenderPass *vk_render_pass) DECLSPEC_HIDDEN;
-struct d3d12_pipeline_state *unsafe_impl_from_ID3D12PipelineState(ID3D12PipelineState *iface) DECLSPEC_HIDDEN;
+ VkRenderPass *vk_render_pass);
+struct d3d12_pipeline_state *unsafe_impl_from_ID3D12PipelineState(ID3D12PipelineState *iface);
struct vkd3d_buffer
{
@@ -895,7 +895,7 @@ struct d3d12_command_allocator
};
HRESULT d3d12_command_allocator_create(struct d3d12_device *device,
- D3D12_COMMAND_LIST_TYPE type, struct d3d12_command_allocator **allocator) DECLSPEC_HIDDEN;
+ D3D12_COMMAND_LIST_TYPE type, struct d3d12_command_allocator **allocator);
struct vkd3d_push_descriptor
{
@@ -987,7 +987,7 @@ struct d3d12_command_list
HRESULT d3d12_command_list_create(struct d3d12_device *device,
UINT node_mask, D3D12_COMMAND_LIST_TYPE type, ID3D12CommandAllocator *allocator_iface,
- ID3D12PipelineState *initial_pipeline_state, struct d3d12_command_list **list) DECLSPEC_HIDDEN;
+ ID3D12PipelineState *initial_pipeline_state, struct d3d12_command_list **list);
struct vkd3d_queue
{
@@ -1014,12 +1014,12 @@ struct vkd3d_queue
VkSemaphore old_vk_semaphores[VKD3D_MAX_VK_SYNC_OBJECTS];
};
-VkQueue vkd3d_queue_acquire(struct vkd3d_queue *queue) DECLSPEC_HIDDEN;
+VkQueue vkd3d_queue_acquire(struct vkd3d_queue *queue);
HRESULT vkd3d_queue_create(struct d3d12_device *device,
uint32_t family_index, const VkQueueFamilyProperties *properties,
- struct vkd3d_queue **queue) DECLSPEC_HIDDEN;
-void vkd3d_queue_destroy(struct vkd3d_queue *queue, struct d3d12_device *device) DECLSPEC_HIDDEN;
-void vkd3d_queue_release(struct vkd3d_queue *queue) DECLSPEC_HIDDEN;
+ struct vkd3d_queue **queue);
+void vkd3d_queue_destroy(struct vkd3d_queue *queue, struct d3d12_device *device);
+void vkd3d_queue_release(struct vkd3d_queue *queue);
/* ID3D12CommandQueue */
struct d3d12_command_queue
@@ -1040,7 +1040,7 @@ struct d3d12_command_queue
};
HRESULT d3d12_command_queue_create(struct d3d12_device *device,
- const D3D12_COMMAND_QUEUE_DESC *desc, struct d3d12_command_queue **queue) DECLSPEC_HIDDEN;
+ const D3D12_COMMAND_QUEUE_DESC *desc, struct d3d12_command_queue **queue);
/* ID3D12CommandSignature */
struct d3d12_command_signature
@@ -1056,8 +1056,8 @@ struct d3d12_command_signature
};
HRESULT d3d12_command_signature_create(struct d3d12_device *device, const D3D12_COMMAND_SIGNATURE_DESC *desc,
- struct d3d12_command_signature **signature) DECLSPEC_HIDDEN;
-struct d3d12_command_signature *unsafe_impl_from_ID3D12CommandSignature(ID3D12CommandSignature *iface) DECLSPEC_HIDDEN;
+ struct d3d12_command_signature **signature);
+struct d3d12_command_signature *unsafe_impl_from_ID3D12CommandSignature(ID3D12CommandSignature *iface);
/* NULL resources */
struct vkd3d_null_resources
@@ -1076,9 +1076,9 @@ struct vkd3d_null_resources
};
HRESULT vkd3d_init_null_resources(struct vkd3d_null_resources *null_resources,
- struct d3d12_device *device) DECLSPEC_HIDDEN;
+ struct d3d12_device *device);
void vkd3d_destroy_null_resources(struct vkd3d_null_resources *null_resources,
- struct d3d12_device *device) DECLSPEC_HIDDEN;
+ struct d3d12_device *device);
struct vkd3d_format_compatibility_list
{
@@ -1116,8 +1116,8 @@ struct vkd3d_uav_clear_state
struct vkd3d_uav_clear_pipelines pipelines_uint;
};
-HRESULT vkd3d_uav_clear_state_init(struct vkd3d_uav_clear_state *state, struct d3d12_device *device) DECLSPEC_HIDDEN;
-void vkd3d_uav_clear_state_cleanup(struct vkd3d_uav_clear_state *state, struct d3d12_device *device) DECLSPEC_HIDDEN;
+HRESULT vkd3d_uav_clear_state_init(struct vkd3d_uav_clear_state *state, struct d3d12_device *device);
+void vkd3d_uav_clear_state_cleanup(struct vkd3d_uav_clear_state *state, struct d3d12_device *device);
/* ID3D12Device */
struct d3d12_device
@@ -1173,13 +1173,13 @@ struct d3d12_device
};
HRESULT d3d12_device_create(struct vkd3d_instance *instance,
- const struct vkd3d_device_create_info *create_info, struct d3d12_device **device) DECLSPEC_HIDDEN;
+ const struct vkd3d_device_create_info *create_info, struct d3d12_device **device);
struct vkd3d_queue *d3d12_device_get_vkd3d_queue(struct d3d12_device *device,
- D3D12_COMMAND_LIST_TYPE type) DECLSPEC_HIDDEN;
-bool d3d12_device_is_uma(struct d3d12_device *device, bool *coherent) DECLSPEC_HIDDEN;
+ D3D12_COMMAND_LIST_TYPE type);
+bool d3d12_device_is_uma(struct d3d12_device *device, bool *coherent);
void d3d12_device_mark_as_removed(struct d3d12_device *device, HRESULT reason,
- const char *message, ...) VKD3D_PRINTF_FUNC(3, 4) DECLSPEC_HIDDEN;
-struct d3d12_device *unsafe_impl_from_ID3D12Device(ID3D12Device *iface) DECLSPEC_HIDDEN;
+ const char *message, ...) VKD3D_PRINTF_FUNC(3, 4);
+struct d3d12_device *unsafe_impl_from_ID3D12Device(ID3D12Device *iface);
static inline HRESULT d3d12_device_query_interface(struct d3d12_device *device, REFIID iid, void **object)
{
@@ -1254,15 +1254,15 @@ static inline bool vkd3d_format_is_compressed(const struct vkd3d_format *format)
void vkd3d_format_copy_data(const struct vkd3d_format *format, const uint8_t *src,
unsigned int src_row_pitch, unsigned int src_slice_pitch, uint8_t *dst, unsigned int dst_row_pitch,
- unsigned int dst_slice_pitch, unsigned int w, unsigned int h, unsigned int d) DECLSPEC_HIDDEN;
+ unsigned int dst_slice_pitch, unsigned int w, unsigned int h, unsigned int d);
const struct vkd3d_format *vkd3d_get_format(const struct d3d12_device *device,
- DXGI_FORMAT dxgi_format, bool depth_stencil) DECLSPEC_HIDDEN;
+ DXGI_FORMAT dxgi_format, bool depth_stencil);
const struct vkd3d_format *vkd3d_find_uint_format(const struct d3d12_device *device,
- DXGI_FORMAT dxgi_format) DECLSPEC_HIDDEN;
+ DXGI_FORMAT dxgi_format);
-HRESULT vkd3d_init_format_info(struct d3d12_device *device) DECLSPEC_HIDDEN;
-void vkd3d_cleanup_format_info(struct d3d12_device *device) DECLSPEC_HIDDEN;
+HRESULT vkd3d_init_format_info(struct d3d12_device *device);
+void vkd3d_cleanup_format_info(struct d3d12_device *device);
static inline const struct vkd3d_format *vkd3d_format_from_d3d12_resource_desc(
const struct d3d12_device *device, const D3D12_RESOURCE_DESC *desc, DXGI_FORMAT view_format)
@@ -1310,24 +1310,24 @@ static inline unsigned int vkd3d_compute_workgroup_count(unsigned int thread_cou
return (thread_count + workgroup_size - 1) / workgroup_size;
}
-VkCompareOp vk_compare_op_from_d3d12(D3D12_COMPARISON_FUNC op) DECLSPEC_HIDDEN;
-VkSampleCountFlagBits vk_samples_from_dxgi_sample_desc(const DXGI_SAMPLE_DESC *desc) DECLSPEC_HIDDEN;
-VkSampleCountFlagBits vk_samples_from_sample_count(unsigned int sample_count) DECLSPEC_HIDDEN;
+VkCompareOp vk_compare_op_from_d3d12(D3D12_COMPARISON_FUNC op);
+VkSampleCountFlagBits vk_samples_from_dxgi_sample_desc(const DXGI_SAMPLE_DESC *desc);
+VkSampleCountFlagBits vk_samples_from_sample_count(unsigned int sample_count);
-bool is_valid_feature_level(D3D_FEATURE_LEVEL feature_level) DECLSPEC_HIDDEN;
+bool is_valid_feature_level(D3D_FEATURE_LEVEL feature_level);
-bool is_valid_resource_state(D3D12_RESOURCE_STATES state) DECLSPEC_HIDDEN;
-bool is_write_resource_state(D3D12_RESOURCE_STATES state) DECLSPEC_HIDDEN;
+bool is_valid_resource_state(D3D12_RESOURCE_STATES state);
+bool is_write_resource_state(D3D12_RESOURCE_STATES state);
HRESULT return_interface(void *iface, REFIID iface_iid,
- REFIID requested_iid, void **object) DECLSPEC_HIDDEN;
+ REFIID requested_iid, void **object);
-const char *debug_d3d12_box(const D3D12_BOX *box) DECLSPEC_HIDDEN;
-const char *debug_d3d12_shader_component_mapping(unsigned int mapping) DECLSPEC_HIDDEN;
-const char *debug_vk_extent_3d(VkExtent3D extent) DECLSPEC_HIDDEN;
-const char *debug_vk_memory_heap_flags(VkMemoryHeapFlags flags) DECLSPEC_HIDDEN;
-const char *debug_vk_memory_property_flags(VkMemoryPropertyFlags flags) DECLSPEC_HIDDEN;
-const char *debug_vk_queue_flags(VkQueueFlags flags) DECLSPEC_HIDDEN;
+const char *debug_d3d12_box(const D3D12_BOX *box);
+const char *debug_d3d12_shader_component_mapping(unsigned int mapping);
+const char *debug_vk_extent_3d(VkExtent3D extent);
+const char *debug_vk_memory_heap_flags(VkMemoryHeapFlags flags);
+const char *debug_vk_memory_property_flags(VkMemoryPropertyFlags flags);
+const char *debug_vk_queue_flags(VkQueueFlags flags);
static inline void debug_ignored_node_mask(unsigned int mask)
{
@@ -1336,15 +1336,15 @@ static inline void debug_ignored_node_mask(unsigned int mask)
}
HRESULT vkd3d_load_vk_global_procs(struct vkd3d_vk_global_procs *procs,
- PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr) DECLSPEC_HIDDEN;
+ PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr);
HRESULT vkd3d_load_vk_instance_procs(struct vkd3d_vk_instance_procs *procs,
- const struct vkd3d_vk_global_procs *global_procs, VkInstance instance) DECLSPEC_HIDDEN;
+ const struct vkd3d_vk_global_procs *global_procs, VkInstance instance);
HRESULT vkd3d_load_vk_device_procs(struct vkd3d_vk_device_procs *procs,
- const struct vkd3d_vk_instance_procs *parent_procs, VkDevice device) DECLSPEC_HIDDEN;
+ const struct vkd3d_vk_instance_procs *parent_procs, VkDevice device);
extern const char vkd3d_build[];
-bool vkd3d_get_program_name(char program_name[PATH_MAX]) DECLSPEC_HIDDEN;
+bool vkd3d_get_program_name(char program_name[PATH_MAX]);
static inline void vkd3d_set_thread_name(const char *name)
{
@@ -1356,9 +1356,9 @@ static inline void vkd3d_set_thread_name(const char *name)
}
VkResult vkd3d_set_vk_object_name_utf8(struct d3d12_device *device, uint64_t vk_object,
- VkDebugReportObjectTypeEXT vk_object_type, const char *name) DECLSPEC_HIDDEN;
+ VkDebugReportObjectTypeEXT vk_object_type, const char *name);
HRESULT vkd3d_set_vk_object_name(struct d3d12_device *device, uint64_t vk_object,
- VkDebugReportObjectTypeEXT vk_object_type, const WCHAR *name) DECLSPEC_HIDDEN;
+ VkDebugReportObjectTypeEXT vk_object_type, const WCHAR *name);
static inline void vk_prepend_struct(void *header, void *structure)
{
--
2.28.0
5
6
[PATCH v10 [rebased] 1/4] winevulkan: Support use of extensions which mustn't be exposed.
by Derek Lesho 12 Jul '21
by Derek Lesho 12 Jul '21
12 Jul '21
Signed-off-by: Derek Lesho <dlesho(a)codeweavers.com>
---
dlls/winevulkan/make_vulkan | 35 ++++++++++++++++++++++++-----------
1 file changed, 24 insertions(+), 11 deletions(-)
diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan
index e8534cbd5f5..c46ef02dcb9 100755
--- a/dlls/winevulkan/make_vulkan
+++ b/dlls/winevulkan/make_vulkan
@@ -124,6 +124,11 @@ UNSUPPORTED_EXTENSIONS = [
"VK_NV_external_memory_win32",
]
+# Either internal extensions which aren't present on the win32 platform which
+# winevulkan may nonetheless use, or extensions we want to generate headers for
+# but not expose to applications (useful for test commits)
+UNEXPOSED_EXTENSIONS = {}
+
# The Vulkan loader provides entry-points for core functionality and important
# extensions. Based on vulkan-1.def this amounts to WSI extensions on 1.0.51.
CORE_EXTENSIONS = [
@@ -513,8 +518,8 @@ class VkEnumValue(object):
class VkFunction(object):
- def __init__(self, _type=None, name=None, params=[], extensions=[], alias=None):
- self.extensions = []
+ def __init__(self, _type=None, name=None, params=[], alias=None):
+ self.extensions = set()
self.name = name
self.type = _type
self.params = params
@@ -657,6 +662,10 @@ class VkFunction(object):
def needs_private_thunk(self):
return self.thunk_type == ThunkType.PRIVATE
+ def needs_exposing(self):
+ # The function needs exposed if at-least one extension isn't both UNSUPPORTED and UNEXPOSED
+ return self.is_required() and (not self.extensions or not self.extensions.issubset(UNEXPOSED_EXTENSIONS))
+
def pfn(self, prefix="p", call_conv=None, conv=False):
""" Create function pointer. """
@@ -2682,7 +2691,7 @@ class VkGenerator(object):
# Create thunks for instance and device functions.
# Global functions don't go through the thunks.
for vk_func in self.registry.funcs.values():
- if not vk_func.is_required():
+ if not vk_func.needs_exposing():
continue
if vk_func.is_global_func():
@@ -2702,6 +2711,8 @@ class VkGenerator(object):
for ext in self.registry.extensions:
if ext["type"] != "device":
continue
+ if ext["name"] in UNEXPOSED_EXTENSIONS:
+ continue
f.write(" \"{0}\",\n".format(ext["name"]))
f.write("};\n\n")
@@ -2711,6 +2722,8 @@ class VkGenerator(object):
for ext in self.registry.extensions:
if ext["type"] != "instance":
continue
+ if ext["name"] in UNEXPOSED_EXTENSIONS:
+ continue
f.write(" \"{0}\",\n".format(ext["name"]))
f.write("};\n\n")
@@ -2770,7 +2783,7 @@ class VkGenerator(object):
f.write("const struct unix_funcs loader_funcs =\n")
f.write("{\n")
for vk_func in self.registry.funcs.values():
- if not vk_func.is_required():
+ if not vk_func.needs_exposing():
continue
if vk_func.loader_thunk_type == ThunkType.NONE:
continue
@@ -2789,7 +2802,7 @@ class VkGenerator(object):
# Generate prototypes for device and instance functions requiring a custom implementation.
f.write("/* Functions for which we have custom implementations outside of the thunks. */\n")
for vk_func in self.registry.funcs.values():
- if not vk_func.is_required():
+ if not vk_func.needs_exposing():
continue
if vk_func.needs_thunk() and not vk_func.needs_private_thunk():
continue
@@ -2888,7 +2901,7 @@ class VkGenerator(object):
f.write("WINE_DEFAULT_DEBUG_CHANNEL(vulkan);\n\n")
for vk_func in self.registry.funcs.values():
- if not vk_func.is_required():
+ if not vk_func.needs_exposing():
continue
if vk_func.loader_thunk_type != ThunkType.PUBLIC:
continue
@@ -2897,7 +2910,7 @@ class VkGenerator(object):
f.write("static const struct vulkan_func vk_device_dispatch_table[] =\n{\n")
for vk_func in self.registry.device_funcs:
- if not vk_func.is_required():
+ if not vk_func.needs_exposing():
continue
f.write(" {{\"{0}\", &{0}}},\n".format(vk_func.name))
@@ -2905,7 +2918,7 @@ class VkGenerator(object):
f.write("static const struct vulkan_func vk_phys_dev_dispatch_table[] =\n{\n")
for vk_func in self.registry.phys_dev_funcs:
- if not vk_func.is_required():
+ if not vk_func.needs_exposing():
continue
f.write(" {{\"{0}\", &{0}}},\n".format(vk_func.name))
@@ -2913,7 +2926,7 @@ class VkGenerator(object):
f.write("static const struct vulkan_func vk_instance_dispatch_table[] =\n{\n")
for vk_func in self.registry.instance_funcs:
- if not vk_func.is_required():
+ if not vk_func.needs_exposing():
continue
f.write(" {{\"{0}\", &{0}}},\n".format(vk_func.name))
@@ -2970,7 +2983,7 @@ class VkGenerator(object):
f.write("struct unix_funcs\n")
f.write("{\n")
for vk_func in self.registry.funcs.values():
- if not vk_func.is_required():
+ if not vk_func.needs_exposing():
continue
if vk_func.loader_thunk_type == ThunkType.NONE:
continue
@@ -3464,7 +3477,7 @@ class VkRegistry(object):
# the XML file to handle this, but because of the manner in which we parse the XML
# file we pre-populate from <commands> before we check if a command is enabled.
if cmd_name in self.funcs:
- self.funcs[cmd_name].extensions.append(ext_name)
+ self.funcs[cmd_name].extensions.add(ext_name)
# Some extensions are not ready or have numbers reserved as a place holder.
if ext.attrib["supported"] == "disabled":
--
2.32.0
5
20
[PATCH v3 1/4] include: Add d2d1effects.idl with defines for D2D12DAffineTransform.
by Ziqing Hui 12 Jul '21
by Ziqing Hui 12 Jul '21
12 Jul '21
Signed-off-by: Ziqing Hui <zhui(a)codeweavers.com>
---
v3: Remove a comment.
Use TAB in Makefile.in.
Use hex value for enum.
include/Makefile.in | 1 +
include/d2d1_1.idl | 1 +
include/d2d1effects.idl | 46 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 48 insertions(+)
create mode 100755 include/d2d1effects.idl
diff --git a/include/Makefile.in b/include/Makefile.in
index 61a74a210c9..46cb0f53a5e 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -99,6 +99,7 @@ SOURCES = \
d2d1.idl \
d2d1_1.idl \
d2d1_2.idl \
+ d2d1effects.idl \
d2dbasetypes.h \
d2derr.h \
d3d.h \
diff --git a/include/d2d1_1.idl b/include/d2d1_1.idl
index 257a970968f..fdec8ae5f9c 100644
--- a/include/d2d1_1.idl
+++ b/include/d2d1_1.idl
@@ -17,6 +17,7 @@
*/
import "d2d1.idl";
+import "d2d1effects.idl";
interface ID2D1DeviceContext;
interface ID2D1PathGeometry1;
diff --git a/include/d2d1effects.idl b/include/d2d1effects.idl
new file mode 100755
index 00000000000..ee1dbe94728
--- /dev/null
+++ b/include/d2d1effects.idl
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2021 Ziqing Hui for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+cpp_quote("DEFINE_GUID(CLSID_D2D12DAffineTransform, 0x6aa97485,0x6354,0x4cfc,0x90,0x8c,0xe4,0xa7,0x4f,0x62,0xc9,0x6c);")
+
+typedef enum D2D1_BORDER_MODE
+{
+ D2D1_BORDER_MODE_SOFT = 0x0,
+ D2D1_BORDER_MODE_HARD = 0x1,
+ D2D1_BORDER_MODE_FORCE_DWORD = 0xffffffff
+} D2D1_BORDER_MODE;
+
+typedef enum D2D1_2DAFFINETRANSFORM_PROP
+{
+ D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE = 0x0,
+ D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE = 0x1,
+ D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX = 0x2,
+ D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS = 0x3,
+ D2D1_2DAFFINETRANSFORM_PROP_FORCE_DWORD = 0xffffffff
+} D2D1_2DAFFINETRANSFORM_PROP;
+
+typedef enum D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE
+{
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR = 0x0,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR = 0x1,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_CUBIC = 0x2,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR = 0x3,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC = 0x4,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC = 0x5,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff
+} D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE;
--
2.25.1
2
4
[PATCH v2 1/6] wined3d: Set the entire stream output state as a single CS operation.
by Zebediah Figura 12 Jul '21
by Zebediah Figura 12 Jul '21
12 Jul '21
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
---
dlls/d3d11/device.c | 29 +++++++++-----------
dlls/wined3d/cs.c | 49 ++++++++++++++++------------------
dlls/wined3d/device.c | 40 +++++++++++----------------
dlls/wined3d/wined3d.spec | 2 +-
dlls/wined3d/wined3d_private.h | 10 ++-----
include/wine/wined3d.h | 10 +++++--
6 files changed, 63 insertions(+), 77 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 93df97e59ae..46e2c8ba67f 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -1181,24 +1181,23 @@ static void STDMETHODCALLTYPE d3d11_device_context_OMSetDepthStencilState(ID3D11
static void STDMETHODCALLTYPE d3d11_device_context_SOSetTargets(ID3D11DeviceContext1 *iface, UINT buffer_count,
ID3D11Buffer *const *buffers, const UINT *offsets)
{
+ struct wined3d_stream_output outputs[WINED3D_MAX_STREAM_OUTPUT_BUFFERS] = {0};
struct d3d11_device_context *context = impl_from_ID3D11DeviceContext1(iface);
unsigned int count, i;
TRACE("iface %p, buffer_count %u, buffers %p, offsets %p.\n", iface, buffer_count, buffers, offsets);
- count = min(buffer_count, D3D11_SO_BUFFER_SLOT_COUNT);
- wined3d_mutex_lock();
+ count = min(buffer_count, ARRAY_SIZE(outputs));
for (i = 0; i < count; ++i)
{
struct d3d_buffer *buffer = unsafe_impl_from_ID3D11Buffer(buffers[i]);
- wined3d_device_context_set_stream_output(context->wined3d_context, i,
- buffer ? buffer->wined3d_buffer : NULL, offsets ? offsets[i] : 0);
- }
- for (; i < D3D11_SO_BUFFER_SLOT_COUNT; ++i)
- {
- wined3d_device_context_set_stream_output(context->wined3d_context, i, NULL, 0);
+ outputs[i].buffer = buffer ? buffer->wined3d_buffer : NULL;
+ outputs[i].offset = offsets ? offsets[i] : 0;
}
+
+ wined3d_mutex_lock();
+ wined3d_device_context_set_stream_outputs(context->wined3d_context, outputs);
wined3d_mutex_unlock();
}
@@ -4909,25 +4908,23 @@ static void STDMETHODCALLTYPE d3d10_device_OMSetDepthStencilState(ID3D10Device1
static void STDMETHODCALLTYPE d3d10_device_SOSetTargets(ID3D10Device1 *iface,
UINT target_count, ID3D10Buffer *const *targets, const UINT *offsets)
{
+ struct wined3d_stream_output outputs[WINED3D_MAX_STREAM_OUTPUT_BUFFERS] = {0};
struct d3d_device *device = impl_from_ID3D10Device(iface);
unsigned int count, i;
TRACE("iface %p, target_count %u, targets %p, offsets %p.\n", iface, target_count, targets, offsets);
- count = min(target_count, D3D10_SO_BUFFER_SLOT_COUNT);
- wined3d_mutex_lock();
+ count = min(target_count, ARRAY_SIZE(outputs));
for (i = 0; i < count; ++i)
{
struct d3d_buffer *buffer = unsafe_impl_from_ID3D10Buffer(targets[i]);
- wined3d_device_context_set_stream_output(device->immediate_context.wined3d_context, i,
- buffer ? buffer->wined3d_buffer : NULL, offsets[i]);
+ outputs[i].buffer = buffer ? buffer->wined3d_buffer : NULL;
+ outputs[i].offset = offsets ? offsets[i] : 0;
}
- for (i = count; i < D3D10_SO_BUFFER_SLOT_COUNT; ++i)
- {
- wined3d_device_context_set_stream_output(device->immediate_context.wined3d_context, i, NULL, 0);
- }
+ wined3d_mutex_lock();
+ wined3d_device_context_set_stream_outputs(device->immediate_context.wined3d_context, outputs);
wined3d_mutex_unlock();
}
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index f7e5009df46..49b4f529554 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -118,7 +118,7 @@ enum wined3d_cs_op
WINED3D_CS_OP_SET_VERTEX_DECLARATION,
WINED3D_CS_OP_SET_STREAM_SOURCE,
WINED3D_CS_OP_SET_STREAM_SOURCE_FREQ,
- WINED3D_CS_OP_SET_STREAM_OUTPUT,
+ WINED3D_CS_OP_SET_STREAM_OUTPUTS,
WINED3D_CS_OP_SET_INDEX_BUFFER,
WINED3D_CS_OP_SET_CONSTANT_BUFFERS,
WINED3D_CS_OP_SET_TEXTURE,
@@ -269,12 +269,10 @@ struct wined3d_cs_set_stream_source_freq
UINT flags;
};
-struct wined3d_cs_set_stream_output
+struct wined3d_cs_set_stream_outputs
{
enum wined3d_cs_op opcode;
- UINT stream_idx;
- struct wined3d_buffer *buffer;
- UINT offset;
+ struct wined3d_stream_output outputs[WINED3D_MAX_STREAM_OUTPUT_BUFFERS];
};
struct wined3d_cs_set_index_buffer
@@ -603,7 +601,7 @@ static const char *debug_cs_op(enum wined3d_cs_op op)
WINED3D_TO_STR(WINED3D_CS_OP_SET_VERTEX_DECLARATION);
WINED3D_TO_STR(WINED3D_CS_OP_SET_STREAM_SOURCE);
WINED3D_TO_STR(WINED3D_CS_OP_SET_STREAM_SOURCE_FREQ);
- WINED3D_TO_STR(WINED3D_CS_OP_SET_STREAM_OUTPUT);
+ WINED3D_TO_STR(WINED3D_CS_OP_SET_STREAM_OUTPUTS);
WINED3D_TO_STR(WINED3D_CS_OP_SET_INDEX_BUFFER);
WINED3D_TO_STR(WINED3D_CS_OP_SET_CONSTANT_BUFFERS);
WINED3D_TO_STR(WINED3D_CS_OP_SET_TEXTURE);
@@ -1471,35 +1469,34 @@ void wined3d_cs_emit_set_stream_source_freq(struct wined3d_cs *cs, UINT stream_i
wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT);
}
-static void wined3d_cs_exec_set_stream_output(struct wined3d_cs *cs, const void *data)
+static void wined3d_cs_exec_set_stream_outputs(struct wined3d_cs *cs, const void *data)
{
- const struct wined3d_cs_set_stream_output *op = data;
- struct wined3d_stream_output *stream;
- struct wined3d_buffer *prev;
+ const struct wined3d_cs_set_stream_outputs *op = data;
+ unsigned int i;
- stream = &cs->state.stream_output[op->stream_idx];
- prev = stream->buffer;
- stream->buffer = op->buffer;
- stream->offset = op->offset;
+ for (i = 0; i < WINED3D_MAX_STREAM_OUTPUT_BUFFERS; ++i)
+ {
+ struct wined3d_buffer *prev = cs->state.stream_output[i].buffer;
+ struct wined3d_buffer *buffer = op->outputs[i].buffer;
- if (op->buffer)
- InterlockedIncrement(&op->buffer->resource.bind_count);
- if (prev)
- InterlockedDecrement(&prev->resource.bind_count);
+ if (buffer)
+ InterlockedIncrement(&buffer->resource.bind_count);
+ if (prev)
+ InterlockedDecrement(&prev->resource.bind_count);
+ }
+ memcpy(cs->state.stream_output, op->outputs, sizeof(op->outputs));
device_invalidate_state(cs->c.device, STATE_STREAM_OUTPUT);
}
-void wined3d_device_context_emit_set_stream_output(struct wined3d_device_context *context, unsigned int stream_idx,
- struct wined3d_buffer *buffer, unsigned int offset)
+void wined3d_device_context_emit_set_stream_outputs(struct wined3d_device_context *context,
+ const struct wined3d_stream_output outputs[WINED3D_MAX_STREAM_OUTPUT_BUFFERS])
{
- struct wined3d_cs_set_stream_output *op;
+ struct wined3d_cs_set_stream_outputs *op;
op = wined3d_device_context_require_space(context, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT);
- op->opcode = WINED3D_CS_OP_SET_STREAM_OUTPUT;
- op->stream_idx = stream_idx;
- op->buffer = buffer;
- op->offset = offset;
+ op->opcode = WINED3D_CS_OP_SET_STREAM_OUTPUTS;
+ memcpy(op->outputs, outputs, sizeof(op->outputs));
wined3d_device_context_submit(context, WINED3D_CS_QUEUE_DEFAULT);
}
@@ -2928,7 +2925,7 @@ static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void
/* WINED3D_CS_OP_SET_VERTEX_DECLARATION */ wined3d_cs_exec_set_vertex_declaration,
/* WINED3D_CS_OP_SET_STREAM_SOURCE */ wined3d_cs_exec_set_stream_source,
/* WINED3D_CS_OP_SET_STREAM_SOURCE_FREQ */ wined3d_cs_exec_set_stream_source_freq,
- /* WINED3D_CS_OP_SET_STREAM_OUTPUT */ wined3d_cs_exec_set_stream_output,
+ /* WINED3D_CS_OP_SET_STREAM_OUTPUTS */ wined3d_cs_exec_set_stream_outputs,
/* WINED3D_CS_OP_SET_INDEX_BUFFER */ wined3d_cs_exec_set_index_buffer,
/* WINED3D_CS_OP_SET_CONSTANT_BUFFERS */ wined3d_cs_exec_set_constant_buffers,
/* WINED3D_CS_OP_SET_TEXTURE */ wined3d_cs_exec_set_texture,
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index bb37f6aff51..7a78a271aa1 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -1676,11 +1676,7 @@ void CDECL wined3d_device_context_set_state(struct wined3d_device_context *conte
wined3d_device_context_emit_set_depth_stencil_view(context, state->fb.depth_stencil);
wined3d_device_context_emit_set_vertex_declaration(context, state->vertex_declaration);
- for (i = 0; i < WINED3D_MAX_STREAM_OUTPUT_BUFFERS; ++i)
- {
- wined3d_device_context_emit_set_stream_output(context, i,
- state->stream_output[i].buffer, state->stream_output[i].offset);
- }
+ wined3d_device_context_emit_set_stream_outputs(context, state->stream_output);
for (i = 0; i < WINED3D_MAX_STREAMS; ++i)
{
@@ -2334,30 +2330,26 @@ void CDECL wined3d_device_context_set_vertex_declaration(struct wined3d_device_c
wined3d_vertex_declaration_decref(prev);
}
-void CDECL wined3d_device_context_set_stream_output(struct wined3d_device_context *context, unsigned int idx,
- struct wined3d_buffer *buffer, unsigned int offset)
+void CDECL wined3d_device_context_set_stream_outputs(struct wined3d_device_context *context,
+ const struct wined3d_stream_output outputs[WINED3D_MAX_STREAM_OUTPUT_BUFFERS])
{
- struct wined3d_stream_output *stream;
- struct wined3d_buffer *prev_buffer;
+ struct wined3d_state *state = context->state;
+ unsigned int i;
- TRACE("context %p, idx %u, buffer %p, offset %u.\n", context, idx, buffer, offset);
+ TRACE("context %p, outputs %p.\n", context, outputs);
- if (idx >= WINED3D_MAX_STREAM_OUTPUT_BUFFERS)
+ wined3d_device_context_emit_set_stream_outputs(context, outputs);
+ for (i = 0; i < WINED3D_MAX_STREAM_OUTPUT_BUFFERS; ++i)
{
- WARN("Invalid stream output %u.\n", idx);
- return;
+ struct wined3d_buffer *prev_buffer = state->stream_output[i].buffer;
+ struct wined3d_buffer *buffer = outputs[i].buffer;
+
+ if (buffer)
+ wined3d_buffer_incref(buffer);
+ state->stream_output[i] = outputs[i];
+ if (prev_buffer)
+ wined3d_buffer_decref(prev_buffer);
}
-
- stream = &context->state->stream_output[idx];
- prev_buffer = stream->buffer;
-
- if (buffer)
- wined3d_buffer_incref(buffer);
- stream->buffer = buffer;
- stream->offset = offset;
- wined3d_device_context_emit_set_stream_output(context, idx, buffer, offset);
- if (prev_buffer)
- wined3d_buffer_decref(prev_buffer);
}
void CDECL wined3d_device_context_draw(struct wined3d_device_context *context, unsigned int start_vertex,
diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec
index 13c8b218b65..ccd941af7a7 100644
--- a/dlls/wined3d/wined3d.spec
+++ b/dlls/wined3d/wined3d.spec
@@ -136,7 +136,7 @@
@ cdecl wined3d_device_context_set_shader(ptr long ptr)
@ cdecl wined3d_device_context_set_shader_resource_views(ptr long long long ptr)
@ cdecl wined3d_device_context_set_state(ptr ptr)
-@ cdecl wined3d_device_context_set_stream_output(ptr long ptr long)
+@ cdecl wined3d_device_context_set_stream_outputs(ptr ptr)
@ cdecl wined3d_device_context_set_stream_source(ptr long ptr long long)
@ cdecl wined3d_device_context_set_unordered_access_views(ptr long long long ptr ptr)
@ cdecl wined3d_device_context_set_vertex_declaration(ptr ptr)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 36fdf56a73c..2708d5c7f32 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -3660,12 +3660,6 @@ struct wined3d_rasterizer_state
struct wine_rb_entry entry;
};
-struct wined3d_stream_output
-{
- struct wined3d_buffer *buffer;
- UINT offset;
-};
-
#define LIGHTMAP_SIZE 43
#define LIGHTMAP_HASHFUNC(x) ((x) % LIGHTMAP_SIZE)
@@ -4846,8 +4840,8 @@ void wined3d_device_context_emit_set_shader(struct wined3d_device_context *conte
void wined3d_device_context_emit_set_shader_resource_views(struct wined3d_device_context *context,
enum wined3d_shader_type type, unsigned int start_idx, unsigned int count,
struct wined3d_shader_resource_view *const *views) DECLSPEC_HIDDEN;
-void wined3d_device_context_emit_set_stream_output(struct wined3d_device_context *context, unsigned int stream_idx,
- struct wined3d_buffer *buffer, unsigned int offset) DECLSPEC_HIDDEN;
+void wined3d_device_context_emit_set_stream_outputs(struct wined3d_device_context *context,
+ const struct wined3d_stream_output outputs[WINED3D_MAX_STREAM_OUTPUT_BUFFERS]) DECLSPEC_HIDDEN;
void wined3d_device_context_emit_set_stream_source(struct wined3d_device_context *context, unsigned int stream_idx,
struct wined3d_buffer *buffer, unsigned int offset, unsigned int stride) DECLSPEC_HIDDEN;
void wined3d_device_context_emit_set_texture(struct wined3d_device_context *context, unsigned int stage,
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index 21b9e01efd0..1369fffddf3 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -2212,6 +2212,12 @@ struct wined3d_stateblock_state
struct wined3d_light_state *light_state;
};
+struct wined3d_stream_output
+{
+ struct wined3d_buffer *buffer;
+ unsigned int offset;
+};
+
struct wined3d_parent_ops
{
void (__stdcall *wined3d_object_destroyed)(void *parent);
@@ -2523,8 +2529,8 @@ void __cdecl wined3d_device_context_set_shader_resource_views(struct wined3d_dev
enum wined3d_shader_type type, unsigned int start_idx, unsigned int count,
struct wined3d_shader_resource_view *const *views);
void __cdecl wined3d_device_context_set_state(struct wined3d_device_context *context, struct wined3d_state *state);
-void __cdecl wined3d_device_context_set_stream_output(struct wined3d_device_context *context, unsigned int idx,
- struct wined3d_buffer *buffer, unsigned int offset);
+void __cdecl wined3d_device_context_set_stream_outputs(struct wined3d_device_context *context,
+ const struct wined3d_stream_output outputs[WINED3D_MAX_STREAM_OUTPUT_BUFFERS]);
HRESULT __cdecl wined3d_device_context_set_stream_source(struct wined3d_device_context *context,
unsigned int stream_idx, struct wined3d_buffer *buffer, unsigned int offset, unsigned int stride);
void __cdecl wined3d_device_context_set_unordered_access_views(struct wined3d_device_context *context,
--
2.30.2
3
10
[PATCH 1/2] mf/session: Forward MR_POLICY_VOLUME_SERVICE service requests to the SAR node.
by Nikolay Sivov 12 Jul '21
by Nikolay Sivov 12 Jul '21
12 Jul '21
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/mf/mf_private.h | 1 +
dlls/mf/sar.c | 5 +++++
dlls/mf/session.c | 51 +++++++++++++++++++++++++++++++++++++-------
3 files changed, 49 insertions(+), 8 deletions(-)
diff --git a/dlls/mf/mf_private.h b/dlls/mf/mf_private.h
index 2f81eaa13b0..db6f101cd6d 100644
--- a/dlls/mf/mf_private.h
+++ b/dlls/mf/mf_private.h
@@ -80,4 +80,5 @@ static inline const char *debugstr_time(LONGLONG time)
}
extern BOOL mf_is_sample_copier_transform(IMFTransform *transform) DECLSPEC_HIDDEN;
+extern BOOL mf_is_sar_sink(IMFMediaSink *sink) DECLSPEC_HIDDEN;
extern HRESULT topology_node_get_object(IMFTopologyNode *node, REFIID riid, void **obj) DECLSPEC_HIDDEN;
diff --git a/dlls/mf/sar.c b/dlls/mf/sar.c
index e35531acb71..f6f2b32dd2d 100644
--- a/dlls/mf/sar.c
+++ b/dlls/mf/sar.c
@@ -1915,6 +1915,11 @@ failed:
return hr;
}
+BOOL mf_is_sar_sink(IMFMediaSink *sink)
+{
+ return sink->lpVtbl == &audio_renderer_sink_vtbl;
+}
+
static void sar_shutdown_object(void *user_context, IUnknown *obj)
{
IMFMediaSink *sink;
diff --git a/dlls/mf/session.c b/dlls/mf/session.c
index 9e8429fa8ac..df7a987bc55 100644
--- a/dlls/mf/session.c
+++ b/dlls/mf/session.c
@@ -1952,18 +1952,36 @@ static ULONG WINAPI session_get_service_Release(IMFGetService *iface)
return IMFMediaSession_Release(&session->IMFMediaSession_iface);
}
-static HRESULT session_get_video_render_service(struct media_session *session, REFGUID service,
- REFIID riid, void **obj)
+typedef BOOL (*p_renderer_node_test_func)(IMFMediaSink *sink);
+
+static BOOL session_video_renderer_test_func(IMFMediaSink *sink)
+{
+ IUnknown *obj;
+ HRESULT hr;
+
+ /* Use first sink to support IMFVideoRenderer. */
+ hr = IMFMediaSink_QueryInterface(sink, &IID_IMFVideoRenderer, (void **)&obj);
+ if (obj)
+ IUnknown_Release(obj);
+
+ return hr == S_OK;
+}
+
+static BOOL session_audio_renderer_test_func(IMFMediaSink *sink)
+{
+ return mf_is_sar_sink(sink);
+}
+
+static HRESULT session_get_renderer_node_service(struct media_session *session,
+ p_renderer_node_test_func node_test_func, REFGUID service, REFIID riid, void **obj)
{
IMFStreamSink *stream_sink;
IMFTopologyNode *node;
IMFCollection *nodes;
IMFMediaSink *sink;
unsigned int i = 0;
- IUnknown *vr;
HRESULT hr = E_FAIL;
- /* Use first sink to support IMFVideoRenderer. */
if (session->presentation.current_topology)
{
if (SUCCEEDED(IMFTopology_GetOutputNodeCollection(session->presentation.current_topology,
@@ -1975,11 +1993,10 @@ static HRESULT session_get_video_render_service(struct media_session *session, R
{
if (SUCCEEDED(IMFStreamSink_GetMediaSink(stream_sink, &sink)))
{
- if (SUCCEEDED(IMFMediaSink_QueryInterface(sink, &IID_IMFVideoRenderer, (void **)&vr)))
+ if (node_test_func(sink))
{
- if (FAILED(hr = MFGetService(vr, service, riid, obj)))
- WARN("Failed to get service from video renderer %#x.\n", hr);
- IUnknown_Release(vr);
+ if (FAILED(hr = MFGetService((IUnknown *)sink, service, riid, obj)))
+ WARN("Failed to get service from renderer node, %#x.\n", hr);
}
}
IMFStreamSink_Release(stream_sink);
@@ -1998,6 +2015,20 @@ static HRESULT session_get_video_render_service(struct media_session *session, R
return hr;
}
+static HRESULT session_get_audio_render_service(struct media_session *session, REFGUID service,
+ REFIID riid, void **obj)
+{
+ return session_get_renderer_node_service(session, session_audio_renderer_test_func,
+ service, riid, obj);
+}
+
+static HRESULT session_get_video_render_service(struct media_session *session, REFGUID service,
+ REFIID riid, void **obj)
+{
+ return session_get_renderer_node_service(session, session_video_renderer_test_func,
+ service, riid, obj);
+}
+
static HRESULT WINAPI session_get_service_GetService(IMFGetService *iface, REFGUID service, REFIID riid, void **obj)
{
struct media_session *session = impl_from_IMFGetService(iface);
@@ -2040,6 +2071,10 @@ static HRESULT WINAPI session_get_service_GetService(IMFGetService *iface, REFGU
{
hr = session_get_video_render_service(session, service, riid, obj);
}
+ else if (IsEqualGUID(service, &MR_POLICY_VOLUME_SERVICE))
+ {
+ hr = session_get_audio_render_service(session, service, riid, obj);
+ }
else
FIXME("Unsupported service %s.\n", debugstr_guid(service));
--
2.30.2
1
1