Louis. Lenders : d3d8: More correct stub for ValidatePixelShader + tests.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Sep 20 05:33:51 CDT 2006


Module: wine
Branch: master
Commit: 34e03fc0425a5efbef5824e687a20f4540a0b497
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=34e03fc0425a5efbef5824e687a20f4540a0b497

Author: Louis. Lenders <xerox_xerox2000 at yahoo.co.uk>
Date:   Mon Sep 18 19:16:48 2006 +0100

d3d8: More correct stub for ValidatePixelShader + tests.

---

 dlls/d3d8/d3d8_main.c       |   26 +++++++++++++++++++++++---
 dlls/d3d8/tests/d3d8_main.c |   41 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 64 insertions(+), 3 deletions(-)

diff --git a/dlls/d3d8/d3d8_main.c b/dlls/d3d8/d3d8_main.c
index 65b8a00..0f6bc12 100644
--- a/dlls/d3d8/d3d8_main.c
+++ b/dlls/d3d8/d3d8_main.c
@@ -106,8 +106,28 @@ HRESULT WINAPI ValidateVertexShader(DWOR
  * PARAMS
  * toto       result?
  */
-BOOL WINAPI ValidatePixelShader(LPVOID pFunction, int param1, int param2, LPVOID toto)
+HRESULT WINAPI ValidatePixelShader(DWORD* pixelshader, DWORD* reserved1, int bool, DWORD* toto)
 {
-  FIXME("(%p %d %d %p): stub\n", pFunction, param1, param2, toto);
-  return TRUE;
+  HRESULT ret;
+  FIXME("(%p %p %d %p): stub\n", pixelshader, reserved1, bool, toto);
+  
+  if (!pixelshader)
+      return E_FAIL;
+
+  if (reserved1)
+      return E_FAIL;   
+
+  switch(*pixelshader) {
+        case 0xFFFF0100:
+        case 0xFFFF0101:
+        case 0xFFFF0102:
+        case 0xFFFF0103:
+        case 0xFFFF0104:
+            ret=S_OK;
+            break;
+        default:
+            ERR("pixelshader version mismatch\n");
+            ret=E_FAIL;
+        }
+  return ret;
 }
diff --git a/dlls/d3d8/tests/d3d8_main.c b/dlls/d3d8/tests/d3d8_main.c
index e2f03bd..48d2436 100644
--- a/dlls/d3d8/tests/d3d8_main.c
+++ b/dlls/d3d8/tests/d3d8_main.c
@@ -19,6 +19,7 @@
 #include "wine/test.h"
 
 static HRESULT (WINAPI *ValidateVertexShader)(DWORD*,DWORD*,DWORD*,int,DWORD*);
+static HRESULT (WINAPI *ValidatePixelShader)(DWORD*,DWORD*,int,DWORD*);
 
 static void test_ValidateVertexShader(void)
 {
@@ -64,9 +65,49 @@ static void test_ValidateVertexShader(vo
     ok(ret==S_OK,"ValidateVertexShader returned %lx but expected S_OK\n",ret);
 }
 
+static void test_ValidatePixelShader(void)
+{ 
+    HRESULT ret;
+    static DWORD simple_ps[] = {0xFFFF0101,                                     /* ps_1_1                       */
+        0x00000051, 0xA00F0001, 0x3F800000, 0x00000000, 0x00000000, 0x00000000, /* def c1 = 1.0, 0.0, 0.0, 0.0  */
+        0x00000042, 0xB00F0000,                                                 /* tex t0                       */
+        0x00000008, 0x800F0000, 0xA0E40001, 0xA0E40000,                         /* dp3 r0, c1, c0               */
+        0x00000005, 0x800F0000, 0x90E40000, 0x80E40000,                         /* mul r0, v0, r0               */
+        0x00000005, 0x800F0000, 0xB0E40000, 0x80E40000,                         /* mul r0, t0, r0               */
+        0x0000FFFF};                                                            /* END                          */
+
+    ret=ValidatePixelShader(0,0,0,0);
+    ok(ret==E_FAIL,"ValidatePixelShader returned %lx but expected E_FAIL\n",ret);
+
+    ret=ValidatePixelShader(0,0,1,0);
+    ok(ret==E_FAIL,"ValidatePixelShader returned %lx but expected E_FAIL\n",ret);
+
+    ret=ValidatePixelShader(simple_ps,0,0,0);
+    ok(ret==S_OK,"ValidatePixelShader returned %lx but expected S_OK\n",ret);
+
+    ret=ValidatePixelShader(simple_ps,0,1,0);
+    ok(ret==S_OK,"ValidatePixelShader returned %lx but expected S_OK\n",ret);
+    /* seems to do some version checking */
+    *simple_ps=0xFFFF0105;             /* bogus version  */
+    ret=ValidatePixelShader(simple_ps,0,1,0);
+    ok(ret==E_FAIL,"ValidatePixelShader returned %lx but expected E_FAIL\n",ret);
+    /* I've seen that applications pass 2nd parameter always as 0;simple test with non-zero parameter */
+    *simple_ps=0xFFFF0101;             /* ps_1_1         */
+    ret=ValidatePixelShader(simple_ps,simple_ps,1,0);
+    ok(ret==E_FAIL,"ValidatePixelShader returned %lx but expected E_FAIL\n",ret);
+    /* I've seen 3rd parameter is always passed as either 0 or 1, but passing other values doesn't seem to hurt*/
+    ret=ValidatePixelShader(simple_ps,0,12345,0);
+    ok(ret==S_OK,"ValidatePixelShader returned %lx but expected S_OK\n",ret);
+    /* What is 4th parameter ???? Following works ok */
+    ret=ValidatePixelShader(simple_ps,0,1,simple_ps);
+    ok(ret==S_OK,"ValidatePixelShader returned %lx but expected S_OK\n",ret);
+}
+
 START_TEST(d3d8_main)
 {
     HMODULE d3d8_handle = LoadLibraryA( "d3d8.dll" );
     ValidateVertexShader = (void*)GetProcAddress (d3d8_handle, "ValidateVertexShader" );
+    ValidatePixelShader = (void*)GetProcAddress (d3d8_handle, "ValidatePixelShader" );
     test_ValidateVertexShader();
+    test_ValidatePixelShader();
 }




More information about the wine-cvs mailing list