[PATCH resend2 2/5] d3drm: Initialize viewport uniform-scaling.

Jeff Smith whydoubt at gmail.com
Mon Oct 21 12:47:56 CDT 2019


Signed-off-by: Jeff Smith <whydoubt at gmail.com>
---
 dlls/d3drm/d3drm_private.h |  1 +
 dlls/d3drm/tests/d3drm.c   | 21 +++++++++++++++++++++
 dlls/d3drm/viewport.c      | 34 ++++++++++++++++++++++++++--------
 3 files changed, 48 insertions(+), 8 deletions(-)

diff --git a/dlls/d3drm/d3drm_private.h b/dlls/d3drm/d3drm_private.h
index b5d60e518f..48820b272c 100644
--- a/dlls/d3drm/d3drm_private.h
+++ b/dlls/d3drm/d3drm_private.h
@@ -111,6 +111,7 @@ struct d3drm_viewport
     IDirect3DRM *d3drm;
     struct d3drm_box clip;
     D3DRMPROJECTIONTYPE projection;
+    BOOL uniform_scaling;
 };
 
 struct d3drm_device
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index e826e595d8..591dc5c0bf 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -1734,6 +1734,7 @@ static void test_Viewport(void)
     DWORD data, ref1, ref2, ref3, ref4;
     DWORD initial_ref1, initial_ref2, initial_ref3, device_ref, frame_ref, frame_ref2, viewport_ref;
     D3DRMPROJECTIONTYPE ptype;
+    BOOL b;
 
     window = create_window();
     GetClientRect(window, &rc);
@@ -2153,6 +2154,8 @@ static void test_Viewport(void)
     ok(back == -1.0f, "Got unexpected back %.8e\n", back);
     ptype = IDirect3DRMViewport_GetProjection(viewport);
     ok(ptype == -1, "Got unexpected projection type %u.\n", ptype);
+    b = IDirect3DRMViewport_GetUniformScaling(viewport);
+    ok(b == -1, "Got unexpected uniform scaling %d.\n", b);
 
     hr = IDirect3DRMViewport_SetCamera(viewport, frame);
     ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
@@ -2166,6 +2169,8 @@ static void test_Viewport(void)
     ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
     hr = IDirect3DRMViewport_SetProjection(viewport, D3DRMPROJECT_PERSPECTIVE);
     ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+    hr = IDirect3DRMViewport_SetUniformScaling(viewport, TRUE);
+    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);
@@ -2243,6 +2248,8 @@ static void test_Viewport(void)
     ok(back == 100.0f, "Got unexpected back %.8e.\n", back);
     ptype = IDirect3DRMViewport_GetProjection(viewport);
     ok(ptype == D3DRMPROJECT_PERSPECTIVE, "Got unexpected projection type %u.\n", ptype);
+    b = IDirect3DRMViewport_GetUniformScaling(viewport);
+    ok(b == TRUE, "Got unexpected uniform scaling %d.\n", b);
 
     hr = IDirect3DRMViewport_SetField(viewport, 1.0f);
     ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
@@ -2277,6 +2284,10 @@ static void test_Viewport(void)
     ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
     ptype = IDirect3DRMViewport_GetProjection(viewport);
     ok(ptype == D3DRMPROJECT_ORTHOGRAPHIC, "Got unexpected projection type %u.\n", ptype);
+    hr = IDirect3DRMViewport_SetUniformScaling(viewport, FALSE);
+    ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+    b = IDirect3DRMViewport_GetUniformScaling(viewport);
+    ok(b == FALSE, "Got unexpected uniform scaling %d.\n", b);
 
     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);
@@ -2346,6 +2357,8 @@ static void test_Viewport(void)
     ok(back == -1.0f, "Got unexpected back %.8e\n", back);
     ptype = IDirect3DRMViewport2_GetProjection(viewport2);
     ok(ptype == -1, "Got unexpected projection type %u.\n", ptype);
+    b = IDirect3DRMViewport2_GetUniformScaling(viewport2);
+    ok(b == -1, "Got unexpected uniform scaling %d.\n", b);
 
     hr = IDirect3DRMViewport2_SetCamera(viewport2, frame3);
     ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
@@ -2359,6 +2372,8 @@ static void test_Viewport(void)
     ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
     hr = IDirect3DRMViewport2_SetProjection(viewport2, D3DRMPROJECT_PERSPECTIVE);
     ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+    hr = IDirect3DRMViewport2_SetUniformScaling(viewport2, TRUE);
+    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);
@@ -2429,6 +2444,8 @@ static void test_Viewport(void)
     ok(back == 100.0f, "Got unexpected back %.8e.\n", back);
     ptype = IDirect3DRMViewport2_GetProjection(viewport2);
     ok(ptype == D3DRMPROJECT_PERSPECTIVE, "Got unexpected projection type %u.\n", ptype);
+    b = IDirect3DRMViewport2_GetUniformScaling(viewport2);
+    ok(b == TRUE, "Got unexpected uniform scaling %d.\n", b);
 
     hr = IDirect3DRMViewport2_SetField(viewport2, 1.0f);
     ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
@@ -2463,6 +2480,10 @@ static void test_Viewport(void)
     ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
     ptype = IDirect3DRMViewport2_GetProjection(viewport2);
     ok(ptype == D3DRMPROJECT_ORTHOGRAPHIC, "Got unexpected projection type %u.\n", ptype);
+    hr = IDirect3DRMViewport2_SetUniformScaling(viewport2, FALSE);
+    ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+    b = IDirect3DRMViewport2_GetUniformScaling(viewport2);
+    ok(b == FALSE, "Got unexpected uniform scaling %d.\n", b);
 
     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);
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
index da6b38b110..7307450772 100644
--- a/dlls/d3drm/viewport.c
+++ b/dlls/d3drm/viewport.c
@@ -378,6 +378,8 @@ static HRESULT WINAPI d3drm_viewport2_Init(IDirect3DRMViewport2 *iface, IDirect3
 
     viewport->projection = D3DRMPROJECT_PERSPECTIVE;
 
+    viewport->uniform_scaling = TRUE;
+
 cleanup:
 
     if (FAILED(hr))
@@ -569,16 +571,25 @@ static HRESULT WINAPI d3drm_viewport1_SetField(IDirect3DRMViewport *iface, D3DVA
 
 static HRESULT WINAPI d3drm_viewport2_SetUniformScaling(IDirect3DRMViewport2 *iface, BOOL b)
 {
-    FIXME("iface %p, b %#x stub!\n", iface, b);
+    struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface);
 
-    return E_NOTIMPL;
+    TRACE("iface %p, b %#x.\n", iface, b);
+
+    if (!viewport->d3d_viewport)
+        return D3DRMERR_BADOBJECT;
+
+    viewport->uniform_scaling = b;
+
+    return D3DRM_OK;
 }
 
 static HRESULT WINAPI d3drm_viewport1_SetUniformScaling(IDirect3DRMViewport *iface, BOOL b)
 {
-    FIXME("iface %p, b %#x stub!\n", iface, b);
+    struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface);
 
-    return E_NOTIMPL;
+    TRACE("iface %p, b %#x.\n", iface, b);
+
+    return d3drm_viewport2_SetUniformScaling(&viewport->IDirect3DRMViewport2_iface, b);
 }
 
 static HRESULT WINAPI d3drm_viewport2_SetCamera(IDirect3DRMViewport2 *iface, IDirect3DRMFrame3 *camera)
@@ -842,16 +853,23 @@ static HRESULT WINAPI d3drm_viewport1_Pick(IDirect3DRMViewport *iface,
 
 static BOOL WINAPI d3drm_viewport2_GetUniformScaling(IDirect3DRMViewport2 *iface)
 {
-    FIXME("iface %p stub!\n", iface);
+    struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface);
 
-    return FALSE;
+    TRACE("iface %p.\n", iface);
+
+    if (!viewport->d3d_viewport)
+        return -1;
+
+    return viewport->uniform_scaling;
 }
 
 static BOOL WINAPI d3drm_viewport1_GetUniformScaling(IDirect3DRMViewport *iface)
 {
-    FIXME("iface %p stub!\n", iface);
+    struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface);
+
+    TRACE("iface %p.\n", iface);
 
-    return FALSE;
+    return d3drm_viewport2_GetUniformScaling(&viewport->IDirect3DRMViewport2_iface);
 }
 
 static LONG WINAPI d3drm_viewport2_GetX(IDirect3DRMViewport2 *iface)
-- 
2.21.0




More information about the wine-devel mailing list