[PATCH 1/5] wined3d: Introduce wined3d_bitmap_is_set().
Henri Verbeet
hverbeet at codeweavers.com
Tue Feb 18 10:52:03 CST 2020
From: Paul Gofman <gofmanp at gmail.com>
Signed-off-by: Paul Gofman <gofmanp at gmail.com>
Signed-off-by: Henri Verbeet <hverbeet at 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"
--
2.20.1
More information about the wine-devel
mailing list