[WINED3D 1/8] Place number of textures/addresses and temps used inside the baseShader struct to prepare for merging of GenerateShader routine.

Jason Green jave27 at gmail.com
Fri May 5 10:29:15 CDT 2006


The following 8 patches apply to Mike's tree and accomplish the following:

- Create a new function in baseshader named generate_base_shader()
which generates the bulk of the GL ARB shader string.
- Renames the GenerateProgramArbHW() in both ps & vs to
GenerateShader() and minimizes the number of specific things that need
to go in them.
- Standardizes the outputted TRACE strings between both pixel and
vertex shaders for the d3d_shader channel.
- Re-arranges the order of declarations at the top of the shader
string which doesn't matter, but is needed in order to succesfully
merge the two functions.

This entire patchset from a functionality standpoint is a no-op, but
the TRACE lines will change a bit (for the better).
-------------- next part --------------
Subject: [PATCH 1/8] Place number of textures/addresses and temps used inside the baseShader struct to prepare for merging of GenerateShader routine.

---

 dlls/wined3d/baseshader.c      |    8 +++++---
 dlls/wined3d/pixelshader.c     |    5 ++++-
 dlls/wined3d/vertexshader.c    |    5 ++++-
 dlls/wined3d/wined3d_private.h |    6 +++---
 4 files changed, 16 insertions(+), 8 deletions(-)

d28ffdc13be6b0ee3fb29e30d940e45d0291acd4
diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index 2eb1d3c..4fbfaf5 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -96,9 +96,11 @@ const SHADER_OPCODE* shader_get_opcode(
 
 void shader_get_registers_used(
     IWineD3DBaseShader *iface,
-    CONST DWORD* pToken, 
-    DWORD* tempsUsed, 
-    DWORD* texUsed) {
+    CONST DWORD* pToken) {
+
+    IWineD3DBaseShaderImpl* This = (IWineD3DBaseShaderImpl*) iface;
+    DWORD* tempsUsed = &This->baseShader.temps_used;
+    DWORD* texUsed = &This->baseShader.textures_used;
 
     if (pToken == NULL)
         return;
diff --git a/dlls/wined3d/pixelshader.c b/dlls/wined3d/pixelshader.c
index 191866d..0692543 100644
--- a/dlls/wined3d/pixelshader.c
+++ b/dlls/wined3d/pixelshader.c
@@ -1337,7 +1337,10 @@ inline static VOID IWineD3DPixelShaderIm
         This->constants[i] = 0;
 
     /* First pass: figure out which temporary and texture registers are used */
-    shader_get_registers_used((IWineD3DBaseShader*) This, pToken, &tempsUsed, &texUsed);
+    shader_get_registers_used((IWineD3DBaseShader*) This, pToken);
+    texUsed = This->baseShader.textures_used;
+    tempsUsed = This->baseShader.temps_used;
+
     TRACE("Texture registers used: %#lx, Temp registers used %#lx\n", texUsed, tempsUsed);
 
     /* TODO: check register usage against GL/Directx limits, and fail if they're exceeded */
diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c
index 04beabc..42d64a4 100644
--- a/dlls/wined3d/vertexshader.c
+++ b/dlls/wined3d/vertexshader.c
@@ -1153,7 +1153,10 @@ inline static VOID IWineD3DVertexShaderI
     buffer.lineNo = 0;
 
     /* First pass: figure out which temporary and texture registers are used */
-    shader_get_registers_used((IWineD3DBaseShader*) This, pToken, &tempsUsed, &addressUsed);
+    shader_get_registers_used((IWineD3DBaseShader*) This, pToken);
+    addressUsed = This->baseShader.textures_used;
+    tempsUsed = This->baseShader.temps_used;
+
     TRACE("Address registers used: %#lx, Temp registers used %#lx\n", addressUsed, tempsUsed);
 
     /* TODO: check register usage against GL/Directx limits, and fail if they're exceeded
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 126883a..674f17b 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1243,9 +1243,7 @@ extern const SHADER_OPCODE* shader_get_o
 
 extern void shader_get_registers_used(
     IWineD3DBaseShader *iface,
-    CONST DWORD* pToken,
-    DWORD* tempsUsed,
-    DWORD* texUsed);
+    CONST DWORD* pToken);
 
 extern void shader_program_dump_decl_usage(
     DWORD dcl,
@@ -1266,6 +1264,8 @@ typedef struct IWineD3DBaseShaderClass
 {
     DWORD                           version;
     DWORD                           hex_version;
+    DWORD                           temps_used;
+    DWORD                           textures_used;
     SHADER_LIMITS                   limits;
     SHADER_PARSE_STATE              parse_state;
     CONST SHADER_OPCODE             *shader_ins;
-- 
1.1.3


More information about the wine-patches mailing list