From 76941eff009bebf5b1d1a101564035240ff75387 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20D=C3=B6singer?= Date: Thu, 25 Apr 2013 15:20:30 +0200 Subject: [PATCH] wined3d: Move gl_info->limits.max_texture_stages to d3d_info. --- dlls/wined3d/arb_program_shader.c | 4 ++-- dlls/wined3d/ati_fragment_shader.c | 3 ++- dlls/wined3d/device.c | 30 +++++++++++++++--------------- dlls/wined3d/directx.c | 4 ++-- dlls/wined3d/drawprim.c | 3 ++- dlls/wined3d/state.c | 20 +++++++++++--------- dlls/wined3d/utils.c | 2 +- dlls/wined3d/wined3d_private.h | 7 ++++--- 8 files changed, 39 insertions(+), 34 deletions(-) diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index 66282ff7d0..7cd73a2193 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -4319,7 +4319,7 @@ static struct arb_ps_compiled_shader *find_arb_pshader(struct wined3d_shader *sh if (!d3d_info->vs_clipping) shader_data->clipplane_emulation = shader_find_free_input_register(&shader->reg_maps, - gl_info->limits.texture_stages - 1); + d3d_info->limits.ffp_blend_stages - 1); else shader_data->clipplane_emulation = ~0U; } @@ -4555,7 +4555,7 @@ static void find_arb_vs_compile_args(const struct wined3d_state *state, args->ps_signature = ~0; if (!d3d_info->vs_clipping && adapter->fragment_pipe == &arbfp_fragment_pipeline) { - args->clip.boolclip.clip_texcoord = ffp_clip_emul(state) ? gl_info->limits.texture_stages : 0; + args->clip.boolclip.clip_texcoord = ffp_clip_emul(state) ? d3d_info->limits.ffp_blend_stages : 0; } /* Otherwise: Setting boolclip_compare set clip_texcoord to 0 */ } diff --git a/dlls/wined3d/ati_fragment_shader.c b/dlls/wined3d/ati_fragment_shader.c index 4832abe795..d219111ec1 100644 --- a/dlls/wined3d/ati_fragment_shader.c +++ b/dlls/wined3d/ati_fragment_shader.c @@ -838,6 +838,7 @@ static void set_tex_op_atifs(struct wined3d_context *context, const struct wined { const struct wined3d_device *device = context->swapchain->device; const struct wined3d_gl_info *gl_info = context->gl_info; + const struct wined3d_d3d_info *d3d_info = context->d3d_info; const struct atifs_ffp_desc *desc; struct ffp_frag_settings settings; struct atifs_private_data *priv = device->fragment_priv; @@ -854,7 +855,7 @@ static void set_tex_op_atifs(struct wined3d_context *context, const struct wined return; } new_desc->num_textures_used = 0; - for (i = 0; i < gl_info->limits.texture_stages; ++i) + for (i = 0; i < d3d_info->limits.ffp_blend_stages; ++i) { if (settings.op[i].cop == WINED3D_TOP_DISABLE) break; diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 61b2f2aa7b..47da78bfd6 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -2710,8 +2710,7 @@ static void device_update_fixed_function_usage_map(struct wined3d_device *device } } -static void device_map_fixed_function_samplers(struct wined3d_device *device, const struct wined3d_gl_info *gl_info, - const struct wined3d_d3d_info *d3d_info) +static void device_map_fixed_function_samplers(struct wined3d_device *device, const struct wined3d_d3d_info *d3d_info) { unsigned int i, tex; WORD ffu_map; @@ -2719,7 +2718,7 @@ static void device_map_fixed_function_samplers(struct wined3d_device *device, co device_update_fixed_function_usage_map(device); ffu_map = device->fixed_function_usage_map; - if (d3d_info->limits.ffp_textures == gl_info->limits.texture_stages + if (d3d_info->limits.ffp_textures == d3d_info->limits.ffp_blend_stages || device->stateBlock->state.lowest_disabled_stage <= d3d_info->limits.ffp_textures) { for (i = 0; ffu_map; ffu_map >>= 1, ++i) @@ -2753,7 +2752,7 @@ static void device_map_fixed_function_samplers(struct wined3d_device *device, co } } -static void device_map_psamplers(struct wined3d_device *device, const struct wined3d_gl_info *gl_info) +static void device_map_psamplers(struct wined3d_device *device, const struct wined3d_d3d_info *d3d_info) { const enum wined3d_sampler_texture_type *sampler_type = device->stateBlock->state.pixel_shader->reg_maps.sampler_type; @@ -2765,7 +2764,7 @@ static void device_map_psamplers(struct wined3d_device *device, const struct win { device_map_stage(device, i, i); device_invalidate_state(device, STATE_SAMPLER(i)); - if (i < gl_info->limits.texture_stages) + if (i < d3d_info->limits.ffp_blend_stages) device_invalidate_texture_stage(device, i); } } @@ -2853,9 +2852,9 @@ void device_update_tex_unit_map(struct wined3d_device *device) * to be reset. Because of that try to work with a 1:1 mapping as much as possible */ if (ps) - device_map_psamplers(device, gl_info); + device_map_psamplers(device, d3d_info); else - device_map_fixed_function_samplers(device, gl_info, d3d_info); + device_map_fixed_function_samplers(device, d3d_info); if (vs) device_map_vsamplers(device, ps, gl_info); @@ -3568,7 +3567,7 @@ HRESULT CDECL wined3d_device_process_vertices(struct wined3d_device *device, void CDECL wined3d_device_set_texture_stage_state(struct wined3d_device *device, UINT stage, enum wined3d_texture_stage_state state, DWORD value) { - const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; + const struct wined3d_d3d_info *d3d_info = &device->adapter->d3d_info; DWORD old_value; TRACE("device %p, stage %u, state %s, value %#x.\n", @@ -3580,10 +3579,10 @@ void CDECL wined3d_device_set_texture_stage_state(struct wined3d_device *device, return; } - if (stage >= gl_info->limits.texture_stages) + if (stage >= d3d_info->limits.ffp_blend_stages) { WARN("Attempting to set stage %u which is higher than the max stage %u, ignoring.\n", - stage, gl_info->limits.texture_stages - 1); + stage, d3d_info->limits.ffp_blend_stages - 1); return; } @@ -3642,7 +3641,7 @@ void CDECL wined3d_device_set_texture_stage_state(struct wined3d_device *device, * * Again stage stage doesn't need to be dirtified here, it is * handled below. */ - for (i = stage + 1; i < gl_info->limits.texture_stages; ++i) + for (i = stage + 1; i < d3d_info->limits.ffp_blend_stages; ++i) { if (device->updateStateBlock->state.texture_states[i][WINED3D_TSS_COLOR_OP] == WINED3D_TOP_DISABLE) break; @@ -3675,7 +3674,7 @@ DWORD CDECL wined3d_device_get_texture_stage_state(const struct wined3d_device * HRESULT CDECL wined3d_device_set_texture(struct wined3d_device *device, UINT stage, struct wined3d_texture *texture) { - const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; + const struct wined3d_d3d_info *d3d_info = &device->adapter->d3d_info; struct wined3d_texture *prev; TRACE("device %p, stage %u, texture %p.\n", device, stage, texture); @@ -3729,7 +3728,7 @@ HRESULT CDECL wined3d_device_set_texture(struct wined3d_device *device, if (!prev || texture->target != prev->target) device_invalidate_state(device, STATE_PIXELSHADER); - if (!prev && stage < gl_info->limits.texture_stages) + if (!prev && stage < d3d_info->limits.ffp_blend_stages) { /* The source arguments for color and alpha ops have different * meanings when a NULL texture is bound, so the COLOR_OP and @@ -3746,7 +3745,7 @@ HRESULT CDECL wined3d_device_set_texture(struct wined3d_device *device, { LONG bind_count = InterlockedDecrement(&prev->resource.bind_count); - if (!texture && stage < gl_info->limits.texture_stages) + if (!texture && stage < d3d_info->limits.ffp_blend_stages) { device_invalidate_state(device, STATE_TEXTURESTAGE(stage, WINED3D_TSS_COLOR_OP)); device_invalidate_state(device, STATE_TEXTURESTAGE(stage, WINED3D_TSS_ALPHA_OP)); @@ -5436,7 +5435,8 @@ HRESULT device_init(struct wined3d_device *device, struct wined3d *wined3d, if (vertex_pipeline->vp_states && fragment_pipeline->states && FAILED(hr = compile_state_table(device->StateTable, device->multistate_funcs, - &adapter->gl_info, vertex_pipeline, fragment_pipeline, misc_state_template))) + &adapter->gl_info, &adapter->d3d_info, vertex_pipeline, + fragment_pipeline, misc_state_template))) { ERR("Failed to compile state table, hr %#x.\n", hr); wined3d_decref(device->wined3d); diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index dd3b9a3b62..3f3cf3af26 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -2854,9 +2854,9 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter) adapter->d3d_info.limits.ps_uniform_count = shader_caps.ps_uniform_count; adapter->fragment_pipe->get_caps(gl_info, &fragment_caps); - gl_info->limits.texture_stages = fragment_caps.MaxTextureBlendStages; + adapter->d3d_info.limits.ffp_blend_stages = fragment_caps.MaxTextureBlendStages; adapter->d3d_info.limits.ffp_textures = fragment_caps.MaxSimultaneousTextures; - TRACE("Max texture stages: %u.\n", gl_info->limits.texture_stages); + TRACE("Max texture stages: %u.\n", adapter->d3d_info.limits.ffp_blend_stages); if (gl_info->supported[ARB_FRAMEBUFFER_OBJECT]) { diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c index 24d367c878..c75ab59afb 100644 --- a/dlls/wined3d/drawprim.c +++ b/dlls/wined3d/drawprim.c @@ -98,7 +98,8 @@ static void drawStridedSlow(const struct wined3d_device *device, const struct wi const BYTE *texCoords[WINED3DDP_MAXTEXCOORD]; const BYTE *diffuse = NULL, *specular = NULL, *normal = NULL, *position = NULL; const struct wined3d_gl_info *gl_info = context->gl_info; - UINT texture_stages = gl_info->limits.texture_stages; + const struct wined3d_d3d_info *d3d_info = context->d3d_info; + UINT texture_stages = d3d_info->limits.ffp_blend_stages; const struct wined3d_stream_info_element *element; UINT num_untracked_materials; DWORD tex_mask = 0; diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c index 5de7f4349f..46ab99028e 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c @@ -789,7 +789,7 @@ static void state_texfactor(struct wined3d_context *context, const struct wined3 D3DCOLORTOGLFLOAT4(state->render_states[WINED3D_RS_TEXTUREFACTOR], col); /* And now the default texture color as well */ - for (i = 0; i < gl_info->limits.texture_stages; ++i) + for (i = 0; i < context->d3d_info->limits.ffp_blend_stages; ++i) { /* Note the WINED3D_RS value applies to all textures, but GL has one * per texture, so apply it now ready to be used! */ @@ -3376,7 +3376,7 @@ static void load_tex_coords(const struct wined3d_context *context, const struct unsigned int mapped_stage = 0; unsigned int textureNo = 0; - for (textureNo = 0; textureNo < gl_info->limits.texture_stages; ++textureNo) + for (textureNo = 0; textureNo < context->d3d_info->limits.ffp_blend_stages; ++textureNo) { int coordIdx = state->texture_states[textureNo][WINED3D_TSS_TEXCOORD_INDEX]; @@ -3751,7 +3751,7 @@ void apply_pixelshader(struct wined3d_context *context, const struct wined3d_sta { /* Disabled the pixel shader - color ops weren't applied while it was * enabled, so re-apply them. */ - for (i = 0; i < context->gl_info->limits.texture_stages; ++i) + for (i = 0; i < context->d3d_info->limits.ffp_blend_stages; ++i) { if (!isStateDirty(context, STATE_TEXTURESTAGE(i, WINED3D_TSS_COLOR_OP))) context_apply_state(context, state, STATE_TEXTURESTAGE(i, WINED3D_TSS_COLOR_OP)); @@ -5813,11 +5813,12 @@ static void multistate_apply_3(struct wined3d_context *context, const struct win context->swapchain->device->multistate_funcs[state_id][2](context, state, state_id); } -static void prune_invalid_states(struct StateEntry *state_table, const struct wined3d_gl_info *gl_info) +static void prune_invalid_states(struct StateEntry *state_table, const struct wined3d_gl_info *gl_info, + const struct wined3d_d3d_info *d3d_info) { unsigned int start, last, i; - start = STATE_TEXTURESTAGE(gl_info->limits.texture_stages, 0); + start = STATE_TEXTURESTAGE(d3d_info->limits.ffp_blend_stages, 0); last = STATE_TEXTURESTAGE(MAX_TEXTURES - 1, WINED3D_HIGHEST_TEXTURE_STATE); for (i = start; i <= last; ++i) { @@ -5825,7 +5826,7 @@ static void prune_invalid_states(struct StateEntry *state_table, const struct wi state_table[i].apply = state_undefined; } - start = STATE_TRANSFORM(WINED3D_TS_TEXTURE0 + gl_info->limits.texture_stages); + start = STATE_TRANSFORM(WINED3D_TS_TEXTURE0 + d3d_info->limits.ffp_blend_stages); last = STATE_TRANSFORM(WINED3D_TS_TEXTURE0 + MAX_TEXTURES - 1); for (i = start; i <= last; ++i) { @@ -5930,8 +5931,9 @@ static void validate_state_table(struct StateEntry *state_table) } HRESULT compile_state_table(struct StateEntry *StateTable, APPLYSTATEFUNC **dev_multistate_funcs, - const struct wined3d_gl_info *gl_info, const struct wined3d_vertex_pipe_ops *vertex, - const struct fragment_pipeline *fragment, const struct StateEntryTemplate *misc) + const struct wined3d_gl_info *gl_info, const struct wined3d_d3d_info *d3d_info, + const struct wined3d_vertex_pipe_ops *vertex, const struct fragment_pipeline *fragment, + const struct StateEntryTemplate *misc) { unsigned int i, type, handlers; APPLYSTATEFUNC multistate_funcs[STATE_HIGHEST + 1][3]; @@ -6028,7 +6030,7 @@ HRESULT compile_state_table(struct StateEntry *StateTable, APPLYSTATEFUNC **dev_ } } - prune_invalid_states(StateTable, gl_info); + prune_invalid_states(StateTable, gl_info, d3d_info); validate_state_table(StateTable); return WINED3D_OK; diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index cc615bca30..004ee00018 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -3133,7 +3133,7 @@ void gen_ffp_frag_op(const struct wined3d_context *context, const struct wined3d const struct wined3d_gl_info *gl_info = context->gl_info; const struct wined3d_d3d_info *d3d_info = context->d3d_info; - for (i = 0; i < gl_info->limits.texture_stages; ++i) + for (i = 0; i < d3d_info->limits.ffp_blend_stages; ++i) { const struct wined3d_texture *texture; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 550dc63e0a..9f68cf90bc 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1221,8 +1221,9 @@ extern const struct wined3d_vertex_pipe_ops ffp_vertex_pipe DECLSPEC_HIDDEN; /* "Base" state table */ HRESULT compile_state_table(struct StateEntry *StateTable, APPLYSTATEFUNC **dev_multistate_funcs, - const struct wined3d_gl_info *gl_info, const struct wined3d_vertex_pipe_ops *vertex, - const struct fragment_pipeline *fragment, const struct StateEntryTemplate *misc) DECLSPEC_HIDDEN; + const struct wined3d_gl_info *gl_info, const struct wined3d_d3d_info *d3d_info, + const struct wined3d_vertex_pipe_ops *vertex, const struct fragment_pipeline *fragment, + const struct StateEntryTemplate *misc) DECLSPEC_HIDDEN; enum wined3d_blit_op { @@ -1528,7 +1529,6 @@ struct wined3d_gl_limits UINT buffers; UINT lights; UINT textures; - UINT texture_stages; UINT texture_coords; UINT fragment_samplers; UINT vertex_samplers; @@ -1593,6 +1593,7 @@ struct wined3d_d3d_limits DWORD vs_uniform_count; DWORD ps_uniform_count; UINT ffp_textures; + UINT ffp_blend_stages; }; struct wined3d_d3d_info -- 2.32.0.93.g670b81a890