diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 55b161d0927..5d3a7ce2f27 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -3263,47 +3263,23 @@ static void device_map_fixed_function_samplers(IWineD3DDeviceImpl *This) { device_update_fixed_function_usage_map(This); if (This->stateBlock->lowest_disabled_stage <= GL_LIMITS(textures)) { - for (i = 0; i < MAX_FRAGMENT_SAMPLERS; ++i) { + for (i = 0; i < This->stateBlock->lowest_disabled_stage; ++i) { + if (!This->fixed_function_usage_map[i]) continue; + if (This->texUnitMap[i] != i) { device_map_stage(This, i, i); IWineD3DDeviceImpl_MarkStateDirty(This, STATE_SAMPLER(i)); - if (i < MAX_TEXTURES) { - markTextureStagesDirty(This, i); - } + markTextureStagesDirty(This, i); } } return; } - /* No pixel shader, and we do not have enough texture units available. Try to skip NULL textures - * First, see if we can succeed at all - */ - tex = 0; - for (i = 0; i < This->stateBlock->lowest_disabled_stage; ++i) { - if (!This->fixed_function_usage_map[i]) ++tex; - } - - if (GL_LIMITS(textures) + tex < This->stateBlock->lowest_disabled_stage) { - FIXME("Too many bound textures to support the combiner settings\n"); - return; - } - /* Now work out the mapping */ tex = 0; - This->oneToOneTexUnitMap = FALSE; - WARN("Non 1:1 mapping UNTESTED!\n"); for (i = 0; i < This->stateBlock->lowest_disabled_stage; ++i) { - /* Skip NULL textures */ - if (!This->fixed_function_usage_map[i]) { - /* Map to -1, so the check below doesn't fail if a non-NULL - * texture is set on this stage */ - TRACE("Mapping texture stage %d to -1\n", i); - device_map_stage(This, i, -1); + if (!This->fixed_function_usage_map[i]) continue; - continue; - } - - TRACE("Mapping texture stage %d to unit %d\n", i, tex); if (This->texUnitMap[i] != tex) { device_map_stage(This, i, tex); IWineD3DDeviceImpl_MarkStateDirty(This, STATE_SAMPLER(i));