Henri Verbeet : wined3d: Make the "temporary" shader_reg_maps member a bitmap.
Alexandre Julliard
julliard at winehq.org
Tue Aug 11 10:47:26 CDT 2009
Module: wine
Branch: master
Commit: 6fa9fa15dadcbf53fd0afa72c504a050d8ecd99a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6fa9fa15dadcbf53fd0afa72c504a050d8ecd99a
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Tue Aug 11 09:42:16 2009 +0200
wined3d: Make the "temporary" shader_reg_maps member a bitmap.
---
dlls/wined3d/arb_program_shader.c | 26 +++++++++++++-------------
dlls/wined3d/baseshader.c | 2 +-
dlls/wined3d/glsl_shader.c | 6 +++---
dlls/wined3d/wined3d_private.h | 2 +-
4 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index 08ca52f..ed3ab72 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -659,9 +659,9 @@ static DWORD shader_generate_arb_declarations(IWineD3DBaseShader *iface, const s
}
}
- for(i = 0; i < This->baseShader.limits.temporary; i++) {
- if (reg_maps->temporary[i])
- shader_addline(buffer, "TEMP R%u;\n", i);
+ for (i = 0, map = reg_maps->temporary; map; map >>= 1, ++i)
+ {
+ if (map & 1) shader_addline(buffer, "TEMP R%u;\n", i);
}
for (i = 0; i < This->baseShader.limits.address; i++) {
@@ -3215,21 +3215,21 @@ static GLuint shader_arb_generate_pshader(IWineD3DPixelShaderImpl *This, struct
BOOL dcl_tmp = args->super.srgb_correction, dcl_td = FALSE;
BOOL want_nv_prog = FALSE;
struct arb_pshader_private *shader_priv = This->backend_priv;
+ DWORD map;
char srgbtmp[4][4];
unsigned int i, found = 0;
- for(i = 0; i < This->baseShader.limits.temporary; i++) {
-
- /* Don't overwrite the color source */
- if(This->color0_mov && i == This->color0_reg) continue;
- else if(reg_maps->shader_version.major < 2 && i == 0) continue;
+ for (i = 0, map = reg_maps->temporary; map; map >>= 1, ++i)
+ {
+ if (!(map & 1)
+ || (This->color0_mov && i == This->color0_reg)
+ || (reg_maps->shader_version.major < 2 && i == 0))
+ continue;
- if(reg_maps->temporary[i]) {
- sprintf(srgbtmp[found], "R%u", i);
- found++;
- if(found == 4) break;
- }
+ sprintf(srgbtmp[found], "R%u", i);
+ ++found;
+ if (found == 4) break;
}
switch(found) {
diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index 1669c7c..12c5fba 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -262,7 +262,7 @@ static void shader_record_register_usage(IWineD3DBaseShaderImpl *This, struct sh
break;
case WINED3DSPR_TEMP:
- reg_maps->temporary[reg->idx] = 1;
+ reg_maps->temporary |= 1 << reg->idx;
break;
case WINED3DSPR_INPUT:
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 3fd92fd..33b723a 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -1038,9 +1038,9 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
}
/* Declare temporary variables */
- for(i = 0; i < This->baseShader.limits.temporary; i++) {
- if (reg_maps->temporary[i])
- shader_addline(buffer, "vec4 R%u;\n", i);
+ for (i = 0, map = reg_maps->temporary; map; map >>= 1, ++i)
+ {
+ if (map & 1) shader_addline(buffer, "vec4 R%u;\n", i);
}
/* Declare attributes */
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index f95adcb..ca79262 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -629,7 +629,7 @@ typedef struct shader_reg_maps
{
struct wined3d_shader_version shader_version;
BYTE texcoord; /* MAX_REG_TEXCRD, 8 */
- char temporary[MAX_REG_TEMP]; /* pixel, vertex */
+ DWORD temporary; /* MAX_REG_TEMP, 32 */
char address[MAX_REG_ADDR]; /* vertex */
char labels[MAX_LABELS]; /* pixel, vertex */
DWORD *constf; /* pixel, vertex */
More information about the wine-cvs
mailing list