[dx8 patch 13]: vshader + nvidia compil fixes

Raphaël Junqueira fenix at club-internet.fr
Tue Jan 28 18:08:56 CST 2003


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

- -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

Changelog
  - defer of IDirect3DVertexShader_SetConstant, waiting for DrawPrimitive
call. It's the beginning of fixes for vertex shader samples at
http://www.shaderx.com/direct3d.net/tutorials/shader/shader2.html who calls
SetConstants before SetVertexShader ;(
  - Beginning of VertexShader constants support into stateblock (only stored,
not captured yet)
  - fix compiation with nivdia GL/gl.h and mesa Gl/glext headers as reported
by Andrew John Hughes
  - one glActiveTexture/glActiveTextureARB missing

Raphael
- -----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE+NxgVp7NA3AmQTU4RAs+NAJsH7idQ0Z046+kDbraTgAZnZUZIsACeOcFQ
qyIZlWZ4J9i33ceRmESU9vA=
=psEs
- -----END PGP SIGNATURE-----


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE+NxuYp7NA3AmQTU4RAitjAKCE6TmKEgk4ZIynCz+o2a5MvkPODwCfYTbE
+Su/njy41O8ATvQfhKUppj4=
=oZOy
-----END PGP SIGNATURE-----
-------------- next part --------------
? dx8-13.patch
Index: d3d8_private.h
===================================================================
RCS file: /home/wine/wine/dlls/d3d8/d3d8_private.h,v
retrieving revision 1.14
diff -u -r1.14 d3d8_private.h
--- d3d8_private.h	28 Jan 2003 01:12:23 -0000	1.14
+++ d3d8_private.h	28 Jan 2003 23:45:01 -0000
@@ -876,6 +876,7 @@
         BOOL                      transform[HIGHEST_TRANSFORMSTATE];
         BOOL                      viewport;
         BOOL                      vertexShader;
+        BOOL                      vertexShaderConstant;
         BOOL                      vertexShaderDecl;
         BOOL                      pixelShader;
         BOOL                      renderstate[HIGHEST_RENDER_STATE];
@@ -946,7 +947,6 @@
   
   /* Vertex Shader */
   DWORD                     VertexShader;
-  /* TODO: Vertex Shader Constant */
 
   /* Vertex Shader Declaration */
   IDirect3DVertexShaderDeclarationImpl* vertexShaderDecl;
@@ -958,6 +958,9 @@
   /* Indexed Vertex Blending */
   D3DVERTEXBLENDFLAGS       vertex_blend;
   FLOAT                     tween_factor;
+
+  /* Vertex Shader Constant */
+  D3DSHADERVECTOR           vertexShaderConstant[D3D8_VSHADER_MAX_CONSTANTS];
 };
 
 /* exported Interfaces */
Index: device.c
===================================================================
RCS file: /home/wine/wine/dlls/d3d8/device.c,v
retrieving revision 1.35
diff -u -r1.35 device.c
--- device.c	28 Jan 2003 01:12:23 -0000	1.35
+++ device.c	28 Jan 2003 23:45:13 -0000
@@ -31,7 +31,7 @@
 #include "wine/debug.h"
 
 /** define  GL_GLEXT_PROTOTYPES for having extensions prototypes defined */
-#define GL_GLEXT_PROTOTYPES
+/*#define GL_GLEXT_PROTOTYPES*/
 #include "d3d8_private.h"
 
 /** currently desactiving 1_4 support as mesa doesn't implement all 1_4 support while defining it */
@@ -119,6 +119,13 @@
       fvf = (D3DFORMAT) This->UpdateStateBlock->vertexShaderDecl->fvf;
       TRACE("vertex shader declared FVF: %lx\n", This->UpdateStateBlock->vertexShaderDecl->fvf);
       memset(&vertex_shader->input, 0, sizeof(VSHADERINPUTDATA8));
+
+      /** init Constants */
+      if (TRUE == This->UpdateStateBlock->Changed.vertexShaderConstant) {
+	TRACE("vertex shader init Constant\n");
+	IDirect3DVertexShaderImpl_SetConstantF(vertex_shader, 0, (CONST FLOAT*) &This->UpdateStateBlock->vertexShaderConstant[0], 96);
+      }
+
     }
 
     {
@@ -451,7 +458,7 @@
 
 		    memset(&vertex_shader->output, 0, sizeof(VSHADEROUTPUTDATA8));
                     IDirect3DVertexShaderImpl_ExecuteSW(vertex_shader, &vertex_shader->input, &vertex_shader->output);
-                    
+                    /*
                     TRACE_VECTOR(vertex_shader->output.oPos);
                     TRACE_VECTOR(vertex_shader->output.oD[0]);
 		    TRACE_VECTOR(vertex_shader->output.oD[1]);
@@ -462,7 +469,11 @@
 		    TRACE_VECTOR(vertex_shader->data->C[1]);
 		    TRACE_VECTOR(vertex_shader->data->C[2]);
 		    TRACE_VECTOR(vertex_shader->data->C[3]);
-                    /**/
+		    TRACE_VECTOR(vertex_shader->data->C[4]);
+		    TRACE_VECTOR(vertex_shader->data->C[5]);
+		    TRACE_VECTOR(vertex_shader->data->C[6]);
+		    TRACE_VECTOR(vertex_shader->data->C[7]);
+                    */
 		    x = vertex_shader->output.oPos.x;
                     y = vertex_shader->output.oPos.y;
                     z = vertex_shader->output.oPos.z;
@@ -3141,8 +3152,14 @@
     /* Make appropriate texture active */
     TRACE("Activating appropriate texture state %ld\n", Stage);
     if (This->isMultiTexture) {
+#if defined(GL_VERSION_1_3)
+        glActiveTexture(GL_TEXTURE0 + Stage);
+        checkGLcall("glActiveTexture");
+#else
         glActiveTextureARB(GL_TEXTURE0_ARB + Stage);
         checkGLcall("glActiveTextureARB");
+#endif
+
     } else if (Stage>0) {
         FIXME("Program using multiple concurrent textures which this opengl implementation doesnt support\n");
     }
@@ -3700,43 +3717,41 @@
 
 HRESULT  WINAPI  IDirect3DDevice8Impl_SetVertexShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register, CONST void* pConstantData, DWORD ConstantCount) {
   ICOM_THIS(IDirect3DDevice8Impl,iface);
-  IDirect3DVertexShaderImpl* object;
-  DWORD Handle = This->UpdateStateBlock->VertexShader;
 
   if (Register + ConstantCount > D3D8_VSHADER_MAX_CONSTANTS) {
+    /*ERR("(%p) : SetVertexShaderConstant C[%lu] invalid\n", This, Register);*/
     return D3DERR_INVALIDCALL;
   }
-  object = VERTEX_SHADER(Handle);
-  if (NULL == object || NULL == pConstantData) {
+  if (NULL == pConstantData) {
     return D3DERR_INVALIDCALL;
   }
   if (ConstantCount > 1) {
     FLOAT* f = (FLOAT*)pConstantData;
     UINT i;
-    FIXME("(%p) : SetVertexShaderConstant %p, C[%lu..%lu]=\n", This, object, Register, Register + ConstantCount - 1);
+    FIXME("(%p) : SetVertexShaderConstant C[%lu..%lu]=\n", This, Register, Register + ConstantCount - 1);
     for (i = 0; i < ConstantCount; ++i) {
       DPRINTF("{%f, %f, %f, %f}\n", f[0], f[1], f[2], f[3]);
       f += 4;
     }
   } else { 
     FLOAT* f = (FLOAT*)pConstantData;
-    FIXME("(%p) : SetVertexShaderConstant %p, C[%lu]={%f, %f, %f, %f}\n", This, object, Register, f[0], f[1], f[2], f[3]);
+    FIXME("(%p) : SetVertexShaderConstant, C[%lu]={%f, %f, %f, %f}\n", This, Register, f[0], f[1], f[2], f[3]);
   }
-  return IDirect3DVertexShaderImpl_SetConstantF(object, Register, pConstantData, ConstantCount);
+  This->UpdateStateBlock->Changed.vertexShaderConstant = TRUE;
+  memcpy(&This->UpdateStateBlock->vertexShaderConstant[Register], pConstantData, ConstantCount * 4 * sizeof(FLOAT));
+  return D3D_OK;
 }
 HRESULT  WINAPI  IDirect3DDevice8Impl_GetVertexShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register, void* pConstantData, DWORD ConstantCount) {
   ICOM_THIS(IDirect3DDevice8Impl,iface);
-  IDirect3DVertexShaderImpl* object;
-  DWORD Handle = This->UpdateStateBlock->VertexShader;
 
   if (Register + ConstantCount > D3D8_VSHADER_MAX_CONSTANTS) {
     return D3DERR_INVALIDCALL;
   }
-  object = VERTEX_SHADER(Handle);
-  if (NULL == object || NULL == pConstantData) {
+  if (NULL == pConstantData) {
     return D3DERR_INVALIDCALL;
   }
-  return IDirect3DVertexShaderImpl_GetConstantF(object, Register, pConstantData, ConstantCount);
+  memcpy(pConstantData, &This->UpdateStateBlock->vertexShaderConstant[Register], ConstantCount * 4 * sizeof(FLOAT));
+  return D3D_OK;
 }
 HRESULT  WINAPI  IDirect3DDevice8Impl_GetVertexShaderDeclaration(LPDIRECT3DDEVICE8 iface, DWORD Handle, void* pData, DWORD* pSizeOfData) {
   /*ICOM_THIS(IDirect3DDevice8Impl,iface);*/
Index: directx.c
===================================================================
RCS file: /home/wine/wine/dlls/d3d8/directx.c,v
retrieving revision 1.16
diff -u -r1.16 directx.c
--- directx.c	28 Jan 2003 01:12:23 -0000	1.16
+++ directx.c	28 Jan 2003 23:45:15 -0000
@@ -574,7 +574,7 @@
 
     glGetIntegerv(GL_MAX_LIGHTS, &gl_max);
     object->maxLights = min(MAX_ACTIVE_LIGHTS, gl_max);
-    TRACE("Lights support - max lights =%d\n", gl_max);
+    TRACE("Lights support - max lights=%d\n", gl_max);
 
     /* Parse the gl supported features, in theory enabling parts of our code appropriately */
     GL_Extensions = glGetString(GL_EXTENSIONS);


More information about the wine-patches mailing list