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
February 2022
- 87 participants
- 926 discussions
07 Feb '22
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=44202
Signed-off-by: Piotr Caban <piotr(a)codeweavers.com>
---
dlls/msvcrt/undname.c | 6 ++++++
dlls/ucrtbase/tests/cpp.c | 21 ++++++++++++++++++++-
2 files changed, 26 insertions(+), 1 deletion(-)
1
0
[PATCH 1/4] dlls/msvcrt, msvcp90, concrt140: use correct integral type for interlock
by Eric Pouech 07 Feb '22
by Eric Pouech 07 Feb '22
07 Feb '22
Signed-off-by: Eric Pouech <eric.pouech(a)gmail.com>
---
dlls/concrt140/details.c | 2 +-
dlls/msvcp90/details.c | 2 +-
dlls/msvcrt/concurrency.c | 4 ++--
dlls/msvcrt/file.c | 8 ++++----
dlls/msvcrt/heap.c | 2 +-
5 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/dlls/concrt140/details.c b/dlls/concrt140/details.c
index 59345c52871..72bb744744c 100644
--- a/dlls/concrt140/details.c
+++ b/dlls/concrt140/details.c
@@ -371,7 +371,7 @@ void __thiscall _Concurrent_queue_base_v4_dummy(_Concurrent_queue_base_v4 *this)
DEFINE_RTTI_DATA0(_Concurrent_queue_base_v4, 0, ".?AV_Concurrent_queue_base_v4(a)details@Concurrency@@")
-static int _Runtime_object_id;
+static LONG _Runtime_object_id;
typedef struct
{
diff --git a/dlls/msvcp90/details.c b/dlls/msvcp90/details.c
index 6b54ea9597f..d63a47667f9 100644
--- a/dlls/msvcp90/details.c
+++ b/dlls/msvcp90/details.c
@@ -385,7 +385,7 @@ void __thiscall _Concurrent_queue_base_v4_dummy(_Concurrent_queue_base_v4 *this)
DEFINE_RTTI_DATA0(_Concurrent_queue_base_v4, 0, ".?AV_Concurrent_queue_base_v4(a)details@Concurrency@@")
-static int _Runtime_object_id;
+static LONG _Runtime_object_id;
typedef struct
{
diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c
index 0a393cd0004..6afe6e81489 100644
--- a/dlls/msvcrt/concurrency.c
+++ b/dlls/msvcrt/concurrency.c
@@ -34,8 +34,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(msvcrt);
typedef exception cexception;
CREATE_EXCEPTION_OBJECT(cexception)
-static int context_id = -1;
-static int scheduler_id = -1;
+static LONG context_id = -1;
+static LONG scheduler_id = -1;
typedef enum {
SchedulerKind,
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 2b0395d7535..2666492956c 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -144,8 +144,8 @@ static int MSVCRT_max_streams = 512, MSVCRT_stream_idx;
static int MSVCRT_umask = 0;
/* INTERNAL: static data for tmpnam and _wtmpname functions */
-static int tmpnam_unique;
-static int tmpnam_s_unique;
+static LONG tmpnam_unique;
+static LONG tmpnam_s_unique;
static const unsigned int EXE = 'e' << 16 | 'x' << 8 | 'e';
static const unsigned int BAT = 'b' << 16 | 'a' << 8 | 't';
@@ -4935,7 +4935,7 @@ void CDECL setbuf(FILE* file, char *buf)
setvbuf(file, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
}
-static int tmpnam_helper(char *s, size_t size, int *tmpnam_unique, int tmp_max)
+static int tmpnam_helper(char *s, size_t size, LONG *tmpnam_unique, int tmp_max)
{
char tmpstr[8];
char *p = s;
@@ -5006,7 +5006,7 @@ char * CDECL tmpnam(char *s)
return tmpnam_helper(s, -1, &tmpnam_unique, TMP_MAX) ? NULL : s;
}
-static int wtmpnam_helper(wchar_t *s, size_t size, int *tmpnam_unique, int tmp_max)
+static int wtmpnam_helper(wchar_t *s, size_t size, LONG *tmpnam_unique, int tmp_max)
{
wchar_t tmpstr[8];
wchar_t *p = s;
diff --git a/dlls/msvcrt/heap.c b/dlls/msvcrt/heap.c
index 429a9e2ecda..049c4e0cd93 100644
--- a/dlls/msvcrt/heap.c
+++ b/dlls/msvcrt/heap.c
@@ -46,7 +46,7 @@ static HANDLE heap, sb_heap;
typedef int (CDECL *MSVCRT_new_handler_func)(size_t size);
static MSVCRT_new_handler_func MSVCRT_new_handler;
-static int MSVCRT_new_mode;
+static LONG MSVCRT_new_mode;
/* FIXME - According to documentation it should be 8*1024, at runtime it returns 16 */
static unsigned int MSVCRT_amblksiz = 16;
3
6
07 Feb '22
Fixes a regression introduced by
5c009c17b3a212c3f5b0034c465077c0c593daae.
For IPV6 socket already bound with bind() with IPV6_V6ONLY set to 0
the address returned by getsockname() may change after it is connected
to a IPV4 peer (e. g., from :: to ::ffff:192.0.2.128).
The effect of blamed commit is that before that Unix getsockname()
was called for each ws2_32 getsockname() and after the commit the
socket name is cached at bind and connect.
Signed-off-by: Paul Gofman <pgofman(a)codeweavers.com>
---
Fixes Street Fighter V connection to server. The game first sets IPV6_V6ONLY to 0, then binds the IPV6 socket
to "::", then calls for WSAConnectEx and keeps querying the address, which in the correct case should become
e. g. ::ffff:192.0.2.128 after connection but stays at the initial state after the blamed commit.
server/sock.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/sock.c b/server/sock.c
index 40fb0cac535..512b7c0f78e 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -2340,7 +2340,7 @@ static void sock_ioctl( struct fd *fd, ioctl_code_t code, struct async *async )
allow_fd_caching( sock->fd );
unix_len = sizeof(unix_addr);
- if (!sock->bound && !getsockname( unix_fd, &unix_addr.addr, &unix_len ))
+ if (!getsockname( unix_fd, &unix_addr.addr, &unix_len ))
sock->addr_len = sockaddr_from_unix( &unix_addr, &sock->addr.addr, sizeof(sock->addr) );
sock->bound = 1;
--
2.34.1
1
0
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46284
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
---
dlls/d3dx9_24/d3dx9_24.spec | 2 +-
dlls/d3dx9_25/d3dx9_25.spec | 2 +-
dlls/d3dx9_26/d3dx9_26.spec | 2 +-
dlls/d3dx9_27/d3dx9_27.spec | 2 +-
dlls/d3dx9_28/d3dx9_28.spec | 2 +-
dlls/d3dx9_29/d3dx9_29.spec | 2 +-
dlls/d3dx9_30/d3dx9_30.spec | 2 +-
dlls/d3dx9_31/d3dx9_31.spec | 2 +-
dlls/d3dx9_32/d3dx9_32.spec | 2 +-
dlls/d3dx9_33/d3dx9_33.spec | 2 +-
dlls/d3dx9_34/d3dx9_34.spec | 2 +-
dlls/d3dx9_35/d3dx9_35.spec | 2 +-
dlls/d3dx9_36/d3dx9_36.spec | 2 +-
dlls/d3dx9_36/d3dx9_private.h | 2 +
dlls/d3dx9_36/math.c | 147 ++++++++++++++++++++++++
dlls/d3dx9_36/surface.c | 2 +-
dlls/d3dx9_36/tests/math.c | 208 ++++++++++++++++++++++++++++++++++
dlls/d3dx9_37/d3dx9_37.spec | 2 +-
dlls/d3dx9_38/d3dx9_38.spec | 2 +-
dlls/d3dx9_39/d3dx9_39.spec | 2 +-
dlls/d3dx9_40/d3dx9_40.spec | 2 +-
dlls/d3dx9_41/d3dx9_41.spec | 2 +-
dlls/d3dx9_42/d3dx9_42.spec | 2 +-
dlls/d3dx9_43/d3dx9_43.spec | 2 +-
include/d3dx9math.h | 1 +
25 files changed, 379 insertions(+), 21 deletions(-)
diff --git a/dlls/d3dx9_24/d3dx9_24.spec b/dlls/d3dx9_24/d3dx9_24.spec
index d617d766f85..8791e4ec044 100644
--- a/dlls/d3dx9_24/d3dx9_24.spec
+++ b/dlls/d3dx9_24/d3dx9_24.spec
@@ -256,7 +256,7 @@
@ stdcall D3DXSHEvalSphericalLight(long ptr float float float float ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_25/d3dx9_25.spec b/dlls/d3dx9_25/d3dx9_25.spec
index f13923dcb3a..0431a9f7f75 100644
--- a/dlls/d3dx9_25/d3dx9_25.spec
+++ b/dlls/d3dx9_25/d3dx9_25.spec
@@ -256,7 +256,7 @@
@ stdcall D3DXSHEvalSphericalLight(long ptr float float float float ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_26/d3dx9_26.spec b/dlls/d3dx9_26/d3dx9_26.spec
index 286a9a094a0..5ab0a1d9fea 100644
--- a/dlls/d3dx9_26/d3dx9_26.spec
+++ b/dlls/d3dx9_26/d3dx9_26.spec
@@ -260,7 +260,7 @@
@ stdcall D3DXSHEvalSphericalLight(long ptr float float float float ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_27/d3dx9_27.spec b/dlls/d3dx9_27/d3dx9_27.spec
index 286a9a094a0..5ab0a1d9fea 100644
--- a/dlls/d3dx9_27/d3dx9_27.spec
+++ b/dlls/d3dx9_27/d3dx9_27.spec
@@ -260,7 +260,7 @@
@ stdcall D3DXSHEvalSphericalLight(long ptr float float float float ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_28/d3dx9_28.spec b/dlls/d3dx9_28/d3dx9_28.spec
index 06ced20df61..af5b6077202 100644
--- a/dlls/d3dx9_28/d3dx9_28.spec
+++ b/dlls/d3dx9_28/d3dx9_28.spec
@@ -265,7 +265,7 @@
@ stdcall D3DXSHEvalSphericalLight(long ptr float float float float ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_29/d3dx9_29.spec b/dlls/d3dx9_29/d3dx9_29.spec
index 06ced20df61..af5b6077202 100644
--- a/dlls/d3dx9_29/d3dx9_29.spec
+++ b/dlls/d3dx9_29/d3dx9_29.spec
@@ -265,7 +265,7 @@
@ stdcall D3DXSHEvalSphericalLight(long ptr float float float float ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_30/d3dx9_30.spec b/dlls/d3dx9_30/d3dx9_30.spec
index 06ced20df61..af5b6077202 100644
--- a/dlls/d3dx9_30/d3dx9_30.spec
+++ b/dlls/d3dx9_30/d3dx9_30.spec
@@ -265,7 +265,7 @@
@ stdcall D3DXSHEvalSphericalLight(long ptr float float float float ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_31/d3dx9_31.spec b/dlls/d3dx9_31/d3dx9_31.spec
index c9aca309a35..8f77dc666a2 100644
--- a/dlls/d3dx9_31/d3dx9_31.spec
+++ b/dlls/d3dx9_31/d3dx9_31.spec
@@ -262,7 +262,7 @@
@ stdcall D3DXSHEvalSphericalLight(long ptr float float float float ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_32/d3dx9_32.spec b/dlls/d3dx9_32/d3dx9_32.spec
index f541f6f2ef1..2fdd2a00615 100644
--- a/dlls/d3dx9_32/d3dx9_32.spec
+++ b/dlls/d3dx9_32/d3dx9_32.spec
@@ -267,7 +267,7 @@
@ stub D3DXSHMultiply6(ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_33/d3dx9_33.spec b/dlls/d3dx9_33/d3dx9_33.spec
index f541f6f2ef1..2fdd2a00615 100644
--- a/dlls/d3dx9_33/d3dx9_33.spec
+++ b/dlls/d3dx9_33/d3dx9_33.spec
@@ -267,7 +267,7 @@
@ stub D3DXSHMultiply6(ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_34/d3dx9_34.spec b/dlls/d3dx9_34/d3dx9_34.spec
index f541f6f2ef1..2fdd2a00615 100644
--- a/dlls/d3dx9_34/d3dx9_34.spec
+++ b/dlls/d3dx9_34/d3dx9_34.spec
@@ -267,7 +267,7 @@
@ stub D3DXSHMultiply6(ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_35/d3dx9_35.spec b/dlls/d3dx9_35/d3dx9_35.spec
index f541f6f2ef1..2fdd2a00615 100644
--- a/dlls/d3dx9_35/d3dx9_35.spec
+++ b/dlls/d3dx9_35/d3dx9_35.spec
@@ -267,7 +267,7 @@
@ stub D3DXSHMultiply6(ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec
index e1f44261610..5b7070145de 100644
--- a/dlls/d3dx9_36/d3dx9_36.spec
+++ b/dlls/d3dx9_36/d3dx9_36.spec
@@ -269,7 +269,7 @@
@ stub D3DXSHMultiply6(ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_36/d3dx9_private.h b/dlls/d3dx9_36/d3dx9_private.h
index c3308b04d44..2d286b04694 100644
--- a/dlls/d3dx9_36/d3dx9_private.h
+++ b/dlls/d3dx9_36/d3dx9_private.h
@@ -100,6 +100,8 @@ HRESULT write_buffer_to_file(const WCHAR *filename, ID3DXBuffer *buffer) DECLSPE
const struct pixel_format_desc *get_format_info(D3DFORMAT format) DECLSPEC_HIDDEN;
const struct pixel_format_desc *get_format_info_idx(int idx) DECLSPEC_HIDDEN;
+void format_to_vec4(const struct pixel_format_desc *format, const BYTE *src, struct vec4 *dst);
+
void copy_pixels(const BYTE *src, UINT src_row_pitch, UINT src_slice_pitch,
BYTE *dst, UINT dst_row_pitch, UINT dst_slice_pitch, const struct volume *size,
const struct pixel_format_desc *format) DECLSPEC_HIDDEN;
diff --git a/dlls/d3dx9_36/math.c b/dlls/d3dx9_36/math.c
index a7b0a018680..80f357e00e9 100644
--- a/dlls/d3dx9_36/math.c
+++ b/dlls/d3dx9_36/math.c
@@ -2969,6 +2969,153 @@ static void rotate_X(FLOAT *out, UINT order, FLOAT a, FLOAT *in)
out[35] = 0.9057110548f * in[31] - 0.4192627370f * in[33] + 0.0624999329f * in[35];
}
+static void set_vec3(D3DXVECTOR3 *v, float x, float y, float z)
+{
+ v->x = x;
+ v->y = y;
+ v->z = z;
+}
+
+/*
+ * The following implementation of D3DXSHProjectCubeMap is based on the
+ * SHProjectCubeMap() implementation from Microsoft's DirectXMath library,
+ * covered under the following copyright:
+ *
+ * Copyright (c) Microsoft Corporation.
+ * Licensed under the MIT License.
+ */
+HRESULT WINAPI D3DXSHProjectCubeMap(unsigned int order, IDirect3DCubeTexture9 *texture, float *red, float *green, float *blue)
+{
+ const unsigned int order_square = order * order;
+ const struct pixel_format_desc *format;
+ unsigned int x, y, i, face;
+ float B, S, proj_normal;
+ D3DSURFACE_DESC desc;
+ float Wt = 0.0f;
+ float *temp;
+ HRESULT hr;
+
+ TRACE("order %u, texture %p, red %p, green %p, blue %p.\n", order, texture, red, green, blue);
+
+ if (!texture || !red || order < D3DXSH_MINORDER || order > D3DXSH_MAXORDER)
+ return D3DERR_INVALIDCALL;
+
+ memset(red, 0, order_square * sizeof(float));
+ if (green)
+ memset(green, 0, order_square * sizeof(float));
+ if (blue)
+ memset(blue, 0, order_square * sizeof(float));
+
+ if (FAILED(hr = IDirect3DCubeTexture9_GetLevelDesc(texture, 0, &desc)))
+ {
+ ERR("Failed to get level desc, hr %#x.\n", hr);
+ return hr;
+ }
+
+ format = get_format_info(desc.Format);
+ if (format->type != FORMAT_ARGB && format->type != FORMAT_ARGBF16 && format->type != FORMAT_ARGBF)
+ {
+ FIXME("Unsupported texture format %#x.\n", desc.Format);
+ return D3DERR_INVALIDCALL;
+ }
+
+ if (!(temp = malloc(order_square * sizeof(*temp))))
+ return E_OUTOFMEMORY;
+
+ B = -1.0f + 1.0f / desc.Width;
+ if (desc.Width > 1)
+ S = 2.0f * (1.0f - 1.0f / desc.Width) / (desc.Width - 1.0f);
+ else
+ S = 0.0f;
+
+ for (face = 0; face < 6; ++face)
+ {
+ D3DLOCKED_RECT map_desc;
+
+ if (FAILED(hr = IDirect3DCubeTexture9_LockRect(texture, face, 0, &map_desc, NULL, D3DLOCK_READONLY)))
+ {
+ ERR("Failed to map texture, hr %#x.\n", hr);
+ free(temp);
+ return hr;
+ }
+
+ for (y = 0; y < desc.Height; ++y)
+ {
+ const BYTE *row = (const BYTE *)map_desc.pBits + y * map_desc.Pitch;
+
+ for (x = 0; x < desc.Width; ++x)
+ {
+ float diff_solid, x_3d, y_3d;
+ const float u = x * S + B;
+ const float v = y * S + B;
+ struct vec4 colour;
+ D3DXVECTOR3 dir;
+
+ x_3d = (x * 2.0f + 1.0f) / desc.Width - 1.0f;
+ y_3d = (y * 2.0f + 1.0f) / desc.Width - 1.0f;
+
+ switch (face)
+ {
+ case D3DCUBEMAP_FACE_POSITIVE_X:
+ set_vec3(&dir, 1.0f, -y_3d, -x_3d);
+ break;
+
+ case D3DCUBEMAP_FACE_NEGATIVE_X:
+ set_vec3(&dir, -1.0f, -y_3d, x_3d);
+ break;
+
+ case D3DCUBEMAP_FACE_POSITIVE_Y:
+ set_vec3(&dir, x_3d, 1.0f, y_3d);
+ break;
+
+ case D3DCUBEMAP_FACE_NEGATIVE_Y:
+ set_vec3(&dir, x_3d, -1.0f, -y_3d);
+ break;
+
+ case D3DCUBEMAP_FACE_POSITIVE_Z:
+ set_vec3(&dir, x_3d, -y_3d, 1.0f);
+ break;
+
+ case D3DCUBEMAP_FACE_NEGATIVE_Z:
+ set_vec3(&dir, -x_3d, -y_3d, -1.0f);
+ break;
+ }
+
+ /* This is more complex than powf(..., 1.5f), but also happens
+ * to be slightly more accurate, and slightly faster as well. */
+ diff_solid = 4.0f / ((1.0f + u * u + v * v) * sqrtf(1.0f + u * u + v * v));
+ Wt += diff_solid;
+
+ D3DXVec3Normalize(&dir, &dir);
+ D3DXSHEvalDirection(temp, order, &dir);
+
+ format_to_vec4(format, &row[x * format->block_byte_count], &colour);
+
+ for (i = 0; i < order_square; ++i)
+ {
+ red[i] += temp[i] * colour.x * diff_solid;
+ if (green)
+ green[i] += temp[i] * colour.y * diff_solid;
+ if (blue)
+ blue[i] += temp[i] * colour.z * diff_solid;
+ }
+ }
+ }
+
+ IDirect3DCubeTexture9_UnlockRect(texture, face, 0);
+ }
+
+ proj_normal = (4.0f * M_PI) / Wt;
+ D3DXSHScale(red, order, red, proj_normal);
+ if (green)
+ D3DXSHScale(green, order, green, proj_normal);
+ if (blue)
+ D3DXSHScale(blue, order, blue, proj_normal);
+
+ free(temp);
+ return D3D_OK;
+}
+
FLOAT* WINAPI D3DXSHRotate(FLOAT *out, UINT order, const D3DXMATRIX *matrix, const FLOAT *in)
{
FLOAT alpha, beta, gamma, sinb, temp[36], temp1[36];
diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
index c3f9f84a789..2ca6f093b55 100644
--- a/dlls/d3dx9_36/surface.c
+++ b/dlls/d3dx9_36/surface.c
@@ -1564,7 +1564,7 @@ static DWORD make_argb_color(const struct argb_conversion_info *info, const DWOR
}
/* It doesn't work for components bigger than 32 bits (or somewhat smaller but unaligned). */
-static void format_to_vec4(const struct pixel_format_desc *format, const BYTE *src, struct vec4 *dst)
+void format_to_vec4(const struct pixel_format_desc *format, const BYTE *src, struct vec4 *dst)
{
DWORD mask, tmp;
unsigned int c;
diff --git a/dlls/d3dx9_36/tests/math.c b/dlls/d3dx9_36/tests/math.c
index 6f64e25d200..62f4eaec124 100644
--- a/dlls/d3dx9_36/tests/math.c
+++ b/dlls/d3dx9_36/tests/math.c
@@ -22,6 +22,7 @@
#include "wine/test.h"
#include "d3dx9.h"
#include <math.h>
+#include <stdint.h>
static BOOL compare_float(float f, float g, unsigned int ulps)
{
@@ -205,6 +206,53 @@ static void set_matrix(D3DXMATRIX* mat,
U(mat)->m[3][0] = m30; U(mat)->m[3][1] = m31; U(mat)->m[3][2] = m32; U(mat)->m[3][3] = m33;
}
+static HWND create_window(void)
+{
+ RECT r = {0, 0, 640, 480};
+
+ AdjustWindowRect(&r, WS_OVERLAPPEDWINDOW | WS_VISIBLE, FALSE);
+
+ return CreateWindowA("static", "d3dx9_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
+ 0, 0, r.right - r.left, r.bottom - r.top, NULL, NULL, NULL, NULL);
+}
+
+static IDirect3DDevice9 *create_device(IDirect3D9 *d3d9, HWND focus_window)
+{
+ D3DPRESENT_PARAMETERS present_parameters = {0};
+ unsigned int adapter_ordinal;
+ IDirect3DDevice9 *device;
+ DWORD behavior_flags = D3DCREATE_HARDWARE_VERTEXPROCESSING;
+
+ adapter_ordinal = D3DADAPTER_DEFAULT;
+ present_parameters.BackBufferWidth = 640;
+ present_parameters.BackBufferHeight = 480;
+ present_parameters.BackBufferFormat = D3DFMT_A8R8G8B8;
+ present_parameters.SwapEffect = D3DSWAPEFFECT_DISCARD;
+ present_parameters.hDeviceWindow = focus_window;
+ present_parameters.Windowed = TRUE;
+ present_parameters.EnableAutoDepthStencil = TRUE;
+ present_parameters.AutoDepthStencilFormat = D3DFMT_D24S8;
+
+ if (SUCCEEDED(IDirect3D9_CreateDevice(d3d9, adapter_ordinal, D3DDEVTYPE_HAL, focus_window,
+ behavior_flags, &present_parameters, &device)))
+ return device;
+
+ present_parameters.AutoDepthStencilFormat = D3DFMT_D16;
+ if (SUCCEEDED(IDirect3D9_CreateDevice(d3d9, adapter_ordinal, D3DDEVTYPE_HAL, focus_window,
+ behavior_flags, &present_parameters, &device)))
+ return device;
+
+ behavior_flags = (behavior_flags
+ & ~(D3DCREATE_MIXED_VERTEXPROCESSING | D3DCREATE_SOFTWARE_VERTEXPROCESSING))
+ | D3DCREATE_HARDWARE_VERTEXPROCESSING;
+
+ if (SUCCEEDED(IDirect3D9_CreateDevice(d3d9, adapter_ordinal, D3DDEVTYPE_HAL, focus_window,
+ behavior_flags, &present_parameters, &device)))
+ return device;
+
+ return NULL;
+}
+
static void D3DXColorTest(void)
{
D3DXCOLOR color, color1, color2, expected, got;
@@ -4364,6 +4412,165 @@ static void test_D3DXSHScale(void)
}
}
+static void test_D3DXSHProjectCubeMap(void)
+{
+ unsigned int i, j, level, face, x, y;
+ float red[4], green[4], blue[4];
+ IDirect3DCubeTexture9 *texture;
+ IDirect3DDevice9 *device;
+ D3DLOCKED_RECT map_desc;
+ IDirect3D9 *d3d;
+ ULONG refcount;
+ HWND window;
+ HRESULT hr;
+
+ static const struct
+ {
+ D3DFORMAT format;
+ float red[4];
+ float green[4];
+ float blue[4];
+ }
+ tests[] =
+ {
+ {D3DFMT_A8R8G8B8,
+ {1.77656245f, -1.11197047e-2f, 2.08763797e-2f, -2.10229922e-2f},
+ {1.75811982f, -4.82511893e-2f, 1.67397819e-2f, -1.71497762e-2f},
+ {1.75515056f, -4.07523997e-2f, 1.05397226e-2f, -2.46812664e-2f}},
+ {D3DFMT_X8R8G8B8,
+ {1.77656245f, -1.11197047e-2f, 2.08763797e-2f, -2.10229922e-2f},
+ {1.75811982f, -4.82511893e-2f, 1.67397819e-2f, -1.71497762e-2f},
+ {1.75515056f, -4.07523997e-2f, 1.05397226e-2f, -2.46812664e-2f}},
+ {D3DFMT_A8B8G8R8,
+ {1.75515056f, -4.07523997e-2f, 1.05397226e-2f, -2.46812664e-2f},
+ {1.75811982f, -4.82511893e-2f, 1.67397819e-2f, -1.71497762e-2f},
+ {1.77656245f, -1.11197047e-2f, 2.08763797e-2f, -2.10229922e-2f}},
+ {D3DFMT_R5G6B5,
+ {1.77099848f, -3.88867334e-2f, 6.73775524e-2f, -1.26888147e-2f},
+ {1.77244151f, -5.64723741e-4f, -2.77878426e-4f, -9.10691451e-3f},
+ {1.78902030f, 2.79005636e-2f, 1.62461456e-2f, 2.21668324e-3f}},
+ {D3DFMT_A1R5G5B5,
+ {1.78022826f, 1.46923587e-2f, 3.58058624e-2f, 2.51076911e-2f},
+ {1.77233493f, -7.58088892e-4f, -2.03727093e-3f, -1.34809706e-2f},
+ {1.78902030f, 2.79005636e-2f, 1.62461456e-2f, 2.21668324e-3f}},
+ {D3DFMT_X1R5G5B5,
+ {1.78022826f, 1.46923587e-2f, 3.58058624e-2f, 2.51076911e-2f},
+ {1.77233493f, -7.58088892e-4f, -2.03727093e-3f, -1.34809706e-2f},
+ {1.78902030f, 2.79005636e-2f, 1.62461456e-2f, 2.21668324e-3f}},
+ {D3DFMT_A2R10G10B10,
+ {1.79359019f, -7.74506712e-4f, 8.65613017e-3f, 5.75336441e-3f},
+ {1.77067971f, 6.42523961e-3f, 1.35379164e-2f, 2.24088971e-3f},
+ {1.76601243f, -4.94002625e-2f, 1.28124524e-2f, -7.69229094e-3f}},
+ {D3DFMT_A2B10G10R10,
+ {1.76601243f, -4.94002625e-2f, 1.28124524e-2f, -7.69229094e-3f},
+ {1.77067971f, 6.42523961e-3f, 1.35379164e-2f, 2.24088971e-3f},
+ {1.79359019f, -7.74506712e-4f, 8.65613017e-3f, 5.75336441e-3f}},
+ {D3DFMT_A16B16G16R16,
+ {1.75979614f, 1.44450525e-2f, -3.25212209e-3f, 2.98178056e-3f},
+ {1.78080165f, -2.63770130e-2f, 6.31967233e-3f, 3.66022950e-3f},
+ {1.77588308f, -1.93727610e-3f, -3.22831096e-3f, -6.18841546e-3f}},
+ {D3DFMT_A16B16G16R16F,
+ { 5.17193642e+1f, -3.41681671e+2f, -8.82221741e+2f, 7.77049316e+2f},
+ {-2.08198950e+3f, 5.24323584e+3f, -3.42663379e+3f, 3.80999243e+3f},
+ {-1.10743945e+3f, -9.43649292e+2f, 5.48424316e+2f, 1.65352710e+3f}},
+ };
+
+ window = create_window();
+ d3d = Direct3DCreate9(D3D_SDK_VERSION);
+ ok(!!d3d, "Failed to create a D3D object.\n");
+ if (!(device = create_device(d3d, window)))
+ {
+ skip("Failed to create a D3D device, skipping tests.\n");
+ IDirect3D9_Release(d3d);
+ DestroyWindow(window);
+ return;
+ }
+
+ for (i = 0; i < ARRAY_SIZE(tests); ++i)
+ {
+ winetest_push_context("Format %#x", tests[i].format);
+
+ hr = IDirect3DDevice9_CreateCubeTexture(device, 8, 4, D3DUSAGE_DYNAMIC,
+ tests[i].format, D3DPOOL_DEFAULT, &texture, NULL);
+ if (FAILED(hr))
+ {
+ skip("Failed to create cube texture.\n");
+ winetest_pop_context();
+ continue;
+ }
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+ for (face = 0; face < 6; ++face)
+ {
+ hr = IDirect3DCubeTexture9_LockRect(texture, face, 0, &map_desc, NULL, 0);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+ for (y = 0; y < 8; ++y)
+ {
+ uint8_t *row = (uint8_t *)map_desc.pBits + y * map_desc.Pitch;
+
+ for (x = 0; x < map_desc.Pitch; ++x)
+ row[x] = face * 111 + y * 39 + x * 7;
+ }
+
+ hr = IDirect3DCubeTexture9_UnlockRect(texture, face, 0);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+ for (level = 1; level < 4; ++level)
+ {
+ hr = IDirect3DCubeTexture9_LockRect(texture, face, level, &map_desc, NULL, 0);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ memset(map_desc.pBits, 0xcc, 4 * map_desc.Pitch);
+ hr = IDirect3DCubeTexture9_UnlockRect(texture, face, level);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ }
+ }
+
+ hr = D3DXSHProjectCubeMap(1, texture, red, green, blue);
+ ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x.\n", hr);
+
+ hr = D3DXSHProjectCubeMap(7, texture, red, green, blue);
+ ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x.\n", hr);
+
+ hr = D3DXSHProjectCubeMap(2, NULL, red, green, blue);
+ ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x.\n", hr);
+
+ memset(red, 0, sizeof(red));
+ memset(green, 0, sizeof(green));
+ memset(blue, 0, sizeof(blue));
+ hr = D3DXSHProjectCubeMap(2, texture, red, green, blue);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+ for (j = 0; j < 4; ++j)
+ {
+ ok(compare_float(red[j], tests[i].red[j], 1024),
+ "Got unexpected value %.8e for red coefficient %u.\n", red[j], j);
+ ok(compare_float(green[j], tests[i].green[j], 1024),
+ "Got unexpected value %.8e for green coefficient %u.\n", green[j], j);
+ ok(compare_float(blue[j], tests[i].blue[j], 1024),
+ "Got unexpected value %.8e for blue coefficient %u.\n", blue[j], j);
+ }
+
+ hr = D3DXSHProjectCubeMap(2, texture, red, NULL, NULL);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+ hr = D3DXSHProjectCubeMap(2, texture, NULL, green, NULL);
+ ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x.\n", hr);
+
+ hr = D3DXSHProjectCubeMap(2, texture, NULL, NULL, blue);
+ ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x.\n", hr);
+
+ IDirect3DCubeTexture9_Release(texture);
+
+ winetest_pop_context();
+ }
+
+ refcount = IDirect3DDevice9_Release(device);
+ ok(!refcount, "Device has %u references left.\n", refcount);
+ IDirect3D9_Release(d3d);
+ DestroyWindow(window);
+}
+
START_TEST(math)
{
D3DXColorTest();
@@ -4393,4 +4600,5 @@ START_TEST(math)
test_D3DXSHRotate();
test_D3DXSHRotateZ();
test_D3DXSHScale();
+ test_D3DXSHProjectCubeMap();
}
diff --git a/dlls/d3dx9_37/d3dx9_37.spec b/dlls/d3dx9_37/d3dx9_37.spec
index e1f44261610..5b7070145de 100644
--- a/dlls/d3dx9_37/d3dx9_37.spec
+++ b/dlls/d3dx9_37/d3dx9_37.spec
@@ -269,7 +269,7 @@
@ stub D3DXSHMultiply6(ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_38/d3dx9_38.spec b/dlls/d3dx9_38/d3dx9_38.spec
index e1f44261610..5b7070145de 100644
--- a/dlls/d3dx9_38/d3dx9_38.spec
+++ b/dlls/d3dx9_38/d3dx9_38.spec
@@ -269,7 +269,7 @@
@ stub D3DXSHMultiply6(ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_39/d3dx9_39.spec b/dlls/d3dx9_39/d3dx9_39.spec
index e1f44261610..5b7070145de 100644
--- a/dlls/d3dx9_39/d3dx9_39.spec
+++ b/dlls/d3dx9_39/d3dx9_39.spec
@@ -269,7 +269,7 @@
@ stub D3DXSHMultiply6(ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_40/d3dx9_40.spec b/dlls/d3dx9_40/d3dx9_40.spec
index e1f44261610..5b7070145de 100644
--- a/dlls/d3dx9_40/d3dx9_40.spec
+++ b/dlls/d3dx9_40/d3dx9_40.spec
@@ -269,7 +269,7 @@
@ stub D3DXSHMultiply6(ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_41/d3dx9_41.spec b/dlls/d3dx9_41/d3dx9_41.spec
index e1f44261610..5b7070145de 100644
--- a/dlls/d3dx9_41/d3dx9_41.spec
+++ b/dlls/d3dx9_41/d3dx9_41.spec
@@ -269,7 +269,7 @@
@ stub D3DXSHMultiply6(ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_42/d3dx9_42.spec b/dlls/d3dx9_42/d3dx9_42.spec
index 0851945d36b..4a418d1508a 100644
--- a/dlls/d3dx9_42/d3dx9_42.spec
+++ b/dlls/d3dx9_42/d3dx9_42.spec
@@ -262,7 +262,7 @@
@ stub D3DXSHMultiply6(ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/dlls/d3dx9_43/d3dx9_43.spec b/dlls/d3dx9_43/d3dx9_43.spec
index 0851945d36b..4a418d1508a 100644
--- a/dlls/d3dx9_43/d3dx9_43.spec
+++ b/dlls/d3dx9_43/d3dx9_43.spec
@@ -262,7 +262,7 @@
@ stub D3DXSHMultiply6(ptr ptr ptr)
@ stub D3DXSHPRTCompSplitMeshSC(ptr long long ptr long ptr long long ptr ptr long ptr ptr ptr ptr ptr)
@ stub D3DXSHPRTCompSuperCluster(ptr ptr long long ptr ptr)
-@ stub D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
+@ stdcall D3DXSHProjectCubeMap(long ptr ptr ptr ptr)
@ stdcall D3DXSHRotate(ptr long ptr ptr)
@ stdcall D3DXSHRotateZ(ptr long float ptr)
@ stdcall D3DXSHScale(ptr long ptr float)
diff --git a/include/d3dx9math.h b/include/d3dx9math.h
index bf03ca3abaa..32d894f9fed 100644
--- a/include/d3dx9math.h
+++ b/include/d3dx9math.h
@@ -396,6 +396,7 @@ HRESULT WINAPI D3DXSHEvalSphericalLight(UINT order, const D3DXVECTOR3 *dir, FLOA
FLOAT* WINAPI D3DXSHMultiply2(FLOAT *out, const FLOAT *a, const FLOAT *b);
FLOAT* WINAPI D3DXSHMultiply3(FLOAT *out, const FLOAT *a, const FLOAT *b);
FLOAT* WINAPI D3DXSHMultiply4(FLOAT *out, const FLOAT *a, const FLOAT *b);
+HRESULT WINAPI D3DXSHProjectCubeMap(UINT order, IDirect3DCubeTexture9 *texture, FLOAT *red, FLOAT *green, FLOAT *blue);
FLOAT* WINAPI D3DXSHRotate(FLOAT *out, UINT order, const D3DXMATRIX *matrix, const FLOAT *in);
FLOAT* WINAPI D3DXSHRotateZ(FLOAT *out, UINT order, FLOAT angle, const FLOAT *in);
FLOAT* WINAPI D3DXSHScale(FLOAT *out, UINT order, const FLOAT *a, const FLOAT scale);
--
2.34.1
2
1
07 Feb '22
Signed-off-by: Andrew Eikum <aeikum(a)codeweavers.com>
---
dlls/evr/evr_private.h | 21 ---------------------
dlls/evr/presenter.c | 10 +++++-----
dlls/evr/sample.c | 27 +++------------------------
dlls/mf/clock.c | 4 ++--
dlls/mf/copier.c | 2 +-
dlls/mf/evr.c | 12 ++++++------
dlls/mf/mf_private.h | 21 ---------------------
dlls/mf/samplegrabber.c | 10 +++++-----
dlls/mf/sar.c | 12 ++++++------
dlls/mfplat/buffer.c | 2 +-
dlls/mfplat/main.c | 10 +++++-----
dlls/mfplat/mfplat_private.h | 21 ---------------------
dlls/mfplat/sample.c | 4 ++--
dlls/quartz/acmwrapper.c | 6 +++---
dlls/quartz/avidec.c | 2 +-
dlls/quartz/dsoundrender.c | 10 +++++-----
dlls/quartz/filtergraph.c | 12 ++++++------
dlls/quartz/memallocator.c | 8 ++++----
dlls/quartz/quartz_private.h | 21 ---------------------
dlls/quartz/systemclock.c | 6 +++---
dlls/winegstreamer/gst_private.h | 21 ---------------------
dlls/winegstreamer/quartz_parser.c | 6 +++---
dlls/winegstreamer/wm_asyncreader.c | 8 ++++----
dlls/winegstreamer/wm_reader.c | 8 ++++----
include/wine/debug.h | 21 +++++++++++++++++++++
libs/strmbase/filter.c | 2 +-
libs/strmbase/mediatype.c | 4 ++--
libs/strmbase/pin.c | 4 ++--
libs/strmbase/renderer.c | 8 ++++----
libs/strmbase/strmbase_private.h | 21 ---------------------
30 files changed, 99 insertions(+), 225 deletions(-)
diff --git a/dlls/evr/evr_private.h b/dlls/evr/evr_private.h
index ef38b0f70cf..dabaaf8ee1a 100644
--- a/dlls/evr/evr_private.h
+++ b/dlls/evr/evr_private.h
@@ -24,27 +24,6 @@
#include "wine/strmbase.h"
#include "wine/debug.h"
-static inline const char *debugstr_time(LONGLONG time)
-{
- ULONGLONG abstime = time >= 0 ? time : -time;
- unsigned int i = 0, j = 0;
- char buffer[23], rev[23];
-
- while (abstime || i <= 8)
- {
- buffer[i++] = '0' + (abstime % 10);
- abstime /= 10;
- if (i == 7) buffer[i++] = '.';
- }
- if (time < 0) buffer[i++] = '-';
-
- while (i--) rev[j++] = buffer[i];
- while (rev[j-1] == '0' && rev[j-2] != '.') --j;
- rev[j] = 0;
-
- return wine_dbg_sprintf("%s", rev);
-}
-
static inline const char *debugstr_normalized_rect(const MFVideoNormalizedRect *rect)
{
if (!rect) return "(null)";
diff --git a/dlls/evr/presenter.c b/dlls/evr/presenter.c
index 7e14cb2f720..864891eec6d 100644
--- a/dlls/evr/presenter.c
+++ b/dlls/evr/presenter.c
@@ -902,7 +902,7 @@ static HRESULT WINAPI video_presenter_OnClockStart(IMFVideoPresenter *iface, MFT
{
struct video_presenter *presenter = impl_from_IMFVideoPresenter(iface);
- TRACE("%p, %s, %s.\n", iface, debugstr_time(systime), wine_dbgstr_longlong(offset));
+ TRACE("%p, %s, %s.\n", iface, wine_dbgstr_reference_time(systime), wine_dbgstr_longlong(offset));
EnterCriticalSection(&presenter->cs);
presenter->state = PRESENTER_STATE_STARTED;
@@ -915,7 +915,7 @@ static HRESULT WINAPI video_presenter_OnClockStop(IMFVideoPresenter *iface, MFTI
{
struct video_presenter *presenter = impl_from_IMFVideoPresenter(iface);
- TRACE("%p, %s.\n", iface, debugstr_time(systime));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(systime));
EnterCriticalSection(&presenter->cs);
presenter->state = PRESENTER_STATE_STOPPED;
@@ -929,7 +929,7 @@ static HRESULT WINAPI video_presenter_OnClockPause(IMFVideoPresenter *iface, MFT
{
struct video_presenter *presenter = impl_from_IMFVideoPresenter(iface);
- TRACE("%p, %s.\n", iface, debugstr_time(systime));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(systime));
EnterCriticalSection(&presenter->cs);
presenter->state = PRESENTER_STATE_PAUSED;
@@ -942,7 +942,7 @@ static HRESULT WINAPI video_presenter_OnClockRestart(IMFVideoPresenter *iface, M
{
struct video_presenter *presenter = impl_from_IMFVideoPresenter(iface);
- TRACE("%p, %s.\n", iface, debugstr_time(systime));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(systime));
EnterCriticalSection(&presenter->cs);
presenter->state = PRESENTER_STATE_STARTED;
@@ -953,7 +953,7 @@ static HRESULT WINAPI video_presenter_OnClockRestart(IMFVideoPresenter *iface, M
static HRESULT WINAPI video_presenter_OnClockSetRate(IMFVideoPresenter *iface, MFTIME systime, float rate)
{
- FIXME("%p, %s, %f.\n", iface, debugstr_time(systime), rate);
+ FIXME("%p, %s, %f.\n", iface, wine_dbgstr_reference_time(systime), rate);
return E_NOTIMPL;
}
diff --git a/dlls/evr/sample.c b/dlls/evr/sample.c
index 1d29b6cdc2c..b8ac408e4ff 100644
--- a/dlls/evr/sample.c
+++ b/dlls/evr/sample.c
@@ -29,27 +29,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(evr);
-static const char *debugstr_time(LONGLONG time)
-{
- ULONGLONG abstime = time >= 0 ? time : -time;
- unsigned int i = 0, j = 0;
- char buffer[23], rev[23];
-
- while (abstime || i <= 8)
- {
- buffer[i++] = '0' + (abstime % 10);
- abstime /= 10;
- if (i == 7) buffer[i++] = '.';
- }
- if (time < 0) buffer[i++] = '-';
-
- while (i--) rev[j++] = buffer[i];
- while (rev[j-1] == '0' && rev[j-2] != '.') --j;
- rev[j] = 0;
-
- return wine_dbg_sprintf("%s", rev);
-}
-
struct surface_buffer
{
IMFMediaBuffer IMFMediaBuffer_iface;
@@ -1258,7 +1237,7 @@ static HRESULT WINAPI video_sample_SetSampleTime(IMFSample *iface, LONGLONG time
{
struct video_sample *sample = impl_from_IMFSample(iface);
- TRACE("%p, %s.\n", iface, debugstr_time(timestamp));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(timestamp));
EnterCriticalSection(&sample->cs);
sample->timestamp = timestamp;
@@ -1289,7 +1268,7 @@ static HRESULT WINAPI video_sample_SetSampleDuration(IMFSample *iface, LONGLONG
{
struct video_sample *sample = impl_from_IMFSample(iface);
- TRACE("%p, %s.\n", iface, debugstr_time(duration));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(duration));
EnterCriticalSection(&sample->cs);
sample->duration = duration;
@@ -1523,7 +1502,7 @@ static void WINAPI desired_video_sample_SetDesiredSampleTimeAndDuration(IMFDesir
{
struct video_sample *sample = impl_from_IMFDesiredSample(iface);
- TRACE("%p, %s, %s.\n", iface, debugstr_time(sample_time), debugstr_time(sample_duration));
+ TRACE("%p, %s, %s.\n", iface, wine_dbgstr_reference_time(sample_time), wine_dbgstr_reference_time(sample_duration));
EnterCriticalSection(&sample->cs);
sample->flags |= SAMPLE_PROP_HAS_DESIRED_PROPS;
diff --git a/dlls/mf/clock.c b/dlls/mf/clock.c
index 4a3ad7ec7c1..a4212ee0402 100644
--- a/dlls/mf/clock.c
+++ b/dlls/mf/clock.c
@@ -660,7 +660,7 @@ static HRESULT WINAPI present_clock_Start(IMFPresentationClock *iface, LONGLONG
struct clock_state_change_param param = {{0}};
HRESULT hr;
- TRACE("%p, %s.\n", iface, debugstr_time(start_offset));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(start_offset));
EnterCriticalSection(&clock->cs);
clock->start_offset = param.u.offset = start_offset;
@@ -885,7 +885,7 @@ static HRESULT WINAPI present_clock_timer_SetTimer(IMFTimer *iface, DWORD flags,
struct clock_timer *clock_timer;
HRESULT hr;
- TRACE("%p, %#x, %s, %p, %p, %p.\n", iface, flags, debugstr_time(time), callback, state, cancel_key);
+ TRACE("%p, %#x, %s, %p, %p, %p.\n", iface, flags, wine_dbgstr_reference_time(time), callback, state, cancel_key);
if (!(clock_timer = calloc(1, sizeof(*clock_timer))))
return E_OUTOFMEMORY;
diff --git a/dlls/mf/copier.c b/dlls/mf/copier.c
index fe5664ee4c7..4972c9f9c44 100644
--- a/dlls/mf/copier.c
+++ b/dlls/mf/copier.c
@@ -424,7 +424,7 @@ static HRESULT WINAPI sample_copier_transform_GetOutputStatus(IMFTransform *ifac
static HRESULT WINAPI sample_copier_transform_SetOutputBounds(IMFTransform *iface, LONGLONG lower, LONGLONG upper)
{
- TRACE("%p, %s, %s.\n", iface, debugstr_time(lower), debugstr_time(upper));
+ TRACE("%p, %s, %s.\n", iface, wine_dbgstr_reference_time(lower), wine_dbgstr_reference_time(upper));
return E_NOTIMPL;
}
diff --git a/dlls/mf/evr.c b/dlls/mf/evr.c
index 5e8b559af04..173e712ab84 100644
--- a/dlls/mf/evr.c
+++ b/dlls/mf/evr.c
@@ -1504,7 +1504,7 @@ static HRESULT WINAPI video_renderer_preroll_NotifyPreroll(IMFMediaSinkPreroll *
HRESULT hr = S_OK;
size_t i;
- TRACE("%p, %s.\n", iface, debugstr_time(start_time));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(start_time));
EnterCriticalSection(&renderer->cs);
if (renderer->flags & EVR_SHUT_DOWN)
@@ -1880,7 +1880,7 @@ static HRESULT WINAPI video_renderer_clock_sink_OnClockStart(IMFClockStateSink *
unsigned int state, request_sample;
size_t i;
- TRACE("%p, %s, %s.\n", iface, debugstr_time(systime), debugstr_time(offset));
+ TRACE("%p, %s, %s.\n", iface, wine_dbgstr_reference_time(systime), wine_dbgstr_reference_time(offset));
EnterCriticalSection(&renderer->cs);
@@ -1923,7 +1923,7 @@ static HRESULT WINAPI video_renderer_clock_sink_OnClockStop(IMFClockStateSink *i
struct video_renderer *renderer = impl_from_IMFClockStateSink(iface);
size_t i;
- TRACE("%p, %s.\n", iface, debugstr_time(systime));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(systime));
EnterCriticalSection(&renderer->cs);
@@ -1960,7 +1960,7 @@ static HRESULT WINAPI video_renderer_clock_sink_OnClockPause(IMFClockStateSink *
struct video_renderer *renderer = impl_from_IMFClockStateSink(iface);
size_t i;
- TRACE("%p, %s.\n", iface, debugstr_time(systime));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(systime));
EnterCriticalSection(&renderer->cs);
@@ -1987,7 +1987,7 @@ static HRESULT WINAPI video_renderer_clock_sink_OnClockRestart(IMFClockStateSink
struct video_renderer *renderer = impl_from_IMFClockStateSink(iface);
size_t i;
- TRACE("%p, %s.\n", iface, debugstr_time(systime));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(systime));
EnterCriticalSection(&renderer->cs);
@@ -2010,7 +2010,7 @@ static HRESULT WINAPI video_renderer_clock_sink_OnClockSetRate(IMFClockStateSink
struct video_renderer *renderer = impl_from_IMFClockStateSink(iface);
IMFClockStateSink *sink;
- TRACE("%p, %s, %f.\n", iface, debugstr_time(systime), rate);
+ TRACE("%p, %s, %f.\n", iface, wine_dbgstr_reference_time(systime), rate);
EnterCriticalSection(&renderer->cs);
diff --git a/dlls/mf/mf_private.h b/dlls/mf/mf_private.h
index db6f101cd6d..c6f853e4950 100644
--- a/dlls/mf/mf_private.h
+++ b/dlls/mf/mf_private.h
@@ -58,27 +58,6 @@ struct activate_funcs
HRESULT create_activation_object(void *context, const struct activate_funcs *funcs, IMFActivate **ret) DECLSPEC_HIDDEN;
-static inline const char *debugstr_time(LONGLONG time)
-{
- ULONGLONG abstime = time >= 0 ? time : -time;
- unsigned int i = 0, j = 0;
- char buffer[23], rev[23];
-
- while (abstime || i <= 8)
- {
- buffer[i++] = '0' + (abstime % 10);
- abstime /= 10;
- if (i == 7) buffer[i++] = '.';
- }
- if (time < 0) buffer[i++] = '-';
-
- while (i--) rev[j++] = buffer[i];
- while (rev[j-1] == '0' && rev[j-2] != '.') --j;
- rev[j] = 0;
-
- return wine_dbg_sprintf("%s", rev);
-}
-
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/samplegrabber.c b/dlls/mf/samplegrabber.c
index e7d3be68df3..53c7e381d6a 100644
--- a/dlls/mf/samplegrabber.c
+++ b/dlls/mf/samplegrabber.c
@@ -1170,7 +1170,7 @@ static HRESULT WINAPI sample_grabber_clock_sink_OnClockStart(IMFClockStateSink *
{
struct sample_grabber *grabber = impl_from_IMFClockStateSink(iface);
- TRACE("%p, %s, %s.\n", iface, debugstr_time(systime), debugstr_time(offset));
+ TRACE("%p, %s, %s.\n", iface, wine_dbgstr_reference_time(systime), wine_dbgstr_reference_time(offset));
return sample_grabber_set_state(grabber, SINK_STATE_RUNNING, systime, offset);
}
@@ -1179,7 +1179,7 @@ static HRESULT WINAPI sample_grabber_clock_sink_OnClockStop(IMFClockStateSink *i
{
struct sample_grabber *grabber = impl_from_IMFClockStateSink(iface);
- TRACE("%p, %s.\n", iface, debugstr_time(systime));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(systime));
return sample_grabber_set_state(grabber, SINK_STATE_STOPPED, systime, 0);
}
@@ -1188,7 +1188,7 @@ static HRESULT WINAPI sample_grabber_clock_sink_OnClockPause(IMFClockStateSink *
{
struct sample_grabber *grabber = impl_from_IMFClockStateSink(iface);
- TRACE("%p, %s.\n", iface, debugstr_time(systime));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(systime));
return sample_grabber_set_state(grabber, SINK_STATE_PAUSED, systime, 0);
}
@@ -1197,7 +1197,7 @@ static HRESULT WINAPI sample_grabber_clock_sink_OnClockRestart(IMFClockStateSink
{
struct sample_grabber *grabber = impl_from_IMFClockStateSink(iface);
- TRACE("%p, %s.\n", iface, debugstr_time(systime));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(systime));
return sample_grabber_set_state(grabber, SINK_STATE_RUNNING, systime, PRESENTATION_CURRENT_POSITION);
}
@@ -1206,7 +1206,7 @@ static HRESULT WINAPI sample_grabber_clock_sink_OnClockSetRate(IMFClockStateSink
{
struct sample_grabber *grabber = impl_from_IMFClockStateSink(iface);
- TRACE("%p, %s, %f.\n", iface, debugstr_time(systime), rate);
+ TRACE("%p, %s, %f.\n", iface, wine_dbgstr_reference_time(systime), rate);
return IMFSampleGrabberSinkCallback_OnClockSetRate(sample_grabber_get_callback(grabber), systime, rate);
}
diff --git a/dlls/mf/sar.c b/dlls/mf/sar.c
index 3c9bac90c9f..a6513fc167f 100644
--- a/dlls/mf/sar.c
+++ b/dlls/mf/sar.c
@@ -518,7 +518,7 @@ static HRESULT WINAPI audio_renderer_preroll_NotifyPreroll(IMFMediaSinkPreroll *
{
struct audio_renderer *renderer = impl_from_IMFMediaSinkPreroll(iface);
- TRACE("%p, %s.\n", iface, debugstr_time(start_time));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(start_time));
if (renderer->flags & SAR_SHUT_DOWN)
return MF_E_SHUTDOWN;
@@ -626,7 +626,7 @@ static HRESULT WINAPI audio_renderer_clock_sink_OnClockStart(IMFClockStateSink *
struct audio_renderer *renderer = impl_from_IMFClockStateSink(iface);
HRESULT hr = S_OK;
- TRACE("%p, %s, %s.\n", iface, debugstr_time(systime), debugstr_time(offset));
+ TRACE("%p, %s, %s.\n", iface, wine_dbgstr_reference_time(systime), wine_dbgstr_reference_time(offset));
EnterCriticalSection(&renderer->cs);
if (renderer->audio_client)
@@ -654,7 +654,7 @@ static HRESULT WINAPI audio_renderer_clock_sink_OnClockStop(IMFClockStateSink *i
struct audio_renderer *renderer = impl_from_IMFClockStateSink(iface);
HRESULT hr = S_OK;
- TRACE("%p, %s.\n", iface, debugstr_time(systime));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(systime));
EnterCriticalSection(&renderer->cs);
if (renderer->audio_client)
@@ -686,7 +686,7 @@ static HRESULT WINAPI audio_renderer_clock_sink_OnClockPause(IMFClockStateSink *
struct audio_renderer *renderer = impl_from_IMFClockStateSink(iface);
HRESULT hr;
- TRACE("%p, %s.\n", iface, debugstr_time(systime));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(systime));
EnterCriticalSection(&renderer->cs);
if (renderer->state == STREAM_STATE_RUNNING)
@@ -715,7 +715,7 @@ static HRESULT WINAPI audio_renderer_clock_sink_OnClockRestart(IMFClockStateSink
BOOL preroll = FALSE;
HRESULT hr = S_OK;
- TRACE("%p, %s.\n", iface, debugstr_time(systime));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(systime));
EnterCriticalSection(&renderer->cs);
if (renderer->audio_client)
@@ -741,7 +741,7 @@ static HRESULT WINAPI audio_renderer_clock_sink_OnClockRestart(IMFClockStateSink
static HRESULT WINAPI audio_renderer_clock_sink_OnClockSetRate(IMFClockStateSink *iface, MFTIME systime, float rate)
{
- FIXME("%p, %s, %f.\n", iface, debugstr_time(systime), rate);
+ FIXME("%p, %s, %f.\n", iface, wine_dbgstr_reference_time(systime), rate);
return E_NOTIMPL;
}
diff --git a/dlls/mfplat/buffer.c b/dlls/mfplat/buffer.c
index f161bb29d80..525c902d192 100644
--- a/dlls/mfplat/buffer.c
+++ b/dlls/mfplat/buffer.c
@@ -1560,7 +1560,7 @@ HRESULT WINAPI MFCreateMediaBufferFromMediaType(IMFMediaType *media_type, LONGLO
HRESULT hr;
GUID major;
- TRACE("%p, %s, %u, %u, %p.\n", media_type, debugstr_time(duration), min_length, alignment, buffer);
+ TRACE("%p, %s, %u, %u, %p.\n", media_type, wine_dbgstr_reference_time(duration), min_length, alignment, buffer);
if (!media_type)
return E_INVALIDARG;
diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index e79f59d41dd..ec24b32318b 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -8057,7 +8057,7 @@ static HRESULT WINAPI system_time_source_sink_OnClockStart(IMFClockStateSink *if
MFCLOCK_STATE state;
HRESULT hr;
- TRACE("%p, %s, %s.\n", iface, debugstr_time(system_time), debugstr_time(start_offset));
+ TRACE("%p, %s, %s.\n", iface, wine_dbgstr_reference_time(system_time), wine_dbgstr_reference_time(start_offset));
EnterCriticalSection(&source->cs);
state = source->state;
@@ -8094,7 +8094,7 @@ static HRESULT WINAPI system_time_source_sink_OnClockStop(IMFClockStateSink *ifa
struct system_time_source *source = impl_from_IMFClockStateSink(iface);
HRESULT hr;
- TRACE("%p, %s.\n", iface, debugstr_time(system_time));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(system_time));
EnterCriticalSection(&source->cs);
if (SUCCEEDED(hr = system_time_source_change_state(source, CLOCK_CMD_STOP)))
@@ -8109,7 +8109,7 @@ static HRESULT WINAPI system_time_source_sink_OnClockPause(IMFClockStateSink *if
struct system_time_source *source = impl_from_IMFClockStateSink(iface);
HRESULT hr;
- TRACE("%p, %s.\n", iface, debugstr_time(system_time));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(system_time));
EnterCriticalSection(&source->cs);
if (SUCCEEDED(hr = system_time_source_change_state(source, CLOCK_CMD_PAUSE)))
@@ -8127,7 +8127,7 @@ static HRESULT WINAPI system_time_source_sink_OnClockRestart(IMFClockStateSink *
struct system_time_source *source = impl_from_IMFClockStateSink(iface);
HRESULT hr;
- TRACE("%p, %s.\n", iface, debugstr_time(system_time));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(system_time));
EnterCriticalSection(&source->cs);
if (SUCCEEDED(hr = system_time_source_change_state(source, CLOCK_CMD_RESTART)))
@@ -8145,7 +8145,7 @@ static HRESULT WINAPI system_time_source_sink_OnClockSetRate(IMFClockStateSink *
struct system_time_source *source = impl_from_IMFClockStateSink(iface);
double intpart;
- TRACE("%p, %s, %f.\n", iface, debugstr_time(system_time), rate);
+ TRACE("%p, %s, %f.\n", iface, wine_dbgstr_reference_time(system_time), rate);
if (rate == 0.0f)
return MF_E_UNSUPPORTED_RATE;
diff --git a/dlls/mfplat/mfplat_private.h b/dlls/mfplat/mfplat_private.h
index b646d9e7cbb..bc673987650 100644
--- a/dlls/mfplat/mfplat_private.h
+++ b/dlls/mfplat/mfplat_private.h
@@ -183,24 +183,3 @@ static inline const char *debugstr_fourcc(DWORD format)
return wine_dbgstr_an((char *)&format, 4);
}
-
-static inline const char *debugstr_time(LONGLONG time)
-{
- ULONGLONG abstime = time >= 0 ? time : -time;
- unsigned int i = 0, j = 0;
- char buffer[23], rev[23];
-
- while (abstime || i <= 8)
- {
- buffer[i++] = '0' + (abstime % 10);
- abstime /= 10;
- if (i == 7) buffer[i++] = '.';
- }
- if (time < 0) buffer[i++] = '-';
-
- while (i--) rev[j++] = buffer[i];
- while (rev[j-1] == '0' && rev[j-2] != '.') --j;
- rev[j] = 0;
-
- return wine_dbg_sprintf("%s", rev);
-}
diff --git a/dlls/mfplat/sample.c b/dlls/mfplat/sample.c
index 04c68c87199..72eca896dae 100644
--- a/dlls/mfplat/sample.c
+++ b/dlls/mfplat/sample.c
@@ -528,7 +528,7 @@ static HRESULT WINAPI sample_SetSampleTime(IMFSample *iface, LONGLONG timestamp)
{
struct sample *sample = impl_from_IMFSample(iface);
- TRACE("%p, %s.\n", iface, debugstr_time(timestamp));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(timestamp));
EnterCriticalSection(&sample->attributes.cs);
sample->timestamp = timestamp;
@@ -559,7 +559,7 @@ static HRESULT WINAPI sample_SetSampleDuration(IMFSample *iface, LONGLONG durati
{
struct sample *sample = impl_from_IMFSample(iface);
- TRACE("%p, %s.\n", iface, debugstr_time(duration));
+ TRACE("%p, %s.\n", iface, wine_dbgstr_reference_time(duration));
EnterCriticalSection(&sample->attributes.cs);
sample->duration = duration;
diff --git a/dlls/quartz/acmwrapper.c b/dlls/quartz/acmwrapper.c
index 12d96f69376..04f942b7d9d 100644
--- a/dlls/quartz/acmwrapper.c
+++ b/dlls/quartz/acmwrapper.c
@@ -203,7 +203,7 @@ static HRESULT WINAPI acm_wrapper_sink_Receive(struct strmbase_sink *iface, IMed
goto error;
}
- TRACE("Sample start time: %s.\n", debugstr_time(tStart));
+ TRACE("Sample start time: %s.\n", wine_dbgstr_reference_time(tStart));
if (ash.cbSrcLengthUsed == cbSrcStream)
{
IMediaSample_SetTime(pOutSample, &tStart, &tStop);
@@ -236,7 +236,7 @@ static HRESULT WINAPI acm_wrapper_sink_Receive(struct strmbase_sink *iface, IMed
IMediaSample_SetMediaTime(pOutSample, NULL, NULL);
}
- TRACE("Sample stop time: %s\n", debugstr_time(tStart));
+ TRACE("Sample stop time: %s\n", wine_dbgstr_reference_time(tStart));
hr = IMemInputPin_Receive(This->source.pMemInputPin, pOutSample);
if (hr != S_OK && hr != VFW_E_NOT_CONNECTED) {
@@ -418,7 +418,7 @@ static HRESULT WINAPI acm_wrapper_source_qc_Notify(IQualityControl *iface,
HRESULT hr = S_OK;
TRACE("filter %p, sender %p, type %#x, proportion %ld, late %s, timestamp %s.\n",
- filter, sender, q.Type, q.Proportion, debugstr_time(q.Late), debugstr_time(q.TimeStamp));
+ filter, sender, q.Type, q.Proportion, wine_dbgstr_reference_time(q.Late), wine_dbgstr_reference_time(q.TimeStamp));
if (filter->source_qc_sink)
return IQualityControl_Notify(filter->source_qc_sink, &filter->filter.IBaseFilter_iface, q);
diff --git a/dlls/quartz/avidec.c b/dlls/quartz/avidec.c
index 30b6c741eed..ebd59beaf70 100644
--- a/dlls/quartz/avidec.c
+++ b/dlls/quartz/avidec.c
@@ -477,7 +477,7 @@ static HRESULT WINAPI avi_decompressor_source_qc_Notify(IQualityControl *iface,
struct avi_decompressor *filter = impl_from_source_IQualityControl(iface);
TRACE("filter %p, sender %p, type %#x, proportion %ld, late %s, timestamp %s.\n",
- filter, sender, q.Type, q.Proportion, debugstr_time(q.Late), debugstr_time(q.TimeStamp));
+ filter, sender, q.Type, q.Proportion, wine_dbgstr_reference_time(q.Late), wine_dbgstr_reference_time(q.TimeStamp));
EnterCriticalSection(&filter->filter.stream_cs);
if (q.Late > 0)
diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c
index 1abd4bdbcec..4f6ebb620e5 100644
--- a/dlls/quartz/dsoundrender.c
+++ b/dlls/quartz/dsoundrender.c
@@ -182,7 +182,7 @@ static HRESULT DSoundRender_GetWritePos(struct dsound_render *This,
*ret_writepos = writepos;
} else if (delta_t < 0) {
REFERENCE_TIME past, min_writepos_t;
- WARN("Delta too big %s/%s, overwriting old data or even skipping\n", debugstr_time(delta_t), debugstr_time(max_lag));
+ WARN("Delta too big %s/%s, overwriting old data or even skipping\n", wine_dbgstr_reference_time(delta_t), wine_dbgstr_reference_time(max_lag));
if (min_writepos >= playpos)
min_writepos_t = cur + time_from_pos(This, min_writepos - playpos);
else
@@ -200,7 +200,7 @@ static HRESULT DSoundRender_GetWritePos(struct dsound_render *This,
}
} else /* delta_t > 0 */ {
DWORD aheadbytes;
- WARN("Delta too big %s/%s, too far ahead\n", debugstr_time(delta_t), debugstr_time(max_lag));
+ WARN("Delta too big %s/%s, too far ahead\n", wine_dbgstr_reference_time(delta_t), wine_dbgstr_reference_time(max_lag));
aheadbytes = pos_from_time(This, delta_t);
WARN("Advancing %lu bytes.\n", aheadbytes);
if (delta_t >= DSoundRenderer_Max_Fill)
@@ -213,8 +213,8 @@ end:
else
*pfree = This->buf_size + playpos - *ret_writepos;
if (time_from_pos(This, This->buf_size - *pfree) >= DSoundRenderer_Max_Fill) {
- TRACE("Blocked: too full %s / %s\n", debugstr_time(time_from_pos(This, This->buf_size - *pfree)),
- debugstr_time(DSoundRenderer_Max_Fill));
+ TRACE("Blocked: too full %s / %s\n", wine_dbgstr_reference_time(time_from_pos(This, This->buf_size - *pfree)),
+ wine_dbgstr_reference_time(DSoundRenderer_Max_Fill));
return S_FALSE;
}
return S_OK;
@@ -962,7 +962,7 @@ static HRESULT WINAPI dsound_render_qc_Notify(IQualityControl *iface,
struct dsound_render *filter = impl_from_IQualityControl(iface);
FIXME("filter %p, sender %p, type %#x, proportion %ld, late %s, timestamp %s, stub!\n",
- filter, sender, q.Type, q.Proportion, debugstr_time(q.Late), debugstr_time(q.TimeStamp));
+ filter, sender, q.Type, q.Proportion, wine_dbgstr_reference_time(q.Late), wine_dbgstr_reference_time(q.TimeStamp));
return E_NOTIMPL;
}
diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c
index 1849174cf97..867eab011d5 100644
--- a/dlls/quartz/filtergraph.c
+++ b/dlls/quartz/filtergraph.c
@@ -2249,7 +2249,7 @@ static HRESULT WINAPI MediaSeeking_GetDuration(IMediaSeeking *iface, LONGLONG *d
LeaveCriticalSection(&graph->cs);
TRACE("Returning hr %#lx, duration %s (%s seconds).\n", hr,
- wine_dbgstr_longlong(*duration), debugstr_time(*duration));
+ wine_dbgstr_longlong(*duration), wine_dbgstr_reference_time(*duration));
return hr;
}
@@ -2290,7 +2290,7 @@ static HRESULT WINAPI MediaSeeking_GetStopPosition(IMediaSeeking *iface, LONGLON
LeaveCriticalSection(&graph->cs);
- TRACE("Returning %s (%s seconds).\n", wine_dbgstr_longlong(*stop), debugstr_time(*stop));
+ TRACE("Returning %s (%s seconds).\n", wine_dbgstr_longlong(*stop), wine_dbgstr_reference_time(*stop));
return hr;
}
@@ -2320,7 +2320,7 @@ static HRESULT WINAPI MediaSeeking_GetCurrentPosition(IMediaSeeking *iface, LONG
LeaveCriticalSection(&graph->cs);
- TRACE("Returning %s (%s seconds).\n", wine_dbgstr_longlong(ret), debugstr_time(ret));
+ TRACE("Returning %s (%s seconds).\n", wine_dbgstr_longlong(ret), wine_dbgstr_reference_time(ret));
*current = ret;
return S_OK;
@@ -2361,10 +2361,10 @@ static HRESULT WINAPI MediaSeeking_SetPositions(IMediaSeeking *iface, LONGLONG *
stop_ptr ? wine_dbgstr_longlong(*stop_ptr): "<null>", stop_flags);
if (current_ptr)
TRACE("Setting current position to %s (%s seconds).\n",
- wine_dbgstr_longlong(*current_ptr), debugstr_time(*current_ptr));
+ wine_dbgstr_longlong(*current_ptr), wine_dbgstr_reference_time(*current_ptr));
if (stop_ptr)
TRACE("Setting stop position to %s (%s seconds).\n",
- wine_dbgstr_longlong(*stop_ptr), debugstr_time(*stop_ptr));
+ wine_dbgstr_longlong(*stop_ptr), wine_dbgstr_reference_time(*stop_ptr));
if ((current_flags & 0x7) != AM_SEEKING_AbsolutePositioning
&& (current_flags & 0x7) != AM_SEEKING_NoPositioning)
@@ -5093,7 +5093,7 @@ static HRESULT WINAPI MediaFilter_Run(IMediaFilter *iface, REFERENCE_TIME start)
struct filter_graph *graph = impl_from_IMediaFilter(iface);
HRESULT hr;
- TRACE("graph %p, start %s.\n", graph, debugstr_time(start));
+ TRACE("graph %p, start %s.\n", graph, wine_dbgstr_reference_time(start));
EnterCriticalSection(&graph->cs);
diff --git a/dlls/quartz/memallocator.c b/dlls/quartz/memallocator.c
index 87869b4d6b2..715f4b704e0 100644
--- a/dlls/quartz/memallocator.c
+++ b/dlls/quartz/memallocator.c
@@ -560,8 +560,8 @@ static HRESULT WINAPI StdMediaSample2_SetTime(IMediaSample2 *iface, REFERENCE_TI
{
StdMediaSample2 *sample = impl_from_IMediaSample2(iface);
- TRACE("sample %p, start %s, end %s.\n", sample, start ? debugstr_time(*start) : "(null)",
- end ? debugstr_time(*end) : "(null)");
+ TRACE("sample %p, start %s, end %s.\n", sample, start ? wine_dbgstr_reference_time(*start) : "(null)",
+ end ? wine_dbgstr_reference_time(*end) : "(null)");
if (start)
{
@@ -742,8 +742,8 @@ static HRESULT WINAPI StdMediaSample2_SetMediaTime(IMediaSample2 *iface, LONGLON
{
StdMediaSample2 *sample = impl_from_IMediaSample2(iface);
- TRACE("sample %p, start %s, end %s.\n", sample, start ? debugstr_time(*start) : "(null)",
- end ? debugstr_time(*end) : "(null)");
+ TRACE("sample %p, start %s, end %s.\n", sample, start ? wine_dbgstr_reference_time(*start) : "(null)",
+ end ? wine_dbgstr_reference_time(*end) : "(null)");
if (start)
{
diff --git a/dlls/quartz/quartz_private.h b/dlls/quartz/quartz_private.h
index c706d906a26..c68a65244a3 100644
--- a/dlls/quartz/quartz_private.h
+++ b/dlls/quartz/quartz_private.h
@@ -37,27 +37,6 @@
#include "wine/strmbase.h"
#include "wine/list.h"
-static inline const char *debugstr_time(REFERENCE_TIME time)
-{
- ULONGLONG abstime = time >= 0 ? time : -time;
- unsigned int i = 0, j = 0;
- char buffer[23], rev[23];
-
- while (abstime || i <= 8)
- {
- buffer[i++] = '0' + (abstime % 10);
- abstime /= 10;
- if (i == 7) buffer[i++] = '.';
- }
- if (time < 0) buffer[i++] = '-';
-
- while (i--) rev[j++] = buffer[i];
- while (rev[j-1] == '0' && rev[j-2] != '.') --j;
- rev[j] = 0;
-
- return wine_dbg_sprintf("%s", rev);
-}
-
/* see IAsyncReader::Request on MSDN for the explanation of this */
#define MEDIATIME_FROM_BYTES(x) ((LONGLONG)(x) * 10000000)
#define BYTES_FROM_MEDIATIME(time) ((time) / 10000000)
diff --git a/dlls/quartz/systemclock.c b/dlls/quartz/systemclock.c
index 729122fec46..9bdbd3e62eb 100644
--- a/dlls/quartz/systemclock.c
+++ b/dlls/quartz/systemclock.c
@@ -259,7 +259,7 @@ static HRESULT WINAPI SystemClockImpl_GetTime(IReferenceClock *iface, REFERENCE_
LeaveCriticalSection(&clock->cs);
- TRACE("clock %p, time %p, returning %s.\n", clock, time, debugstr_time(ret));
+ TRACE("clock %p, time %p, returning %s.\n", clock, time, wine_dbgstr_reference_time(ret));
return hr;
}
@@ -269,7 +269,7 @@ static HRESULT WINAPI SystemClockImpl_AdviseTime(IReferenceClock *iface,
struct system_clock *clock = impl_from_IReferenceClock(iface);
TRACE("clock %p, base %s, offset %s, event %#Ix, cookie %p.\n",
- clock, debugstr_time(base), debugstr_time(offset), event, cookie);
+ clock, wine_dbgstr_reference_time(base), wine_dbgstr_reference_time(offset), event, cookie);
if (base + offset <= 0)
return E_INVALIDARG;
@@ -283,7 +283,7 @@ static HRESULT WINAPI SystemClockImpl_AdvisePeriodic(IReferenceClock* iface,
struct system_clock *clock = impl_from_IReferenceClock(iface);
TRACE("clock %p, start %s, period %s, semaphore %#Ix, cookie %p.\n",
- clock, debugstr_time(start), debugstr_time(period), semaphore, cookie);
+ clock, wine_dbgstr_reference_time(start), wine_dbgstr_reference_time(period), semaphore, cookie);
if (start <= 0 || period <= 0)
return E_INVALIDARG;
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h
index 222bce3b2c7..7286688666d 100644
--- a/dlls/winegstreamer/gst_private.h
+++ b/dlls/winegstreamer/gst_private.h
@@ -41,27 +41,6 @@
bool array_reserve(void **elements, size_t *capacity, size_t count, size_t size) DECLSPEC_HIDDEN;
-static inline const char *debugstr_time(REFERENCE_TIME time)
-{
- ULONGLONG abstime = time >= 0 ? time : -time;
- unsigned int i = 0, j = 0;
- char buffer[23], rev[23];
-
- while (abstime || i <= 8)
- {
- buffer[i++] = '0' + (abstime % 10);
- abstime /= 10;
- if (i == 7) buffer[i++] = '.';
- }
- if (time < 0) buffer[i++] = '-';
-
- while (i--) rev[j++] = buffer[i];
- while (rev[j-1] == '0' && rev[j-2] != '.') --j;
- rev[j] = 0;
-
- return wine_dbg_sprintf("%s", rev);
-}
-
#define MEDIATIME_FROM_BYTES(x) ((LONGLONG)(x) * 10000000)
struct wg_parser *wg_parser_create(enum wg_parser_type type, bool unlimited_buffering) DECLSPEC_HIDDEN;
diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c
index 331bc9a888a..704e782554e 100644
--- a/dlls/winegstreamer/quartz_parser.c
+++ b/dlls/winegstreamer/quartz_parser.c
@@ -1298,8 +1298,8 @@ static HRESULT WINAPI GST_Seeking_SetPositions(IMediaSeeking *iface,
int i;
TRACE("pin %p, current %s, current_flags %#lx, stop %s, stop_flags %#lx.\n",
- pin, current ? debugstr_time(*current) : "<null>", current_flags,
- stop ? debugstr_time(*stop) : "<null>", stop_flags);
+ pin, current ? wine_dbgstr_reference_time(*current) : "<null>", current_flags,
+ stop ? wine_dbgstr_reference_time(*stop) : "<null>", stop_flags);
if (pin->pin.pin.filter->state == State_Stopped)
{
@@ -1419,7 +1419,7 @@ static HRESULT WINAPI GST_QualityControl_Notify(IQualityControl *iface, IBaseFil
TRACE("pin %p, sender %p, type %s, proportion %ld, late %s, timestamp %s.\n",
pin, sender, q.Type == Famine ? "Famine" : "Flood", q.Proportion,
- debugstr_time(q.Late), debugstr_time(q.TimeStamp));
+ wine_dbgstr_reference_time(q.Late), wine_dbgstr_reference_time(q.TimeStamp));
/* DirectShow filters sometimes pass negative timestamps (Audiosurf uses the
* current time instead of the time of the last buffer). GstClockTime is
diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c
index fc919ef2c49..41c335210b8 100644
--- a/dlls/winegstreamer/wm_asyncreader.c
+++ b/dlls/winegstreamer/wm_asyncreader.c
@@ -319,7 +319,7 @@ static HRESULT WINAPI WMReader_Start(IWMReader *iface,
static const DWORD zero;
TRACE("reader %p, start %s, duration %s, rate %.8e, context %p.\n",
- reader, debugstr_time(start), debugstr_time(duration), rate, context);
+ reader, wine_dbgstr_reference_time(start), wine_dbgstr_reference_time(duration), rate, context);
if (rate != 1.0f)
FIXME("Ignoring rate %.8e.\n", rate);
@@ -448,7 +448,7 @@ static HRESULT WINAPI WMReaderAdvanced_DeliverTime(IWMReaderAdvanced6 *iface, QW
{
struct async_reader *reader = impl_from_IWMReaderAdvanced6(iface);
- TRACE("reader %p, time %s.\n", reader, debugstr_time(time));
+ TRACE("reader %p, time %s.\n", reader, wine_dbgstr_reference_time(time));
EnterCriticalSection(&reader->stream_cs);
@@ -1492,7 +1492,7 @@ static HRESULT WINAPI refclock_AdviseTime(IReferenceClock *iface, REFERENCE_TIME
struct async_reader *reader = impl_from_IReferenceClock(iface);
FIXME("reader %p, basetime %s, streamtime %s, event %#Ix, cookie %p, stub!\n",
- reader, debugstr_time(basetime), debugstr_time(streamtime), event, cookie);
+ reader, wine_dbgstr_reference_time(basetime), wine_dbgstr_reference_time(streamtime), event, cookie);
return E_NOTIMPL;
}
@@ -1503,7 +1503,7 @@ static HRESULT WINAPI refclock_AdvisePeriodic(IReferenceClock *iface, REFERENCE_
struct async_reader *reader = impl_from_IReferenceClock(iface);
FIXME("reader %p, starttime %s, period %s, semaphore %#Ix, cookie %p, stub!\n",
- reader, debugstr_time(starttime), debugstr_time(period), semaphore, cookie);
+ reader, wine_dbgstr_reference_time(starttime), wine_dbgstr_reference_time(period), semaphore, cookie);
return E_NOTIMPL;
}
diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c
index d40afb66afd..4e14f03fb20 100644
--- a/dlls/winegstreamer/wm_reader.c
+++ b/dlls/winegstreamer/wm_reader.c
@@ -912,7 +912,7 @@ static HRESULT WINAPI profile_CreateNewStreamPrioritization(IWMProfile3 *iface,
static HRESULT WINAPI profile_GetExpectedPacketCount(IWMProfile3 *iface, QWORD duration, QWORD *count)
{
- FIXME("iface %p, duration %s, count %p, stub!\n", iface, debugstr_time(duration), count);
+ FIXME("iface %p, duration %s, count %p, stub!\n", iface, wine_dbgstr_reference_time(duration), count);
return E_NOTIMPL;
}
@@ -1029,7 +1029,7 @@ static HRESULT WINAPI header_info_GetAttributeByName(IWMHeaderInfo3 *iface, WORD
EnterCriticalSection(&reader->cs);
duration = wg_parser_stream_get_duration(wg_parser_get_stream(reader->wg_parser, 0));
LeaveCriticalSection(&reader->cs);
- TRACE("Returning duration %s.\n", debugstr_time(duration));
+ TRACE("Returning duration %s.\n", wine_dbgstr_reference_time(duration));
memcpy(value, &duration, sizeof(QWORD));
return S_OK;
}
@@ -1084,7 +1084,7 @@ static HRESULT WINAPI header_info_GetMarker(IWMHeaderInfo3 *iface,
static HRESULT WINAPI header_info_AddMarker(IWMHeaderInfo3 *iface, const WCHAR *name, QWORD time)
{
- FIXME("iface %p, name %s, time %s, stub!\n", iface, debugstr_w(name), debugstr_time(time));
+ FIXME("iface %p, name %s, time %s, stub!\n", iface, debugstr_w(name), wine_dbgstr_reference_time(time));
return E_NOTIMPL;
}
@@ -1112,7 +1112,7 @@ static HRESULT WINAPI header_info_AddScript(IWMHeaderInfo3 *iface,
const WCHAR *type, const WCHAR *command, QWORD time)
{
FIXME("iface %p, type %s, command %s, time %s, stub!\n",
- iface, debugstr_w(type), debugstr_w(command), debugstr_time(time));
+ iface, debugstr_w(type), debugstr_w(command), wine_dbgstr_reference_time(time));
return E_NOTIMPL;
}
diff --git a/include/wine/debug.h b/include/wine/debug.h
index 58f92754164..566fb185745 100644
--- a/include/wine/debug.h
+++ b/include/wine/debug.h
@@ -349,6 +349,27 @@ static inline const char *wine_dbgstr_longlong( ULONGLONG ll )
else return wine_dbg_sprintf( "%lx", (unsigned long)ll );
}
+static inline const char *wine_dbgstr_reference_time( LONGLONG time )
+{
+ ULONGLONG abstime = time >= 0 ? time : -time;
+ unsigned int i = 0, j = 0;
+ char buffer[23], rev[23];
+
+ while (abstime || i <= 8)
+ {
+ buffer[i++] = '0' + (abstime % 10);
+ abstime /= 10;
+ if (i == 7) buffer[i++] = '.';
+ }
+ if (time < 0) buffer[i++] = '-';
+
+ while (i--) rev[j++] = buffer[i];
+ while (rev[j-1] == '0' && rev[j-2] != '.') --j;
+ rev[j] = 0;
+
+ return wine_dbg_sprintf("%s", rev);
+}
+
#if defined(__oaidl_h__) && defined(V_VT)
static inline const char *wine_dbgstr_vt( VARTYPE vt )
diff --git a/libs/strmbase/filter.c b/libs/strmbase/filter.c
index 2cf874ac1f1..9b9e05223d0 100644
--- a/libs/strmbase/filter.c
+++ b/libs/strmbase/filter.c
@@ -347,7 +347,7 @@ static HRESULT WINAPI filter_Run(IBaseFilter *iface, REFERENCE_TIME start)
struct strmbase_filter *filter = impl_from_IBaseFilter(iface);
HRESULT hr = S_OK;
- TRACE("filter %p %s, start %s.\n", filter, debugstr_w(filter->name), debugstr_time(start));
+ TRACE("filter %p %s, start %s.\n", filter, debugstr_w(filter->name), wine_dbgstr_reference_time(start));
EnterCriticalSection(&filter->filter_cs);
diff --git a/libs/strmbase/mediatype.c b/libs/strmbase/mediatype.c
index 6f66999c390..e0618d06acb 100644
--- a/libs/strmbase/mediatype.c
+++ b/libs/strmbase/mediatype.c
@@ -109,7 +109,7 @@ void strmbase_dump_media_type(const AM_MEDIA_TYPE *mt)
if (!IsRectEmpty(&vih->rcTarget)) TRACE("target %s, ", wine_dbgstr_rect(&vih->rcTarget));
if (vih->dwBitRate) TRACE("bitrate %u, ", vih->dwBitRate);
if (vih->dwBitErrorRate) TRACE("error rate %u, ", vih->dwBitErrorRate);
- TRACE("%s sec/frame, ", debugstr_time(vih->AvgTimePerFrame));
+ TRACE("%s sec/frame, ", wine_dbgstr_reference_time(vih->AvgTimePerFrame));
TRACE("size %dx%d, %u planes, %u bpp, compression %s, image size %u",
vih->bmiHeader.biWidth, vih->bmiHeader.biHeight, vih->bmiHeader.biPlanes,
vih->bmiHeader.biBitCount, debugstr_fourcc(vih->bmiHeader.biCompression),
@@ -128,7 +128,7 @@ void strmbase_dump_media_type(const AM_MEDIA_TYPE *mt)
if (!IsRectEmpty(&vih->rcTarget)) TRACE("target %s, ", wine_dbgstr_rect(&vih->rcTarget));
if (vih->dwBitRate) TRACE("bitrate %u, ", vih->dwBitRate);
if (vih->dwBitErrorRate) TRACE("error rate %u, ", vih->dwBitErrorRate);
- TRACE("%s sec/frame, ", debugstr_time(vih->AvgTimePerFrame));
+ TRACE("%s sec/frame, ", wine_dbgstr_reference_time(vih->AvgTimePerFrame));
if (vih->dwInterlaceFlags) TRACE("interlace flags %#x, ", vih->dwInterlaceFlags);
if (vih->dwCopyProtectFlags) TRACE("copy-protection flags %#x, ", vih->dwCopyProtectFlags);
TRACE("aspect ratio %u/%u, ", vih->dwPictAspectRatioX, vih->dwPictAspectRatioY);
diff --git a/libs/strmbase/pin.c b/libs/strmbase/pin.c
index 36b3fdf1425..cb958099d38 100644
--- a/libs/strmbase/pin.c
+++ b/libs/strmbase/pin.c
@@ -650,7 +650,7 @@ static HRESULT WINAPI source_NewSegment(IPin * iface, REFERENCE_TIME start, REFE
struct strmbase_source *pin = impl_source_from_IPin(iface);
TRACE("pin %p %s:%s, start %s, stop %s, rate %.16e.\n", pin, debugstr_w(pin->pin.filter->name),
- debugstr_w(pin->pin.name), debugstr_time(start), debugstr_time(stop), rate);
+ debugstr_w(pin->pin.name), wine_dbgstr_reference_time(start), wine_dbgstr_reference_time(stop), rate);
return S_OK;
}
@@ -1019,7 +1019,7 @@ static HRESULT WINAPI sink_NewSegment(IPin *iface, REFERENCE_TIME start, REFEREN
newsegmentargs args;
TRACE("pin %p %s:%s, start %s, stop %s, rate %.16e.\n", pin, debugstr_w(pin->pin.filter->name),
- debugstr_w(pin->pin.name), debugstr_time(start), debugstr_time(stop), rate);
+ debugstr_w(pin->pin.name), wine_dbgstr_reference_time(start), wine_dbgstr_reference_time(stop), rate);
if (pin->pFuncsTable->sink_new_segment)
return pin->pFuncsTable->sink_new_segment(pin, start, stop, rate);
diff --git a/libs/strmbase/renderer.c b/libs/strmbase/renderer.c
index da257555a19..70e3c78207a 100644
--- a/libs/strmbase/renderer.c
+++ b/libs/strmbase/renderer.c
@@ -107,11 +107,11 @@ static void perform_qos(struct strmbase_renderer *filter,
}
TRACE("start %s, entered %s, left %s, pt %s, duration %s, jitter %s.\n",
- debugstr_time(start), debugstr_time(entered), debugstr_time(left),
- debugstr_time(pt), debugstr_time(duration), debugstr_time(jitter));
+ wine_dbgstr_reference_time(start), wine_dbgstr_reference_time(entered), wine_dbgstr_reference_time(left),
+ wine_dbgstr_reference_time(pt), wine_dbgstr_reference_time(duration), wine_dbgstr_reference_time(jitter));
TRACE("average duration %s, average pt %s, average rate %.16e.\n",
- debugstr_time(filter->avg_duration), debugstr_time(filter->avg_pt), filter->avg_rate);
+ wine_dbgstr_reference_time(filter->avg_duration), wine_dbgstr_reference_time(filter->avg_pt), filter->avg_rate);
/* Collect running averages. For first observations, we copy the values. */
if (filter->avg_duration < 0)
@@ -527,7 +527,7 @@ static HRESULT WINAPI quality_control_Notify(IQualityControl *iface, IBaseFilter
HRESULT hr = S_FALSE;
TRACE("filter %p, sender %p, type %#x, proportion %u, late %s, timestamp %s.\n",
- filter, sender, q.Type, q.Proportion, debugstr_time(q.Late), debugstr_time(q.TimeStamp));
+ filter, sender, q.Type, q.Proportion, wine_dbgstr_reference_time(q.Late), wine_dbgstr_reference_time(q.TimeStamp));
if (filter->qc_sink)
return IQualityControl_Notify(filter->qc_sink, &filter->filter.IBaseFilter_iface, q);
diff --git a/libs/strmbase/strmbase_private.h b/libs/strmbase/strmbase_private.h
index 9ac0b24bb1a..ad9da316c2c 100644
--- a/libs/strmbase/strmbase_private.h
+++ b/libs/strmbase/strmbase_private.h
@@ -32,25 +32,4 @@
#include "wine/list.h"
#include "wine/strmbase.h"
-static inline const char *debugstr_time(REFERENCE_TIME time)
-{
- ULONGLONG abstime = time >= 0 ? time : -time;
- unsigned int i = 0, j = 0;
- char buffer[23], rev[23];
-
- while (abstime || i <= 8)
- {
- buffer[i++] = '0' + (abstime % 10);
- abstime /= 10;
- if (i == 7) buffer[i++] = '.';
- }
- if (time < 0) buffer[i++] = '-';
-
- while (i--) rev[j++] = buffer[i];
- while (rev[j-1] == '0' && rev[j-2] != '.') --j;
- rev[j] = 0;
-
- return wine_dbg_sprintf("%s", rev);
-}
-
#endif /* __WINE_STRMBASE_PRIVATE_H */
--
2.35.1
1
0
07 Feb '22
From: Zebediah Figura <zfigura(a)codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
v4: Modify "use_mt" instead of run_queued_tests().
This supersedes patch 225752.
dlls/dxgi/tests/dxgi.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/dlls/dxgi/tests/dxgi.c b/dlls/dxgi/tests/dxgi.c
index a83964d75233..f70d849aebc9 100644
--- a/dlls/dxgi/tests/dxgi.c
+++ b/dlls/dxgi/tests/dxgi.c
@@ -7595,6 +7595,11 @@ START_TEST(dxgi)
ok(EnumDisplaySettingsW(NULL, ENUM_REGISTRY_SETTINGS, ®istry_mode), "Failed to get display mode.\n");
use_mt = !getenv("WINETEST_NO_MT_D3D");
+ /* Some host drivers (MacOS, Mesa radeonsi) never unmap memory even when
+ * requested. When using the chunk allocator, running the tests with more
+ * than one thread can exceed the 32-bit virtual address space. */
+ if (sizeof(void *) == 4 && !strcmp(winetest_platform, "wine"))
+ use_mt = FALSE;
argc = winetest_get_mainargs(&argv);
for (i = 2; i < argc; ++i)
--
2.30.2
2
1
07 Feb '22
From: Zebediah Figura <zfigura(a)codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
v4: Modify "use_mt" instead of run_queued_tests().
This supersedes patch 225753.
dlls/d3d11/tests/d3d11.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index 93f0aa896e8f..52c8816b689e 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -34055,6 +34055,11 @@ START_TEST(d3d11)
char **argv;
use_mt = !getenv("WINETEST_NO_MT_D3D");
+ /* Some host drivers (MacOS, Mesa radeonsi) never unmap memory even when
+ * requested. When using the chunk allocator, running the tests with more
+ * than one thread can exceed the 32-bit virtual address space. */
+ if (sizeof(void *) == 4 && !strcmp(winetest_platform, "wine"))
+ use_mt = FALSE;
argc = winetest_get_mainargs(&argv);
for (i = 2; i < argc; ++i)
--
2.30.2
2
1
[PATCH vkd3d 2/2] configure: Don't require pthread for Mingw builds.
by Alexandre Julliard 07 Feb '22
by Alexandre Julliard 07 Feb '22
07 Feb '22
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
---
configure.ac | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/configure.ac b/configure.ac
index d296dfd4bc6d..45220f840bfb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -69,11 +69,10 @@ VKD3D_CHECK_MINGW32_PROG([CROSSCC32], [CROSSTARGET32], [no])
VKD3D_CHECK_MINGW64_PROG([CROSSCC64], [CROSSTARGET64], [no])
dnl Check for headers
-AC_CHECK_HEADERS([dlfcn.h pthread.h \
+AC_CHECK_HEADERS([dlfcn.h \
vulkan/vulkan.h \
vulkan/spirv.h vulkan/GLSL.std.450.h \
spirv/unified1/spirv.h spirv/unified1/GLSL.std.450.h])
-AS_IF([test "x$ac_cv_header_pthread_h" != "xyes"], [AC_MSG_ERROR([pthread.h not found.])])
AS_IF([test "x$ac_cv_header_vulkan_vulkan_h" != "xyes"], [AC_MSG_ERROR([vulkan.h not found.])])
AS_IF([test "x$ac_cv_header_spirv_unified1_spirv_h" != "xyes" \
-a "x$ac_cv_header_vulkan_spirv_h" != "xyes"],
@@ -103,8 +102,15 @@ AC_CHECK_LIB([dl], [dlopen],
[DL_LIBS="-ldl"],
[AS_IF([test "$ac_cv_header_dlfnc_h" = "xyes"], [AC_MSG_ERROR([libdl not found.])])])
-AC_ARG_VAR([PTHREAD_LIBS], [linker flags for pthreads])
-VKD3D_CHECK_PTHREAD
+case $host_os in
+ mingw32*) ;;
+ *) AC_CHECK_HEADERS([pthread.h])
+ AS_IF([test "x$ac_cv_header_pthread_h" != "xyes"], [AC_MSG_ERROR([pthread.h not found.])])
+ AC_ARG_VAR([PTHREAD_LIBS], [linker flags for pthreads])
+ VKD3D_CHECK_PTHREAD
+ VKD3D_CHECK_PTHREAD_SETNAME_NP
+ ;;
+esac
AC_ARG_VAR([VULKAN_LIBS], [linker flags for the Vulkan library])
VKD3D_CHECK_VULKAN
@@ -132,8 +138,6 @@ VKD3D_CHECK_FUNC([HAVE_BUILTIN_ADD_OVERFLOW], [__builtin_add_overflow], [__built
VKD3D_CHECK_FUNC([HAVE_SYNC_ADD_AND_FETCH], [__sync_add_and_fetch], [__sync_add_and_fetch((int *)0, 0)])
VKD3D_CHECK_FUNC([HAVE_SYNC_SUB_AND_FETCH], [__sync_sub_and_fetch], [__sync_sub_and_fetch((int *)0, 0)])
-VKD3D_CHECK_PTHREAD_SETNAME_NP
-
dnl Makefiles
AS_IF([test "x$enable_demos" = "xyes" -a "x$HAVE_XCB" != "xyes"],
[AC_MSG_ERROR([libxcb is required for demos.])])
--
2.34.1
3
2
[PATCH vkd3d 1/2] vkd3d: Add a create thread implementation for Windows.
by Alexandre Julliard 07 Feb '22
by Alexandre Julliard 07 Feb '22
07 Feb '22
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
---
libs/vkd3d/device.c | 42 ++++++++++++++++++++++++++++++++++++++
libs/vkd3d/vkd3d_private.h | 14 +++++++++----
2 files changed, 52 insertions(+), 4 deletions(-)
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index fe90eb37ef00..3360fd6eeeb8 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -4037,6 +4037,23 @@ void d3d12_device_mark_as_removed(struct d3d12_device *device, HRESULT reason,
device->removed_reason = reason;
}
+
+#ifdef _WIN32
+struct thread_data
+{
+ PFN_vkd3d_thread main_pfn;
+ void *data;
+};
+
+static DWORD WINAPI call_thread_main(void *data)
+{
+ struct thread_data *thread_data = data;
+ thread_data->main_pfn(thread_data->data);
+ vkd3d_free(thread_data);
+ return 0;
+}
+#endif
+
HRESULT vkd3d_create_thread(struct vkd3d_instance *instance,
PFN_vkd3d_thread thread_main, void *data, union vkd3d_thread_handle *thread)
{
@@ -4053,11 +4070,27 @@ HRESULT vkd3d_create_thread(struct vkd3d_instance *instance,
}
else
{
+#ifdef _WIN32
+ struct thread_data *thread_data;
+
+ if (!(thread_data = vkd3d_malloc(sizeof(*thread_data))))
+ return E_OUTOFMEMORY;
+
+ thread_data->main_pfn = thread_main;
+ thread_data->data = data;
+ if (!(thread->handle = CreateThread(NULL, 0, call_thread_main, thread_data, 0, NULL)))
+ {
+ ERR("Failed to create thread, error %d.\n", GetLastError());
+ vkd3d_free(thread_data);
+ hr = E_FAIL;
+ }
+#else
if ((rc = pthread_create(&thread->pthread, NULL, thread_main, data)))
{
ERR("Failed to create thread, error %d.\n", rc);
hr = hresult_from_errno(rc);
}
+#endif
}
return hr;
@@ -4075,11 +4108,20 @@ HRESULT vkd3d_join_thread(struct vkd3d_instance *instance, union vkd3d_thread_ha
}
else
{
+#ifdef _WIN32
+ if ((rc = WaitForSingleObject(thread->handle, INFINITE)) != WAIT_OBJECT_0)
+ {
+ ERR("Failed to wait for thread, ret %#x.\n", rc);
+ hr = E_FAIL;
+ }
+ CloseHandle(thread->handle);
+#else
if ((rc = pthread_join(thread->pthread, NULL)))
{
ERR("Failed to join thread, error %d.\n", rc);
hr = hresult_from_errno(rc);
}
+#endif
}
return hr;
diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h
index ece111325e77..67989c11285a 100644
--- a/libs/vkd3d/vkd3d_private.h
+++ b/libs/vkd3d/vkd3d_private.h
@@ -40,7 +40,6 @@
#include <assert.h>
#include <inttypes.h>
#include <limits.h>
-#include <pthread.h>
#include <stdbool.h>
#define VK_CALL(f) (vk_procs->f)
@@ -169,14 +168,13 @@ struct vkd3d_instance
LONG refcount;
};
+#ifdef _WIN32
+
union vkd3d_thread_handle
{
- pthread_t pthread;
void *handle;
};
-#ifdef _WIN32
-
struct vkd3d_mutex
{
CRITICAL_SECTION lock;
@@ -241,6 +239,14 @@ static inline int vkd3d_cond_destroy(struct vkd3d_cond *cond)
#else /* _WIN32 */
+#include <pthread.h>
+
+union vkd3d_thread_handle
+{
+ pthread_t pthread;
+ void *handle;
+};
+
struct vkd3d_mutex
{
pthread_mutex_t lock;
--
2.34.1
2
1
[PATCH vkd3d 1/5] vkd3d: Pass shader extension info to all graphics stages.
by Conor McCarthy 07 Feb '22
by Conor McCarthy 07 Feb '22
07 Feb '22
Signed-off-by: Conor McCarthy <cmccarthy(a)codeweavers.com>
---
libs/vkd3d/state.c | 25 ++++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)
diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c
index fa4de634..a7a878ca 100644
--- a/libs/vkd3d/state.c
+++ b/libs/vkd3d/state.c
@@ -2515,13 +2515,14 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s
VkVertexInputBindingDivisorDescriptionEXT *binding_divisor;
const struct vkd3d_vulkan_info *vk_info = &device->vk_info;
uint32_t instance_divisors[D3D12_VS_INPUT_REGISTER_COUNT];
+ struct vkd3d_shader_spirv_target_info *stage_target_info;
uint32_t aligned_offsets[D3D12_VS_INPUT_REGISTER_COUNT];
+ struct vkd3d_shader_descriptor_offset_info offset_info;
struct vkd3d_shader_parameter ps_shader_parameters[1];
struct vkd3d_shader_transform_feedback_info xfb_info;
struct vkd3d_shader_spirv_target_info ps_target_info;
struct vkd3d_shader_interface_info shader_interface;
- struct vkd3d_shader_descriptor_offset_info offset_info;
- struct vkd3d_shader_spirv_target_info *target_info;
+ struct vkd3d_shader_spirv_target_info target_info;
const struct d3d12_root_signature *root_signature;
struct vkd3d_shader_signature input_signature;
bool have_attachment, is_dsv_format_unknown;
@@ -2726,6 +2727,12 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s
}
}
+ memset(&target_info, 0, sizeof(target_info));
+ target_info.type = VKD3D_SHADER_STRUCTURE_TYPE_SPIRV_TARGET_INFO;
+ target_info.environment = VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_0;
+ target_info.extensions = vk_info->shader_extensions;
+ target_info.extension_count = vk_info->shader_extension_count;
+
graphics->xfb_enabled = false;
if (so_desc->NumEntries)
{
@@ -2778,7 +2785,6 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s
offset_info.descriptor_table_count = 0;
offset_info.binding_offsets = root_signature->descriptor_offsets;
offset_info.uav_counter_offsets = NULL;
- vkd3d_prepend_struct(&shader_interface, &offset_info);
}
for (i = 0; i < ARRAY_SIZE(shader_stages); ++i)
@@ -2810,7 +2816,7 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s
shader_interface.uav_counters = NULL;
shader_interface.uav_counter_count = 0;
- target_info = NULL;
+ stage_target_info = &target_info;
switch (shader_stages[i].stage)
{
case VK_SHADER_STAGE_VERTEX_BIT:
@@ -2837,7 +2843,7 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s
case VK_SHADER_STAGE_FRAGMENT_BIT:
shader_interface.uav_counters = state->uav_counters.bindings;
shader_interface.uav_counter_count = state->uav_counters.binding_count;
- target_info = &ps_target_info;
+ stage_target_info = &ps_target_info;
break;
default:
@@ -2846,10 +2852,15 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s
}
shader_interface.next = NULL;
+ xfb_info.next = NULL;
+ ps_target_info.next = NULL;
+ target_info.next = NULL;
+ offset_info.next = NULL;
if (shader_stages[i].stage == xfb_stage)
vkd3d_prepend_struct(&shader_interface, &xfb_info);
- if (target_info)
- vkd3d_prepend_struct(&shader_interface, target_info);
+ vkd3d_prepend_struct(&shader_interface, stage_target_info);
+ if (root_signature->descriptor_offsets)
+ vkd3d_prepend_struct(&shader_interface, &offset_info);
if (FAILED(hr = create_shader_stage(device, &graphics->stages[graphics->stage_count],
shader_stages[i].stage, b, &shader_interface)))
--
2.34.1
2
7