From: Paul Gofman gofmanp@gmail.com
Signed-off-by: Paul Gofman gofmanp@gmail.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com --- dlls/wined3d/arb_program_shader.c | 4 +-- dlls/wined3d/device.c | 43 ++++++++++++++++--------------- dlls/wined3d/wined3d_private.h | 5 ++++ 3 files changed, 28 insertions(+), 24 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index 14ca883e761..c39694f441e 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -807,9 +807,7 @@ static void shader_generate_arb_declarations(const struct wined3d_shader *shader
for (i = 0; i < shader->limits->constant_float; ++i) { - DWORD idx = i >> 5; - DWORD shift = i & 0x1f; - if (reg_maps->constf[idx] & (1u << shift)) + if (wined3d_bitmap_is_set(reg_maps->constf, i)) highest_constf = i; }
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 84056437414..d709ca189c2 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -3836,19 +3836,20 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, { const struct wined3d_d3d_info *d3d_info = &stateblock->device->adapter->d3d_info; const struct wined3d_stateblock_state *state = &stateblock->stateblock_state; + const struct wined3d_saved_states *changed = &stateblock->changed; unsigned int i, j, count;
TRACE("device %p, stateblock %p.\n", device, stateblock);
- if (stateblock->changed.vertexShader) + if (changed->vertexShader) wined3d_device_set_vertex_shader(device, state->vs); - if (stateblock->changed.pixelShader) + if (changed->pixelShader) wined3d_device_set_pixel_shader(device, state->ps);
count = 0; for (i = 0; i < d3d_info->limits.vs_uniform_count; ++i) { - if (stateblock->changed.vs_consts_f[i]) + if (changed->vs_consts_f[i]) ++count; else if (count) { @@ -3862,7 +3863,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, count = 0; for (i = 0; i < WINED3D_MAX_CONSTS_B; ++i) { - if (stateblock->changed.vertexShaderConstantsB & (1u << i)) + if (changed->vertexShaderConstantsB & (1u << i)) ++count; else if (count) { @@ -3876,7 +3877,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, count = 0; for (i = 0; i < WINED3D_MAX_CONSTS_I; ++i) { - if (stateblock->changed.vertexShaderConstantsI & (1u << i)) + if (changed->vertexShaderConstantsI & (1u << i)) ++count; else if (count) { @@ -3890,7 +3891,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, count = 0; for (i = 0; i < d3d_info->limits.ps_uniform_count; ++i) { - if (stateblock->changed.ps_consts_f[i]) + if (changed->ps_consts_f[i]) ++count; else if (count) { @@ -3904,7 +3905,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, count = 0; for (i = 0; i < WINED3D_MAX_CONSTS_B; ++i) { - if (stateblock->changed.pixelShaderConstantsB & (1u << i)) + if (changed->pixelShaderConstantsB & (1u << i)) ++count; else if (count) { @@ -3918,7 +3919,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, count = 0; for (i = 0; i < WINED3D_MAX_CONSTS_I; ++i) { - if (stateblock->changed.pixelShaderConstantsI & (1u << i)) + if (changed->pixelShaderConstantsI & (1u << i)) ++count; else if (count) { @@ -3942,7 +3943,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device,
for (i = 0; i < ARRAY_SIZE(state->rs); ++i) { - if (stateblock->changed.renderState[i >> 5] & (1u << (i & 0x1f))) + if (wined3d_bitmap_is_set(changed->renderState, i)) { if (i == WINED3D_RS_BLENDFACTOR) { @@ -3959,7 +3960,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, { for (j = 0; j < ARRAY_SIZE(state->texture_states[i]); ++j) { - if (stateblock->changed.textureState[i] & (1u << j)) + if (changed->textureState[i] & (1u << j)) wined3d_device_set_texture_stage_state(device, i, j, state->texture_states[i][j]); } } @@ -3971,35 +3972,35 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, stage += WINED3DVERTEXTEXTURESAMPLER0 - WINED3D_MAX_FRAGMENT_SAMPLERS; for (j = 0; j < ARRAY_SIZE(state->sampler_states[j]); ++j) { - if (stateblock->changed.samplerState[i] & (1 << j)) + if (changed->samplerState[i] & (1 << j)) wined3d_device_set_sampler_state(device, stage, j, state->sampler_states[i][j]); } }
for (i = 0; i < ARRAY_SIZE(state->transforms); ++i) { - if (stateblock->changed.transform[i >> 5] & (1u << (i & 0x1f))) + if (wined3d_bitmap_is_set(changed->transform, i)) wined3d_device_set_transform(device, i, &state->transforms[i]); }
- if (stateblock->changed.indices) + if (changed->indices) wined3d_device_set_index_buffer(device, state->index_buffer, state->index_format, 0); wined3d_device_set_base_vertex_index(device, state->base_vertex_index); - if (stateblock->changed.vertexDecl) + if (changed->vertexDecl) wined3d_device_set_vertex_declaration(device, state->vertex_declaration); - if (stateblock->changed.material) + if (changed->material) wined3d_device_set_material(device, &state->material); - if (stateblock->changed.viewport) + if (changed->viewport) wined3d_device_set_viewports(device, 1, &state->viewport); - if (stateblock->changed.scissorRect) + if (changed->scissorRect) wined3d_device_set_scissor_rects(device, 1, &state->scissor_rect);
for (i = 0; i < ARRAY_SIZE(state->streams); ++i) { - if (stateblock->changed.streamSource & (1u << i)) + if (changed->streamSource & (1u << i)) wined3d_device_set_stream_source(device, i, state->streams[i].buffer, state->streams[i].offset, state->streams[i].stride); - if (stateblock->changed.streamFreq & (1u << i)) + if (changed->streamFreq & (1u << i)) wined3d_device_set_stream_source_freq(device, i, state->streams[i].frequency | state->streams[i].flags); } @@ -4009,13 +4010,13 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, DWORD stage = i; if (stage >= WINED3D_MAX_FRAGMENT_SAMPLERS) stage += WINED3DVERTEXTEXTURESAMPLER0 - WINED3D_MAX_FRAGMENT_SAMPLERS; - if (stateblock->changed.textures & (1u << i)) + if (changed->textures & (1u << i)) wined3d_device_set_texture(device, stage, state->textures[i]); }
for (i = 0; i < ARRAY_SIZE(state->clip_planes); ++i) { - if (stateblock->changed.clipplane & (1u << i)) + if (changed->clipplane & (1u << i)) wined3d_device_set_clip_plane(device, i, &state->clip_planes[i]); }
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 0e1e55d52bf..92634b71551 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -5327,6 +5327,11 @@ static inline void wined3d_viewport_get_z_range(const struct wined3d_viewport *v *max_z = max(vp->max_z, vp->min_z + 0.001f); }
+static inline BOOL wined3d_bitmap_is_set(const uint32_t *map, unsigned int idx) +{ + return map[idx >> 5] & (1u << (idx & 0x1f)); +} + /* The WNDCLASS-Name for the fake window which we use to retrieve the GL capabilities */ #define WINED3D_OPENGL_WINDOW_CLASS_NAME "WineD3D_OpenGL"