wined3d: Make the "labels" shader_reg_maps member a bitmap.
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 @@ 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 @@ 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 @@ 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 */