Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
August 2019
- 66 participants
- 1339 messages
Re: [PATCH 1/4] msvcrt/tests: Restore the multibyte codepage after the tests.
by Akihiro Sagawa
On Thu, 29 Aug 2019 17:05:37 +0200, Piotr Caban wrote:
> Hi Akihiro,
>
> It looks like you're working around a bug in setlocale implementation.
> Is mbcp ever changed on Windows during this tests (it's not on testbot)?
> It's better to add a test for that and fix the implementation.
Hi Piotr,
I put several traces in the test. Could you take a look this test result?
https://testbot.winehq.org/JobDetails.pl?Key=56064&f208=exe32.report#k208
The test ran on Windows 7 in Japanese codepage. Yes, mbcp is changed
from 932 to 0 between L2716 (at the beginning of test_wctob function)
and L2746 (at the end of the function).
setlocale() doesn't update mbcp. This is msvcrt feature. See L380 and
L384. Before L380, mbcp is 936 by _setmbcp() at L257. If setlocale() at
L380 affects mbcp, _mbccpy() at L384 copies the whole string because
it's neutral "C" locale. But, it copies only two bytes because the next
byte of the string is an invalid multibyte sequence. In other words,
mbcp is still in effect after setlocale().
The above test (L384) passes in native and Wine. So, Wine's setlocale()
implementation has no problems at this point.
Thanks for reviewing,
Akihiro Sagawa
Aug. 31, 2019
Re: [PATCH] dnsapi: Add DnsGetCacheDataTable stub
by Francois Gouget
On Fri, 30 Aug 2019, Rémi Bernon wrote:
> On 8/30/19 3:03 PM, Marvin wrote:
> > Hi,
> >
> > While running your changed tests, I think I found new failures.
> > Being a bot and all I'm not very good at pattern recognition, so I might be
> > wrong, but could you please double-check?
> >
> > Full results can be found at:
> > https://testbot.winehq.org/JobDetails.pl?Key=56052
> >
> > Your paranoid android.
> >
> >
> > === build (build log) ===
> >
> > Task errors:
> > BotError: The VM is not powered on
> >
>
> I did a successful run with the same patch here:
> https://testbot.winehq.org/JobDetails.pl?Key=56051
Yes, here's what happened:
* When it has nothing to do the TestBot picks some VMs that it starts up
in advance in the hope they will be needed by the next job.
* Because the build VM is used to provide the Windows binaries for
testing on Windows it's needed by almost every job. So its given a
high priority and ends up being prepared in advance and thus is
recorded by the TestBot as being in the idle state.
* But then there was a power outage so all the VMs got powered off.
* But the TestBot server is on a separate location and was not powered
off so it was not aware that the VMs got powered off. The thing is
these days the Engine never uses libvirt because these calls are
blocking which means if it tries to communicate with a dead VM host of
one where libvirt is hosed, these calls can block for a long time (up
to 10 minutes), which would block the Engine for all that time.
Instead it assumes the information it has in its database about the VM
is accurate and forks a process whenever it needs to perform an
operation on a VM, whether that's running a task, shutting it down or
reverting it.
* So it just scheduled the taks on the build VM as usual. But the
child process could not communicate with the VMs, checked its state
and complained that there was an error because "The VM is not
powered on".
What's wrong is that it marked the task as failed. A better recovery
mechanism would have been to either mark the VM as "dirty" or "offline"
and put the task back in the queued state so the TesBot tries running it
again.
The risk is that if the reason why the VM is not usable is not caused by
an external factor (such as here), the next round is likely to produce
the same result, leading the TestBot to try to run the same highest
priority task again and again on the one borked VM.
Finally the reason why you won't see that job as failed if you look a it
now is because I restarted it. The user who submitted a job that failed
due to a TestBot error gets a button to restart it. A user can only
restart his own jobs and I'm not sure it that would have been possible
in this case since the job came from a wine-devel email (but the
administrator gets to restart anyone's jobs ;-).
Anyway I'll see about tweaking the task scripts to avoid this situation
in the future.
--
Francois Gouget <fgouget(a)codeweavers.com>
Aug. 31, 2019
[PATCH 5/5] d3drm: Initialise the front and back clip distances in d3drm_viewport2_Init().
by Henri Verbeet
From: Jeff Smith <whydoubt(a)gmail.com>
Signed-off-by: Jeff Smith <whydoubt(a)gmail.com>
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
dlls/d3drm/tests/d3drm.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++-
dlls/d3drm/viewport.c | 20 ++++++++++++++++
2 files changed, 79 insertions(+), 1 deletion(-)
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index bb58350d5a1..0f9f9cd6ed6 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -1714,7 +1714,7 @@ static void test_Viewport(void)
{
IDirect3DRMFrame3 *frame3, *d3drm_frame3, *tmp_frame3;
IDirect3DRMFrame *frame, *d3drm_frame, *tmp_frame1;
- float field, left, top, right, bottom;
+ float field, left, top, right, bottom, front, back;
IDirectDrawClipper *clipper;
HRESULT hr;
IDirect3DRM *d3drm1;
@@ -2146,6 +2146,10 @@ static void test_Viewport(void)
ok(right == 10.0f, "Got unexpected right %.8e.\n", right);
ok(bottom == 10.0f, "Got unexpected bottom %.8e.\n", bottom);
ok(top == 10.0f, "Got unexpected top %.8e.\n", top);
+ front = IDirect3DRMViewport_GetFront(viewport);
+ ok(front == -1.0f, "Got unexpected front %.8e\n", front);
+ back = IDirect3DRMViewport_GetBack(viewport);
+ ok(back == -1.0f, "Got unexpected back %.8e\n", back);
hr = IDirect3DRMViewport_SetCamera(viewport, frame);
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
@@ -2153,6 +2157,10 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DRMViewport_SetPlane(viewport, -0.5f, 0.5f, -0.5f, 0.5f);
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport_SetFront(viewport, 1.0f);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport_SetBack(viewport, 100.0f);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
/* Test all failures together */
hr = IDirect3DRMViewport_Init(viewport, NULL, frame, rc.left, rc.top, rc.right, rc.bottom);
@@ -2224,6 +2232,10 @@ static void test_Viewport(void)
ok(right == 0.5f, "Got unexpected right %.8e.\n", right);
ok(bottom == -0.5f, "Got unexpected bottom %.8e.\n", bottom);
ok(top == 0.5f, "Got unexpected top %.8e.\n", top);
+ front = IDirect3DRMViewport_GetFront(viewport);
+ ok(front == 1.0f, "Got unexpected front %.8e.\n", front);
+ back = IDirect3DRMViewport_GetBack(viewport);
+ ok(back == 100.0f, "Got unexpected back %.8e.\n", back);
hr = IDirect3DRMViewport_SetField(viewport, 1.0f);
ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
@@ -2246,6 +2258,14 @@ static void test_Viewport(void)
ok(right == 3.0f, "Got unexpected right %.8e.\n", right);
ok(bottom == 2.0f, "Got unexpected bottom %.8e.\n", bottom);
ok(top == 0.0f, "Got unexpected top %.8e.\n", top);
+ hr = IDirect3DRMViewport_SetFront(viewport, 2.0f);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ front = IDirect3DRMViewport_GetFront(viewport);
+ ok(front == 2.0f, "Got unexpected front %.8e.\n", front);
+ hr = IDirect3DRMViewport_SetBack(viewport, 200.0f);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ back = IDirect3DRMViewport_GetBack(viewport);
+ ok(back == 200.0f, "Got unexpected back %.8e.\n", back);
hr = IDirect3DRMViewport_Init(viewport, device1, frame, rc.left, rc.top, rc.right, rc.bottom);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
@@ -2259,6 +2279,15 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
hr = IDirect3DRMViewport_SetField(viewport, -1.0f);
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
+ hr = IDirect3DRMViewport_SetFront(viewport, 0.0f);
+ ok(hr == D3DRMERR_BADVALUE, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport_SetFront(viewport, -1.0f);
+ ok(hr == D3DRMERR_BADVALUE, "Got unexpected hr %#x.\n", hr);
+ front = IDirect3DRMViewport_GetFront(viewport);
+ hr = IDirect3DRMViewport_SetBack(viewport, front);
+ ok(hr == D3DRMERR_BADVALUE, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport_SetBack(viewport, front / 2.0f);
+ ok(hr == D3DRMERR_BADVALUE, "Got unexpected hr %#x.\n", hr);
IDirect3DRMViewport_Release(viewport);
ref4 = get_refcount((IUnknown *)d3drm1);
@@ -2300,6 +2329,10 @@ static void test_Viewport(void)
ok(right == 10.0f, "Got unexpected right %.8e.\n", right);
ok(bottom == 10.0f, "Got unexpected bottom %.8e.\n", bottom);
ok(top == 10.0f, "Got unexpected top %.8e.\n", top);
+ front = IDirect3DRMViewport2_GetFront(viewport2);
+ ok(front == -1.0f, "Got unexpected front %.8e\n", front);
+ back = IDirect3DRMViewport2_GetBack(viewport2);
+ ok(back == -1.0f, "Got unexpected back %.8e\n", back);
hr = IDirect3DRMViewport2_SetCamera(viewport2, frame3);
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
@@ -2307,6 +2340,10 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DRMViewport2_SetPlane(viewport2, -0.5f, 0.5f, -0.5f, 0.5f);
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport2_SetFront(viewport2, 1.0f);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport2_SetBack(viewport2, 100.0f);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DRMViewport2_Init(viewport2, NULL, frame3, rc.left, rc.top, rc.right, rc.bottom);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
@@ -2371,6 +2408,10 @@ static void test_Viewport(void)
ok(right == 0.5f, "Got unexpected right %.8e.\n", right);
ok(bottom == -0.5f, "Got unexpected bottom %.8e.\n", bottom);
ok(top == 0.5f, "Got unexpected top %.8e.\n", top);
+ front = IDirect3DRMViewport2_GetFront(viewport2);
+ ok(front == 1.0f, "Got unexpected front %.8e.\n", front);
+ back = IDirect3DRMViewport2_GetBack(viewport2);
+ ok(back == 100.0f, "Got unexpected back %.8e.\n", back);
hr = IDirect3DRMViewport2_SetField(viewport2, 1.0f);
ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
@@ -2393,6 +2434,14 @@ static void test_Viewport(void)
ok(right == 3.0f, "Got unexpected right %.8e.\n", right);
ok(bottom == 2.0f, "Got unexpected bottom %.8e.\n", bottom);
ok(top == 0.0f, "Got unexpected top %.8e.\n", top);
+ hr = IDirect3DRMViewport2_SetFront(viewport2, 2.0f);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ front = IDirect3DRMViewport2_GetFront(viewport2);
+ ok(front == 2.0f, "Got unexpected front %.8e.\n", front);
+ hr = IDirect3DRMViewport2_SetBack(viewport2, 200.0f);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ back = IDirect3DRMViewport2_GetBack(viewport2);
+ ok(back == 200.0f, "Got unexpected back %.8e.\n", back);
hr = IDirect3DRMViewport2_Init(viewport2, device3, frame3, rc.left, rc.top, rc.right, rc.bottom);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
@@ -2406,6 +2455,15 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
hr = IDirect3DRMViewport2_SetField(viewport2, -1.0f);
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
+ hr = IDirect3DRMViewport2_SetFront(viewport2, 0.0f);
+ ok(hr == D3DRMERR_BADVALUE, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport2_SetFront(viewport2, -1.0f);
+ ok(hr == D3DRMERR_BADVALUE, "Got unexpected hr %#x.\n", hr);
+ front = IDirect3DRMViewport2_GetFront(viewport2);
+ hr = IDirect3DRMViewport2_SetBack(viewport2, front);
+ ok(hr == D3DRMERR_BADVALUE, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport2_SetBack(viewport2, front / 2.0f);
+ ok(hr == D3DRMERR_BADVALUE, "Got unexpected hr %#x.\n", hr);
IDirect3DRMViewport2_Release(viewport2);
ref4 = get_refcount((IUnknown *)d3drm1);
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
index 2c923b14c51..8e959d5f37e 100644
--- a/dlls/d3drm/viewport.c
+++ b/dlls/d3drm/viewport.c
@@ -373,6 +373,8 @@ static HRESULT WINAPI d3drm_viewport2_Init(IDirect3DRMViewport2 *iface, IDirect3
viewport->clip.top = 0.5f;
viewport->clip.right = 0.5f;
viewport->clip.bottom = -0.5f;
+ viewport->clip.front = 1.0f;
+ viewport->clip.back = 100.0f;
cleanup:
@@ -488,6 +490,12 @@ static HRESULT WINAPI d3drm_viewport2_SetFront(IDirect3DRMViewport2 *iface, D3DV
TRACE("iface %p, front %.8e.\n", iface, front);
+ if (!viewport->d3d_viewport)
+ return D3DRMERR_BADOBJECT;
+
+ if (front <= 0.0f)
+ return D3DRMERR_BADVALUE;
+
viewport->clip.front = front;
return D3DRM_OK;
@@ -508,6 +516,12 @@ static HRESULT WINAPI d3drm_viewport2_SetBack(IDirect3DRMViewport2 *iface, D3DVA
TRACE("iface %p, back %.8e.\n", iface, back);
+ if (!viewport->d3d_viewport)
+ return D3DRMERR_BADOBJECT;
+
+ if (back <= viewport->clip.front)
+ return D3DRMERR_BADVALUE;
+
viewport->clip.back = back;
return D3DRM_OK;
@@ -919,6 +933,9 @@ static D3DVALUE WINAPI d3drm_viewport2_GetBack(IDirect3DRMViewport2 *iface)
TRACE("iface %p.\n", iface);
+ if (!viewport->d3d_viewport)
+ return -1.0f;
+
return viewport->clip.back;
}
@@ -937,6 +954,9 @@ static D3DVALUE WINAPI d3drm_viewport2_GetFront(IDirect3DRMViewport2 *iface)
TRACE("iface %p.\n", iface);
+ if (!viewport->d3d_viewport)
+ return -1.0f;
+
return viewport->clip.front;
}
--
2.11.0
Aug. 30, 2019
[PATCH 4/5] d3drm: Implement d3drm_viewport2_SetPlane().
by Henri Verbeet
From: Jeff Smith <whydoubt(a)gmail.com>
Signed-off-by: Jeff Smith <whydoubt(a)gmail.com>
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
dlls/d3drm/tests/d3drm.c | 26 ++++++++++++++++++++++++++
dlls/d3drm/viewport.c | 20 ++++++++++++++++----
2 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 32938878dca..bb58350d5a1 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -2151,6 +2151,8 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DRMViewport_SetField(viewport, 0.5f);
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport_SetPlane(viewport, -0.5f, 0.5f, -0.5f, 0.5f);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
/* Test all failures together */
hr = IDirect3DRMViewport_Init(viewport, NULL, frame, rc.left, rc.top, rc.right, rc.bottom);
@@ -2234,6 +2236,17 @@ static void test_Viewport(void)
ok(bottom == -1.0f, "Got unexpected bottom %.8e.\n", bottom);
ok(top == 1.0f, "Got unexpected top %.8e.\n", top);
+ hr = IDirect3DRMViewport_SetPlane(viewport, 5.0f, 3.0f, 2.0f, 0.0f);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ field = IDirect3DRMViewport_GetField(viewport);
+ ok(field == -1.0f, "Got unexpected field %.8e.\n", field);
+ hr = IDirect3DRMViewport_GetPlane(viewport, &left, &right, &bottom, &top);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ ok(left == 5.0f, "Got unexpected left %.8e.\n", left);
+ ok(right == 3.0f, "Got unexpected right %.8e.\n", right);
+ ok(bottom == 2.0f, "Got unexpected bottom %.8e.\n", bottom);
+ ok(top == 0.0f, "Got unexpected top %.8e.\n", top);
+
hr = IDirect3DRMViewport_Init(viewport, device1, frame, rc.left, rc.top, rc.right, rc.bottom);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
hr = IDirect3DRMViewport_GetDevice(viewport, NULL);
@@ -2292,6 +2305,8 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DRMViewport2_SetField(viewport2, 0.5f);
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport2_SetPlane(viewport2, -0.5f, 0.5f, -0.5f, 0.5f);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DRMViewport2_Init(viewport2, NULL, frame3, rc.left, rc.top, rc.right, rc.bottom);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
@@ -2368,6 +2383,17 @@ static void test_Viewport(void)
ok(bottom == -1.0f, "Got unexpected bottom %.8e.\n", bottom);
ok(top == 1.0f, "Got unexpected top %.8e.\n", top);
+ hr = IDirect3DRMViewport2_SetPlane(viewport2, 5.0f, 3.0f, 2.0f, 0.0f);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ field = IDirect3DRMViewport2_GetField(viewport2);
+ ok(field == -1.0f, "Got unexpected field %.8e.\n", field);
+ hr = IDirect3DRMViewport2_GetPlane(viewport2, &left, &right, &bottom, &top);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ ok(left == 5.0f, "Got unexpected left %.8e.\n", left);
+ ok(right == 3.0f, "Got unexpected right %.8e.\n", right);
+ ok(bottom == 2.0f, "Got unexpected bottom %.8e.\n", bottom);
+ ok(top == 0.0f, "Got unexpected top %.8e.\n", top);
+
hr = IDirect3DRMViewport2_Init(viewport2, device3, frame3, rc.left, rc.top, rc.right, rc.bottom);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
hr = IDirect3DRMViewport2_GetDevice(viewport2, NULL);
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
index 97105994957..2c923b14c51 100644
--- a/dlls/d3drm/viewport.c
+++ b/dlls/d3drm/viewport.c
@@ -676,19 +676,31 @@ static HRESULT WINAPI d3drm_viewport1_ForceUpdate(IDirect3DRMViewport *iface,
static HRESULT WINAPI d3drm_viewport2_SetPlane(IDirect3DRMViewport2 *iface,
D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top)
{
- FIXME("iface %p, left %.8e, right %.8e, bottom %.8e, top %.8e stub!\n",
+ struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface);
+
+ TRACE("iface %p, left %.8e, right %.8e, bottom %.8e, top %.8e.\n",
iface, left, right, bottom, top);
- return E_NOTIMPL;
+ if (!viewport->d3d_viewport)
+ return D3DRMERR_BADOBJECT;
+
+ viewport->clip.left = left;
+ viewport->clip.right = right;
+ viewport->clip.bottom = bottom;
+ viewport->clip.top = top;
+
+ return D3DRM_OK;
}
static HRESULT WINAPI d3drm_viewport1_SetPlane(IDirect3DRMViewport *iface,
D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top)
{
- FIXME("iface %p, left %.8e, right %.8e, bottom %.8e, top %.8e stub!\n",
+ struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface);
+
+ TRACE("iface %p, left %.8e, right %.8e, bottom %.8e, top %.8e.\n",
iface, left, right, bottom, top);
- return E_NOTIMPL;
+ return d3drm_viewport2_SetPlane(&viewport->IDirect3DRMViewport2_iface, left, right, bottom, top);
}
static HRESULT WINAPI d3drm_viewport2_GetCamera(IDirect3DRMViewport2 *iface, IDirect3DRMFrame3 **camera)
--
2.11.0
Aug. 30, 2019
[PATCH 3/5] d3drm: Implement d3drm_viewport2_GetPlane().
by Henri Verbeet
From: Jeff Smith <whydoubt(a)gmail.com>
Signed-off-by: Jeff Smith <whydoubt(a)gmail.com>
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
dlls/d3drm/d3drm_private.h | 14 ++++++++---
dlls/d3drm/tests/d3drm.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++
dlls/d3drm/viewport.c | 47 ++++++++++++++++++++++++++--------
3 files changed, 111 insertions(+), 13 deletions(-)
diff --git a/dlls/d3drm/d3drm_private.h b/dlls/d3drm/d3drm_private.h
index d7db1edca30..b5d60e518f8 100644
--- a/dlls/d3drm/d3drm_private.h
+++ b/dlls/d3drm/d3drm_private.h
@@ -89,6 +89,16 @@ struct d3drm_frame
DWORD traversal_options;
};
+struct d3drm_box
+{
+ float left;
+ float top;
+ float right;
+ float bottom;
+ float front;
+ float back;
+};
+
struct d3drm_viewport
{
struct d3drm_object obj;
@@ -99,9 +109,7 @@ struct d3drm_viewport
IDirect3DViewport *d3d_viewport;
IDirect3DMaterial *material;
IDirect3DRM *d3drm;
- D3DVALUE back;
- D3DVALUE front;
- D3DVALUE field;
+ struct d3drm_box clip;
D3DRMPROJECTIONTYPE projection;
};
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 76d2dbe3949..32938878dca 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -1714,6 +1714,7 @@ static void test_Viewport(void)
{
IDirect3DRMFrame3 *frame3, *d3drm_frame3, *tmp_frame3;
IDirect3DRMFrame *frame, *d3drm_frame, *tmp_frame1;
+ float field, left, top, right, bottom;
IDirectDrawClipper *clipper;
HRESULT hr;
IDirect3DRM *d3drm1;
@@ -2136,9 +2137,20 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
hr = IDirect3DRMViewport_GetCamera(viewport, &d3drm_frame);
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+ field = IDirect3DRMViewport_GetField(viewport);
+ ok(field == -1.0f, "Got unexpected field %.8e.\n", field);
+ left = right = bottom = top = 10.0f;
+ hr = IDirect3DRMViewport_GetPlane(viewport, &left, &right, &bottom, &top);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+ ok(left == 10.0f, "Got unexpected left %.8e.\n", left);
+ ok(right == 10.0f, "Got unexpected right %.8e.\n", right);
+ ok(bottom == 10.0f, "Got unexpected bottom %.8e.\n", bottom);
+ ok(top == 10.0f, "Got unexpected top %.8e.\n", top);
hr = IDirect3DRMViewport_SetCamera(viewport, frame);
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport_SetField(viewport, 0.5f);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
/* Test all failures together */
hr = IDirect3DRMViewport_Init(viewport, NULL, frame, rc.left, rc.top, rc.right, rc.bottom);
@@ -2202,6 +2214,26 @@ static void test_Viewport(void)
ok(vp.dvMaxY == expected_val, "Expected dvMaxY = %f, got %f.\n", expected_val, vp.dvMaxY);
IDirect3DViewport_Release(d3d_viewport);
+ field = IDirect3DRMViewport_GetField(viewport);
+ ok(field == 0.5f, "Got unexpected field %.8e.\n", field);
+ hr = IDirect3DRMViewport_GetPlane(viewport, &left, &right, &bottom, &top);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ ok(left == -0.5f, "Got unexpected left %.8e.\n", left);
+ ok(right == 0.5f, "Got unexpected right %.8e.\n", right);
+ ok(bottom == -0.5f, "Got unexpected bottom %.8e.\n", bottom);
+ ok(top == 0.5f, "Got unexpected top %.8e.\n", top);
+
+ hr = IDirect3DRMViewport_SetField(viewport, 1.0f);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ field = IDirect3DRMViewport_GetField(viewport);
+ ok(field == 1.0f, "Got unexpected field %.8e.\n", field);
+ hr = IDirect3DRMViewport_GetPlane(viewport, &left, &right, &bottom, &top);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ ok(left == -1.0f, "Got unexpected left %.8e.\n", left);
+ ok(right == 1.0f, "Got unexpected right %.8e.\n", right);
+ ok(bottom == -1.0f, "Got unexpected bottom %.8e.\n", bottom);
+ ok(top == 1.0f, "Got unexpected top %.8e.\n", top);
+
hr = IDirect3DRMViewport_Init(viewport, device1, frame, rc.left, rc.top, rc.right, rc.bottom);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
hr = IDirect3DRMViewport_GetDevice(viewport, NULL);
@@ -2246,9 +2278,20 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
hr = IDirect3DRMViewport2_GetCamera(viewport2, &d3drm_frame3);
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+ field = IDirect3DRMViewport2_GetField(viewport2);
+ ok(field == -1.0f, "Got unexpected field %.8e.\n", field);
+ left = right = bottom = top = 10.0f;
+ hr = IDirect3DRMViewport2_GetPlane(viewport2, &left, &right, &bottom, &top);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+ ok(left == 10.0f, "Got unexpected left %.8e.\n", left);
+ ok(right == 10.0f, "Got unexpected right %.8e.\n", right);
+ ok(bottom == 10.0f, "Got unexpected bottom %.8e.\n", bottom);
+ ok(top == 10.0f, "Got unexpected top %.8e.\n", top);
hr = IDirect3DRMViewport2_SetCamera(viewport2, frame3);
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport2_SetField(viewport2, 0.5f);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DRMViewport2_Init(viewport2, NULL, frame3, rc.left, rc.top, rc.right, rc.bottom);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
@@ -2305,6 +2348,26 @@ static void test_Viewport(void)
ok(vp.dvMaxY == expected_val, "Expected dvMaxY = %f, got %f.\n", expected_val, vp.dvMaxY);
IDirect3DViewport_Release(d3d_viewport);
+ field = IDirect3DRMViewport2_GetField(viewport2);
+ ok(field == 0.5f, "Got unexpected field %.8e.\n", field);
+ hr = IDirect3DRMViewport2_GetPlane(viewport2, &left, &right, &bottom, &top);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ ok(left == -0.5f, "Got unexpected left %.8e.\n", left);
+ ok(right == 0.5f, "Got unexpected right %.8e.\n", right);
+ ok(bottom == -0.5f, "Got unexpected bottom %.8e.\n", bottom);
+ ok(top == 0.5f, "Got unexpected top %.8e.\n", top);
+
+ hr = IDirect3DRMViewport2_SetField(viewport2, 1.0f);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ field = IDirect3DRMViewport2_GetField(viewport2);
+ ok(field == 1.0f, "Got unexpected field %.8e.\n", field);
+ hr = IDirect3DRMViewport2_GetPlane(viewport2, &left, &right, &bottom, &top);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ ok(left == -1.0f, "Got unexpected left %.8e.\n", left);
+ ok(right == 1.0f, "Got unexpected right %.8e.\n", right);
+ ok(bottom == -1.0f, "Got unexpected bottom %.8e.\n", bottom);
+ ok(top == 1.0f, "Got unexpected top %.8e.\n", top);
+
hr = IDirect3DRMViewport2_Init(viewport2, device3, frame3, rc.left, rc.top, rc.right, rc.bottom);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
hr = IDirect3DRMViewport2_GetDevice(viewport2, NULL);
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
index 6da7d7e2889..97105994957 100644
--- a/dlls/d3drm/viewport.c
+++ b/dlls/d3drm/viewport.c
@@ -369,6 +369,11 @@ static HRESULT WINAPI d3drm_viewport2_Init(IDirect3DRMViewport2 *iface, IDirect3
viewport->material = material;
viewport->device = device_obj;
+ viewport->clip.left = -0.5f;
+ viewport->clip.top = 0.5f;
+ viewport->clip.right = 0.5f;
+ viewport->clip.bottom = -0.5f;
+
cleanup:
if (FAILED(hr))
@@ -483,7 +488,7 @@ static HRESULT WINAPI d3drm_viewport2_SetFront(IDirect3DRMViewport2 *iface, D3DV
TRACE("iface %p, front %.8e.\n", iface, front);
- viewport->front = front;
+ viewport->clip.front = front;
return D3DRM_OK;
}
@@ -503,7 +508,7 @@ static HRESULT WINAPI d3drm_viewport2_SetBack(IDirect3DRMViewport2 *iface, D3DVA
TRACE("iface %p, back %.8e.\n", iface, back);
- viewport->back = back;
+ viewport->clip.back = back;
return D3DRM_OK;
}
@@ -523,10 +528,16 @@ static HRESULT WINAPI d3drm_viewport2_SetField(IDirect3DRMViewport2 *iface, D3DV
TRACE("iface %p, field %.8e.\n", iface, field);
+ if (!viewport->d3d_viewport)
+ return D3DRMERR_BADOBJECT;
+
if (field <= 0.0f)
return D3DRMERR_BADVALUE;
- viewport->field = field;
+ viewport->clip.left = -field;
+ viewport->clip.right = field;
+ viewport->clip.bottom = -field;
+ viewport->clip.top = field;
return D3DRM_OK;
}
@@ -755,19 +766,31 @@ static HRESULT WINAPI d3drm_viewport1_GetDevice(IDirect3DRMViewport *iface, IDir
static HRESULT WINAPI d3drm_viewport2_GetPlane(IDirect3DRMViewport2 *iface,
D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top)
{
- FIXME("iface %p, left %p, right %p, bottom %p, top %p stub!\n",
+ struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface);
+
+ TRACE("iface %p, left %p, right %p, bottom %p, top %p.\n",
iface, left, right, bottom, top);
- return E_NOTIMPL;
+ if (!viewport->d3d_viewport)
+ return D3DRMERR_BADOBJECT;
+
+ *left = viewport->clip.left;
+ *right = viewport->clip.right;
+ *bottom = viewport->clip.bottom;
+ *top = viewport->clip.top;
+
+ return D3DRM_OK;
}
static HRESULT WINAPI d3drm_viewport1_GetPlane(IDirect3DRMViewport *iface,
D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top)
{
- FIXME("iface %p, left %p, right %p, bottom %p, top %p stub!\n",
+ struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface);
+
+ TRACE("iface %p, left %p, right %p, bottom %p, top %p.\n",
iface, left, right, bottom, top);
- return E_NOTIMPL;
+ return d3drm_viewport2_GetPlane(&viewport->IDirect3DRMViewport2_iface, left, right, bottom, top);
}
static HRESULT WINAPI d3drm_viewport2_Pick(IDirect3DRMViewport2 *iface,
@@ -862,7 +885,11 @@ static D3DVALUE WINAPI d3drm_viewport2_GetField(IDirect3DRMViewport2 *iface)
TRACE("iface %p.\n", iface);
- return viewport->field;
+ if (!viewport->d3d_viewport)
+ return -1.0f;
+
+ return (viewport->clip.right - viewport->clip.left
+ + viewport->clip.top - viewport->clip.bottom) / 4.0f;
}
static D3DVALUE WINAPI d3drm_viewport1_GetField(IDirect3DRMViewport *iface)
@@ -880,7 +907,7 @@ static D3DVALUE WINAPI d3drm_viewport2_GetBack(IDirect3DRMViewport2 *iface)
TRACE("iface %p.\n", iface);
- return viewport->back;
+ return viewport->clip.back;
}
static D3DVALUE WINAPI d3drm_viewport1_GetBack(IDirect3DRMViewport *iface)
@@ -898,7 +925,7 @@ static D3DVALUE WINAPI d3drm_viewport2_GetFront(IDirect3DRMViewport2 *iface)
TRACE("iface %p.\n", iface);
- return viewport->front;
+ return viewport->clip.front;
}
static D3DVALUE WINAPI d3drm_viewport1_GetFront(IDirect3DRMViewport *iface)
--
2.11.0
Aug. 30, 2019
[PATCH 2/5] d3drm: Implement d3drm_viewport2_SetCamera().
by Henri Verbeet
From: Jeff Smith <whydoubt(a)gmail.com>
Signed-off-by: Jeff Smith <whydoubt(a)gmail.com>
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
dlls/d3drm/tests/d3drm.c | 33 +++++++++++++++++++++++++++++++++
dlls/d3drm/viewport.c | 22 ++++++++++++++++++----
2 files changed, 51 insertions(+), 4 deletions(-)
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 403822cf93b..76d2dbe3949 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -1791,11 +1791,20 @@ static void test_Viewport(void)
ok(device1 == d3drm_device1, "Expected device returned = %p, got %p.\n", device1, d3drm_device1);
IDirect3DRMDevice_Release(d3drm_device1);
+ hr = IDirect3DRMViewport_SetCamera(viewport, NULL);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DRMViewport_GetCamera(viewport, &d3drm_frame);
ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
ok(frame == d3drm_frame, "Expected frame returned = %p, got %p.\n", frame, d3drm_frame);
IDirect3DRMFrame_Release(d3drm_frame);
+ hr = IDirect3DRMViewport_SetCamera(viewport, tmp_frame1);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport_GetCamera(viewport, &d3drm_frame);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ ok(d3drm_frame == tmp_frame1, "Got unexpected frame %p, expected %p.\n", d3drm_frame, tmp_frame1);
+ IDirect3DRMFrame_Release(d3drm_frame);
+
IDirect3DRMViewport_Release(viewport);
ref4 = get_refcount((IUnknown *)d3drm1);
ok(ref4 == ref1, "Expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", ref1, ref4);
@@ -1826,11 +1835,20 @@ static void test_Viewport(void)
ok(device1 == d3drm_device1, "Expected device returned = %p, got %p.\n", device1, d3drm_device1);
IDirect3DRMDevice_Release(d3drm_device1);
+ hr = IDirect3DRMViewport_SetCamera(viewport, NULL);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DRMViewport_GetCamera(viewport, &d3drm_frame);
ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
ok(frame == d3drm_frame, "Expected frame returned = %p, got %p.\n", frame, d3drm_frame);
IDirect3DRMFrame_Release(d3drm_frame);
+ hr = IDirect3DRMViewport_SetCamera(viewport, tmp_frame1);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport_GetCamera(viewport, &d3drm_frame);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ ok(d3drm_frame == tmp_frame1, "Got unexpected frame %p, expected %p.\n", d3drm_frame, tmp_frame1);
+ IDirect3DRMFrame_Release(d3drm_frame);
+
IDirect3DRMViewport_Release(viewport);
ref4 = get_refcount((IUnknown *)d3drm1);
ok(ref4 == ref1, "Expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", ref1, ref4);
@@ -1864,11 +1882,20 @@ static void test_Viewport(void)
ok(device3 == d3drm_device3, "Expected device returned = %p, got %p.\n", device3, d3drm_device3);
IDirect3DRMDevice3_Release(d3drm_device3);
+ hr = IDirect3DRMViewport2_SetCamera(viewport2, NULL);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DRMViewport2_GetCamera(viewport2, &d3drm_frame3);
ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
ok(frame3 == d3drm_frame3, "Expected frame returned = %p, got %p.\n", frame3, d3drm_frame3);
IDirect3DRMFrame3_Release(d3drm_frame3);
+ hr = IDirect3DRMViewport2_SetCamera(viewport2, tmp_frame3);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport2_GetCamera(viewport2, &d3drm_frame3);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ ok(d3drm_frame3 == tmp_frame3, "Got unexpected frame %p, expected %p.\n", d3drm_frame3, tmp_frame3);
+ IDirect3DRMFrame3_Release(d3drm_frame3);
+
IDirect3DRMViewport2_Release(viewport2);
ref4 = get_refcount((IUnknown *)d3drm1);
ok(ref4 == ref1, "Expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", ref1, ref4);
@@ -2110,6 +2137,9 @@ static void test_Viewport(void)
hr = IDirect3DRMViewport_GetCamera(viewport, &d3drm_frame);
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport_SetCamera(viewport, frame);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+
/* Test all failures together */
hr = IDirect3DRMViewport_Init(viewport, NULL, frame, rc.left, rc.top, rc.right, rc.bottom);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
@@ -2217,6 +2247,9 @@ static void test_Viewport(void)
hr = IDirect3DRMViewport2_GetCamera(viewport2, &d3drm_frame3);
ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DRMViewport2_SetCamera(viewport2, frame3);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+
hr = IDirect3DRMViewport2_Init(viewport2, NULL, frame3, rc.left, rc.top, rc.right, rc.bottom);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
hr = IDirect3DRMViewport2_Init(viewport2, device3, NULL, rc.left, rc.top, rc.right, rc.bottom);
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
index 833afb9b616..6da7d7e2889 100644
--- a/dlls/d3drm/viewport.c
+++ b/dlls/d3drm/viewport.c
@@ -556,16 +556,30 @@ static HRESULT WINAPI d3drm_viewport1_SetUniformScaling(IDirect3DRMViewport *ifa
static HRESULT WINAPI d3drm_viewport2_SetCamera(IDirect3DRMViewport2 *iface, IDirect3DRMFrame3 *camera)
{
- FIXME("iface %p, camera %p stub!\n", iface, camera);
+ struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface);
+ struct d3drm_frame *frame = unsafe_impl_from_IDirect3DRMFrame3(camera);
- return E_NOTIMPL;
+ TRACE("iface %p, camera %p.\n", iface, camera);
+
+ if (!camera || !viewport->camera)
+ return D3DRMERR_BADOBJECT;
+
+ IDirect3DRMFrame_AddRef(&frame->IDirect3DRMFrame_iface);
+ IDirect3DRMFrame_Release(viewport->camera);
+ viewport->camera = &frame->IDirect3DRMFrame_iface;
+
+ return D3DRM_OK;
}
static HRESULT WINAPI d3drm_viewport1_SetCamera(IDirect3DRMViewport *iface, IDirect3DRMFrame *camera)
{
- FIXME("iface %p, camera %p stub!\n", iface, camera);
+ struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface);
+ struct d3drm_frame *frame = unsafe_impl_from_IDirect3DRMFrame(camera);
- return E_NOTIMPL;
+ TRACE("iface %p, camera %p.\n", iface, camera);
+
+ return d3drm_viewport2_SetCamera(&viewport->IDirect3DRMViewport2_iface,
+ frame ? &frame->IDirect3DRMFrame3_iface : NULL);
}
static HRESULT WINAPI d3drm_viewport2_SetProjection(IDirect3DRMViewport2 *iface, D3DRMPROJECTIONTYPE type)
--
2.11.0
Aug. 30, 2019
[PATCH 1/5] d3drm: Implement d3drm_viewport2_GetCamera().
by Henri Verbeet
From: Jeff Smith <whydoubt(a)gmail.com>
Signed-off-by: Jeff Smith <whydoubt(a)gmail.com>
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
dlls/d3drm/d3drm_private.h | 2 ++
dlls/d3drm/frame.c | 4 +---
dlls/d3drm/tests/d3drm.c | 33 +++++++++++++++++++++++++++++++--
dlls/d3drm/viewport.c | 30 ++++++++++++++++++++++++++----
4 files changed, 60 insertions(+), 9 deletions(-)
diff --git a/dlls/d3drm/d3drm_private.h b/dlls/d3drm/d3drm_private.h
index dcda35fb081..d7db1edca30 100644
--- a/dlls/d3drm/d3drm_private.h
+++ b/dlls/d3drm/d3drm_private.h
@@ -273,6 +273,8 @@ HRESULT d3drm_object_set_name(struct d3drm_object *object, const char *name) DEC
void d3drm_object_cleanup(IDirect3DRMObject *iface, struct d3drm_object *object) DECLSPEC_HIDDEN;
struct d3drm_frame *unsafe_impl_from_IDirect3DRMFrame(IDirect3DRMFrame *iface) DECLSPEC_HIDDEN;
+struct d3drm_frame *unsafe_impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface) DECLSPEC_HIDDEN;
+
struct d3drm_device *unsafe_impl_from_IDirect3DRMDevice3(IDirect3DRMDevice3 *iface) DECLSPEC_HIDDEN;
HRESULT d3drm_texture_create(struct d3drm_texture **texture, IDirect3DRM *d3drm) DECLSPEC_HIDDEN;
diff --git a/dlls/d3drm/frame.c b/dlls/d3drm/frame.c
index 0561f6de7da..265afdf3d63 100644
--- a/dlls/d3drm/frame.c
+++ b/dlls/d3drm/frame.c
@@ -70,8 +70,6 @@ static inline struct d3drm_frame *impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3
return CONTAINING_RECORD(iface, struct d3drm_frame, IDirect3DRMFrame3_iface);
}
-static inline struct d3drm_frame *unsafe_impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface);
-
static inline struct d3drm_frame_array *impl_from_IDirect3DRMFrameArray(IDirect3DRMFrameArray *iface)
{
return CONTAINING_RECORD(iface, struct d3drm_frame_array, IDirect3DRMFrameArray_iface);
@@ -3110,7 +3108,7 @@ static const struct IDirect3DRMFrameVtbl d3drm_frame1_vtbl =
d3drm_frame1_Transform,
};
-static inline struct d3drm_frame *unsafe_impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface)
+struct d3drm_frame *unsafe_impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface)
{
if (!iface)
return NULL;
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index dbba859215b..403822cf93b 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -1712,6 +1712,8 @@ static void test_object(void)
static void test_Viewport(void)
{
+ IDirect3DRMFrame3 *frame3, *d3drm_frame3, *tmp_frame3;
+ IDirect3DRMFrame *frame, *d3drm_frame, *tmp_frame1;
IDirectDrawClipper *clipper;
HRESULT hr;
IDirect3DRM *d3drm1;
@@ -1719,8 +1721,6 @@ static void test_Viewport(void)
IDirect3DRM3 *d3drm3;
IDirect3DRMDevice *device1, *d3drm_device1;
IDirect3DRMDevice3 *device3, *d3drm_device3;
- IDirect3DRMFrame *frame;
- IDirect3DRMFrame3 *frame3;
IDirect3DRMViewport *viewport;
IDirect3DRMViewport2 *viewport2;
IDirect3DViewport *d3d_viewport;
@@ -1760,8 +1760,12 @@ static void test_Viewport(void)
hr = IDirect3DRM_CreateFrame(d3drm1, NULL, &frame);
ok(hr == D3DRM_OK, "Cannot get IDirect3DRMFrame interface (hr = %x)\n", hr);
+ hr = IDirect3DRM_CreateFrame(d3drm1, NULL, &tmp_frame1);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DRM3_CreateFrame(d3drm3, NULL, &frame3);
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMFrame3 interface (hr = %x).\n", hr);
+ hr = IDirect3DRM3_CreateFrame(d3drm3, NULL, &tmp_frame3);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
ref1 = get_refcount((IUnknown *)d3drm1);
ref2 = get_refcount((IUnknown *)d3drm2);
@@ -1787,6 +1791,11 @@ static void test_Viewport(void)
ok(device1 == d3drm_device1, "Expected device returned = %p, got %p.\n", device1, d3drm_device1);
IDirect3DRMDevice_Release(d3drm_device1);
+ hr = IDirect3DRMViewport_GetCamera(viewport, &d3drm_frame);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ ok(frame == d3drm_frame, "Expected frame returned = %p, got %p.\n", frame, d3drm_frame);
+ IDirect3DRMFrame_Release(d3drm_frame);
+
IDirect3DRMViewport_Release(viewport);
ref4 = get_refcount((IUnknown *)d3drm1);
ok(ref4 == ref1, "Expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", ref1, ref4);
@@ -1817,6 +1826,11 @@ static void test_Viewport(void)
ok(device1 == d3drm_device1, "Expected device returned = %p, got %p.\n", device1, d3drm_device1);
IDirect3DRMDevice_Release(d3drm_device1);
+ hr = IDirect3DRMViewport_GetCamera(viewport, &d3drm_frame);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ ok(frame == d3drm_frame, "Expected frame returned = %p, got %p.\n", frame, d3drm_frame);
+ IDirect3DRMFrame_Release(d3drm_frame);
+
IDirect3DRMViewport_Release(viewport);
ref4 = get_refcount((IUnknown *)d3drm1);
ok(ref4 == ref1, "Expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", ref1, ref4);
@@ -1850,6 +1864,11 @@ static void test_Viewport(void)
ok(device3 == d3drm_device3, "Expected device returned = %p, got %p.\n", device3, d3drm_device3);
IDirect3DRMDevice3_Release(d3drm_device3);
+ hr = IDirect3DRMViewport2_GetCamera(viewport2, &d3drm_frame3);
+ ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+ ok(frame3 == d3drm_frame3, "Expected frame returned = %p, got %p.\n", frame3, d3drm_frame3);
+ IDirect3DRMFrame3_Release(d3drm_frame3);
+
IDirect3DRMViewport2_Release(viewport2);
ref4 = get_refcount((IUnknown *)d3drm1);
ok(ref4 == ref1, "Expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", ref1, ref4);
@@ -2088,6 +2107,8 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
hr = IDirect3DRMViewport_GetDevice(viewport, &d3drm_device1);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
+ hr = IDirect3DRMViewport_GetCamera(viewport, &d3drm_frame);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
/* Test all failures together */
hr = IDirect3DRMViewport_Init(viewport, NULL, frame, rc.left, rc.top, rc.right, rc.bottom);
@@ -2157,6 +2178,8 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
hr = IDirect3DRMViewport_GetDirect3DViewport(viewport, NULL);
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
+ hr = IDirect3DRMViewport_GetCamera(viewport, NULL);
+ ok(hr == D3DRMERR_BADVALUE, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DRMViewport_SetField(viewport, 0.0f);
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
hr = IDirect3DRMViewport_SetField(viewport, -1.0f);
@@ -2191,6 +2214,8 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
hr = IDirect3DRMViewport2_GetDevice(viewport2, &d3drm_device3);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
+ hr = IDirect3DRMViewport2_GetCamera(viewport2, &d3drm_frame3);
+ ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DRMViewport2_Init(viewport2, NULL, frame3, rc.left, rc.top, rc.right, rc.bottom);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
@@ -2253,6 +2278,8 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
hr = IDirect3DRMViewport2_GetDirect3DViewport(viewport2, NULL);
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
+ hr = IDirect3DRMViewport2_GetCamera(viewport2, NULL);
+ ok(hr == D3DRMERR_BADVALUE, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DRMViewport2_SetField(viewport2, 0.0f);
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
hr = IDirect3DRMViewport2_SetField(viewport2, -1.0f);
@@ -2283,6 +2310,7 @@ static void test_Viewport(void)
ref4 = get_refcount((IUnknown *)frame3);
ok(ref4 == frame_ref2, "Expected ref4 == frame_ref2, got frame_ref2 = %u, ref4 = %u.\n", frame_ref2, ref4);
+ IDirect3DRMFrame3_Release(tmp_frame3);
IDirect3DRMFrame3_Release(frame3);
ref4 = get_refcount((IUnknown *)d3drm1);
ok(ref4 > initial_ref1, "Expected ref4 > initial_ref1, got initial_ref1 = %u, ref4 = %u.\n", initial_ref1, ref4);
@@ -2291,6 +2319,7 @@ static void test_Viewport(void)
ref4 = get_refcount((IUnknown *)d3drm3);
ok(ref4 == initial_ref3, "Expected ref4 == initial_ref3, got initial_ref3 = %u, ref4 = %u.\n", initial_ref3, ref4);
+ IDirect3DRMFrame3_Release(tmp_frame1);
IDirect3DRMFrame_Release(frame);
ref4 = get_refcount((IUnknown *)d3drm1);
ok(ref4 == initial_ref1, "Expected ref4 == initial_ref1, got initial_ref1 = %u, ref4 = %u.\n", initial_ref1, ref4);
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
index c2fa1897420..833afb9b616 100644
--- a/dlls/d3drm/viewport.c
+++ b/dlls/d3drm/viewport.c
@@ -668,16 +668,38 @@ static HRESULT WINAPI d3drm_viewport1_SetPlane(IDirect3DRMViewport *iface,
static HRESULT WINAPI d3drm_viewport2_GetCamera(IDirect3DRMViewport2 *iface, IDirect3DRMFrame3 **camera)
{
- FIXME("iface %p, camera %p stub!\n", iface, camera);
+ struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface);
- return E_NOTIMPL;
+ TRACE("iface %p, camera %p.\n", iface, camera);
+
+ if (!camera)
+ return D3DRMERR_BADVALUE;
+
+ if (!viewport->camera)
+ return D3DRMERR_BADOBJECT;
+
+ return IDirect3DRMFrame_QueryInterface(viewport->camera, &IID_IDirect3DRMFrame3, (void **)camera);
}
static HRESULT WINAPI d3drm_viewport1_GetCamera(IDirect3DRMViewport *iface, IDirect3DRMFrame **camera)
{
- FIXME("iface %p, camera %p stub!\n", iface, camera);
+ struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface);
+ struct d3drm_frame *camera_impl;
+ IDirect3DRMFrame3 *camera3;
+ HRESULT hr;
- return E_NOTIMPL;
+ TRACE("iface %p, camera %p.\n", iface, camera);
+
+ if (!camera)
+ return D3DRMERR_BADVALUE;
+
+ if (FAILED(hr = d3drm_viewport2_GetCamera(&viewport->IDirect3DRMViewport2_iface, &camera3)))
+ return hr;
+
+ camera_impl = unsafe_impl_from_IDirect3DRMFrame3(camera3);
+ *camera = &camera_impl->IDirect3DRMFrame_iface;
+
+ return D3DRM_OK;
}
static HRESULT WINAPI d3drm_viewport2_GetDevice(IDirect3DRMViewport2 *iface, IDirect3DRMDevice3 **device)
--
2.11.0
Aug. 30, 2019
[PATCH] ntdll: Add RtlUnwindEx spec entry for ARM64
by André Hentschel
Signed-off-by: André Hentschel <nerv(a)dawncrow.de>
---
dlls/ntdll/ntdll.spec | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 82c78f6e786..b8f5415a7ca 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -983,7 +983,7 @@
@ stdcall RtlUnlockHeap(long)
# @ stub RtlUnlockMemoryStreamRegion
@ stdcall -norelay RtlUnwind(ptr ptr ptr ptr)
-@ stdcall -arch=x86_64 RtlUnwindEx(ptr ptr ptr ptr ptr ptr)
+@ stdcall -arch=arm64,x86_64 RtlUnwindEx(ptr ptr ptr ptr ptr ptr)
@ stdcall RtlUpcaseUnicodeChar(long)
@ stdcall RtlUpcaseUnicodeString(ptr ptr long)
@ stdcall RtlUpcaseUnicodeStringToAnsiString(ptr ptr long)
--
2.17.1
Aug. 30, 2019
Re: [PATCH] dnsapi: Add DnsGetCacheDataTable stub
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=56052
Your paranoid android.
=== w2008s64 (task log) ===
Task errors:
BotError: The VM is not powered on
Aug. 30, 2019
Re: [PATCH] dnsapi: Add DnsGetCacheDataTable stub
by Rémi Bernon
On 8/30/19 3:03 PM, Marvin wrote:
> Hi,
>
> While running your changed tests, I think I found new failures.
> Being a bot and all I'm not very good at pattern recognition, so I might be
> wrong, but could you please double-check?
>
> Full results can be found at:
> https://testbot.winehq.org/JobDetails.pl?Key=56052
>
> Your paranoid android.
>
>
> === build (build log) ===
>
> Task errors:
> BotError: The VM is not powered on
>
I did a successful run with the same patch here:
https://testbot.winehq.org/JobDetails.pl?Key=56051
--
Rémi Bernon <rbernon(a)codeweavers.com>
Aug. 30, 2019