Module: wine Branch: master Commit: 3d718d641485a71095230bf5d67b1907c5d6c7e9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3d718d641485a71095230bf5d6...
Author: Henri Verbeet hverbeet@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 */