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

This commit is contained in:
Henri Verbeet 2009-08-12 09:44:26 +02:00 committed by Alexandre Julliard
parent 95bb4c0486
commit f7918b978f
5 changed files with 10 additions and 8 deletions

View File

@ -3384,7 +3384,7 @@ static GLuint shader_arb_generate_pshader(IWineD3DPixelShaderImpl *This, struct
i, compiled->bumpenvmatconst[cur].const_num); i, compiled->bumpenvmatconst[cur].const_num);
compiled->numbumpenvmatconsts = cur + 1; compiled->numbumpenvmatconsts = cur + 1;
if(!reg_maps->luminanceparams[i]) continue; if (!(reg_maps->luminanceparams & (1 << i))) continue;
compiled->luminanceconst[cur].const_num = next_local++; compiled->luminanceconst[cur].const_num = next_local++;
shader_addline(buffer, "PARAM luminance%d = program.local[%d];\n", shader_addline(buffer, "PARAM luminance%d = program.local[%d];\n",
@ -5262,8 +5262,9 @@ static void tex_bumpenvlum_arbfp(DWORD state, IWineD3DStateBlockImpl *stateblock
if (use_ps(stateblock)) if (use_ps(stateblock))
{ {
if(stage != 0 && if (stage != 0
((IWineD3DPixelShaderImpl *) stateblock->pixelShader)->baseShader.reg_maps.luminanceparams[stage]) { && (((IWineD3DPixelShaderImpl *)stateblock->pixelShader)->baseShader.reg_maps.luminanceparams & (1 << stage)))
{
/* The pixel shader has to know the luminance offset. Do a constants update if it /* The pixel shader has to know the luminance offset. Do a constants update if it
* isn't scheduled anyway * isn't scheduled anyway
*/ */

View File

@ -689,7 +689,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3
reg_maps->bumpmat |= 1 << dst_param.reg.idx; reg_maps->bumpmat |= 1 << dst_param.reg.idx;
if (ins.handler_idx == WINED3DSIH_TEXBEML) if (ins.handler_idx == WINED3DSIH_TEXBEML)
{ {
reg_maps->luminanceparams[sampler_code] = TRUE; reg_maps->luminanceparams |= 1 << dst_param.reg.idx;
} }
} }
} }

View File

@ -905,7 +905,7 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
shader_addline(buffer, "uniform mat2 bumpenvmat%d;\n", i); shader_addline(buffer, "uniform mat2 bumpenvmat%d;\n", i);
if (reg_maps->luminanceparams[i]) if (reg_maps->luminanceparams & (1 << i))
{ {
shader_addline(buffer, "uniform float luminancescale%d;\n", i); shader_addline(buffer, "uniform float luminancescale%d;\n", i);
shader_addline(buffer, "uniform float luminanceoffset%d;\n", i); shader_addline(buffer, "uniform float luminanceoffset%d;\n", i);

View File

@ -3368,8 +3368,9 @@ static void tex_bumpenvlscale(DWORD state, IWineD3DStateBlockImpl *stateblock, s
{ {
DWORD stage = (state - STATE_TEXTURESTAGE(0, 0)) / (WINED3D_HIGHEST_TEXTURE_STATE + 1); DWORD stage = (state - STATE_TEXTURESTAGE(0, 0)) / (WINED3D_HIGHEST_TEXTURE_STATE + 1);
if(stateblock->pixelShader && stage != 0 && if (stateblock->pixelShader && stage != 0
((IWineD3DPixelShaderImpl *) stateblock->pixelShader)->baseShader.reg_maps.luminanceparams[stage]) { && (((IWineD3DPixelShaderImpl *)stateblock->pixelShader)->baseShader.reg_maps.luminanceparams & (1 << stage)))
{
/* The pixel shader has to know the luminance scale. Do a constants update if it /* The pixel shader has to know the luminance scale. Do a constants update if it
* isn't scheduled anyway * isn't scheduled anyway
*/ */

View File

@ -643,7 +643,7 @@ typedef struct shader_reg_maps
WINED3DSAMPLER_TEXTURE_TYPE sampler_type[max(MAX_FRAGMENT_SAMPLERS, MAX_VERTEX_SAMPLERS)]; WINED3DSAMPLER_TEXTURE_TYPE sampler_type[max(MAX_FRAGMENT_SAMPLERS, MAX_VERTEX_SAMPLERS)];
BYTE bumpmat; /* MAX_TEXTURES, 8 */ BYTE bumpmat; /* MAX_TEXTURES, 8 */
BOOL luminanceparams[MAX_TEXTURES]; BYTE luminanceparams; /* MAX_TEXTURES, 8 */
WORD usesnrm : 1; WORD usesnrm : 1;
WORD vpos : 1; WORD vpos : 1;