Henri Verbeet : wined3d: Make the "labels" shader_reg_maps member a bitmap.

Alexandre Julliard julliard at winehq.org
Wed Aug 12 11:09:13 CDT 2009


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Wed Aug 12 09:44:24 2009 +0200

wined3d: Make the "labels" shader_reg_maps member a bitmap.

---

 dlls/wined3d/baseshader.c      |    2 +-
 dlls/wined3d/glsl_shader.c     |    6 +++---
 dlls/wined3d/wined3d_private.h |    2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index 1fcc8b8..3530eab 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -599,7 +599,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3
             struct wined3d_shader_src_param src, rel_addr;
 
             fe->shader_read_src_param(fe_data, &pToken, &src, &rel_addr);
-            reg_maps->labels[src.reg.idx] = 1;
+            reg_maps->labels |= 1 << src.reg.idx;
         }
         /* Set texture, address, temporary registers */
         else
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 69aa320..8488c29 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -821,9 +821,9 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
     char prefix = pshader ? 'P' : 'V';
 
     /* Prototype the subroutines */
-    for (i = 0; i < This->baseShader.limits.label; i++) {
-        if (reg_maps->labels[i])
-            shader_addline(buffer, "void subroutine%u();\n", i);
+    for (i = 0, map = reg_maps->labels; map; map >>= 1, ++i)
+    {
+        if (map & 1) shader_addline(buffer, "void subroutine%u();\n", i);
     }
 
     /* Declare the constants (aka uniforms) */
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 36c1f17..bac13cd 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -630,8 +630,8 @@ typedef struct shader_reg_maps
     struct wined3d_shader_version shader_version;
     BYTE texcoord;                          /* MAX_REG_TEXCRD, 8 */
     BYTE address;                           /* MAX_REG_ADDR, 1 */
+    WORD labels;                            /* MAX_LABELS, 16 */
     DWORD temporary;                        /* MAX_REG_TEMP, 32 */
-    char labels[MAX_LABELS];                /* pixel, vertex */
     DWORD *constf;                          /* pixel, vertex */
     DWORD texcoord_mask[MAX_REG_TEXCRD];    /* vertex < 3.0 */
     WORD input_registers;                   /* max(MAX_REG_INPUT, MAX_ATTRIBS), 16 */




More information about the wine-cvs mailing list