wined3d: Pass a wined3d_context structure to fragment_pipeline.enable_extension().
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
fe17f2adf9
commit
9cb81bfad4
|
@ -2020,7 +2020,7 @@ static const struct wined3d_vertex_pipe_ops *select_vertex_implementation(const
|
|||
return &ffp_vertex_pipe;
|
||||
}
|
||||
|
||||
static const struct fragment_pipeline *select_fragment_implementation(const struct wined3d_gl_info *gl_info,
|
||||
static const struct wined3d_fragment_pipe_ops *select_fragment_implementation(const struct wined3d_gl_info *gl_info,
|
||||
const struct wined3d_shader_backend_ops *shader_backend_ops)
|
||||
{
|
||||
if (shader_backend_ops == &glsl_shader_backend && gl_info->supported[ARB_FRAGMENT_SHADER])
|
||||
|
|
|
@ -304,7 +304,7 @@ struct shader_arb_priv
|
|||
const struct wined3d_context *last_context;
|
||||
|
||||
const struct wined3d_vertex_pipe_ops *vertex_pipe;
|
||||
const struct fragment_pipeline *fragment_pipe;
|
||||
const struct wined3d_fragment_pipe_ops *fragment_pipe;
|
||||
BOOL ffp_proj_control;
|
||||
};
|
||||
|
||||
|
@ -4582,7 +4582,7 @@ static void shader_arb_select(void *shader_priv, struct wined3d_context *context
|
|||
checkGLcall("glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, priv->current_fprogram_id);");
|
||||
|
||||
if (!priv->use_arbfp_fixed_func)
|
||||
priv->fragment_pipe->enable_extension(gl_info, FALSE);
|
||||
priv->fragment_pipe->fp_enable(context, FALSE);
|
||||
|
||||
/* Enable OpenGL fragment programs. */
|
||||
gl_info->gl_ops.gl.p_glEnable(GL_FRAGMENT_PROGRAM_ARB);
|
||||
|
@ -4629,7 +4629,7 @@ static void shader_arb_select(void *shader_priv, struct wined3d_context *context
|
|||
checkGLcall("glDisable(GL_FRAGMENT_PROGRAM_ARB)");
|
||||
priv->current_fprogram_id = 0;
|
||||
}
|
||||
priv->fragment_pipe->enable_extension(gl_info, TRUE);
|
||||
priv->fragment_pipe->fp_enable(context, TRUE);
|
||||
}
|
||||
|
||||
if (use_vs(state))
|
||||
|
@ -4712,7 +4712,7 @@ static void shader_arb_disable(void *shader_priv, struct wined3d_context *contex
|
|||
checkGLcall("glDisable(GL_FRAGMENT_PROGRAM_ARB)");
|
||||
priv->current_fprogram_id = 0;
|
||||
}
|
||||
priv->fragment_pipe->enable_extension(gl_info, FALSE);
|
||||
priv->fragment_pipe->fp_enable(context, FALSE);
|
||||
|
||||
if (gl_info->supported[ARB_VERTEX_PROGRAM])
|
||||
{
|
||||
|
@ -4785,7 +4785,7 @@ static int sig_tree_compare(const void *key, const struct wine_rb_entry *entry)
|
|||
}
|
||||
|
||||
static HRESULT shader_arb_alloc(struct wined3d_device *device, const struct wined3d_vertex_pipe_ops *vertex_pipe,
|
||||
const struct fragment_pipeline *fragment_pipe)
|
||||
const struct wined3d_fragment_pipe_ops *fragment_pipe)
|
||||
{
|
||||
const struct wined3d_d3d_info *d3d_info = &device->adapter->d3d_info;
|
||||
struct fragment_caps fragment_caps;
|
||||
|
@ -5685,8 +5685,10 @@ struct arbfp_ffp_desc
|
|||
};
|
||||
|
||||
/* Context activation is done by the caller. */
|
||||
static void arbfp_enable(const struct wined3d_gl_info *gl_info, BOOL enable)
|
||||
static void arbfp_enable(const struct wined3d_context *context, BOOL enable)
|
||||
{
|
||||
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||
|
||||
if (enable)
|
||||
{
|
||||
gl_info->gl_ops.gl.p_glEnable(GL_FRAGMENT_PROGRAM_ARB);
|
||||
|
@ -6855,7 +6857,8 @@ static void arbfp_free_context_data(struct wined3d_context *context)
|
|||
{
|
||||
}
|
||||
|
||||
const struct fragment_pipeline arbfp_fragment_pipeline = {
|
||||
const struct wined3d_fragment_pipe_ops arbfp_fragment_pipeline =
|
||||
{
|
||||
arbfp_enable,
|
||||
arbfp_get_caps,
|
||||
arbfp_get_emul_mask,
|
||||
|
|
|
@ -1250,8 +1250,10 @@ static const struct wined3d_state_entry_template atifs_fragmentstate_template[]
|
|||
};
|
||||
|
||||
/* Context activation is done by the caller. */
|
||||
static void atifs_enable(const struct wined3d_gl_info *gl_info, BOOL enable)
|
||||
static void atifs_enable(const struct wined3d_context *context, BOOL enable)
|
||||
{
|
||||
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||
|
||||
if (enable)
|
||||
{
|
||||
gl_info->gl_ops.gl.p_glEnable(GL_FRAGMENT_SHADER_ATI);
|
||||
|
@ -1376,7 +1378,8 @@ static void atifs_free_context_data(struct wined3d_context *context)
|
|||
heap_free(context->fragment_pipe_data);
|
||||
}
|
||||
|
||||
const struct fragment_pipeline atifs_fragment_pipeline = {
|
||||
const struct wined3d_fragment_pipe_ops atifs_fragment_pipeline =
|
||||
{
|
||||
atifs_enable,
|
||||
atifs_get_caps,
|
||||
atifs_get_emul_mask,
|
||||
|
|
|
@ -5784,8 +5784,8 @@ HRESULT wined3d_device_init(struct wined3d_device *device, struct wined3d *wined
|
|||
struct wined3d_device_parent *device_parent)
|
||||
{
|
||||
struct wined3d_adapter *adapter = wined3d->adapters[adapter_idx];
|
||||
const struct wined3d_fragment_pipe_ops *fragment_pipeline;
|
||||
const struct wined3d_vertex_pipe_ops *vertex_pipeline;
|
||||
const struct fragment_pipeline *fragment_pipeline;
|
||||
unsigned int i;
|
||||
HRESULT hr;
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ struct shader_glsl_priv
|
|||
UINT next_constant_version;
|
||||
|
||||
const struct wined3d_vertex_pipe_ops *vertex_pipe;
|
||||
const struct fragment_pipeline *fragment_pipe;
|
||||
const struct wined3d_fragment_pipe_ops *fragment_pipe;
|
||||
struct wine_rb_tree ffp_vertex_shaders;
|
||||
struct wine_rb_tree ffp_fragment_shaders;
|
||||
BOOL ffp_proj_control;
|
||||
|
@ -10554,7 +10554,7 @@ static void shader_glsl_select(void *shader_priv, struct wined3d_context *contex
|
|||
GLuint program_id, prev_id;
|
||||
|
||||
priv->vertex_pipe->vp_enable(context, !use_vs(state));
|
||||
priv->fragment_pipe->enable_extension(gl_info, !use_ps(state));
|
||||
priv->fragment_pipe->fp_enable(context, !use_ps(state));
|
||||
|
||||
prev_id = ctx_data->glsl_program ? ctx_data->glsl_program->id : 0;
|
||||
set_glsl_shader_program(context_gl, state, priv, ctx_data);
|
||||
|
@ -10656,7 +10656,7 @@ static void shader_glsl_disable(void *shader_priv, struct wined3d_context *conte
|
|||
checkGLcall("glUseProgram");
|
||||
|
||||
priv->vertex_pipe->vp_enable(context, FALSE);
|
||||
priv->fragment_pipe->enable_extension(gl_info, FALSE);
|
||||
priv->fragment_pipe->fp_enable(context, FALSE);
|
||||
|
||||
if (needs_legacy_glsl_syntax(gl_info) && gl_info->supported[ARB_COLOR_BUFFER_FLOAT])
|
||||
{
|
||||
|
@ -10911,7 +10911,7 @@ static void constant_heap_free(struct constant_heap *heap)
|
|||
}
|
||||
|
||||
static HRESULT shader_glsl_alloc(struct wined3d_device *device, const struct wined3d_vertex_pipe_ops *vertex_pipe,
|
||||
const struct fragment_pipeline *fragment_pipe)
|
||||
const struct wined3d_fragment_pipe_ops *fragment_pipe)
|
||||
{
|
||||
SIZE_T stack_size = wined3d_log2i(max(WINED3D_MAX_VS_CONSTS_F, WINED3D_MAX_PS_CONSTS_F)) + 1;
|
||||
struct fragment_caps fragment_caps;
|
||||
|
@ -11892,7 +11892,7 @@ const struct wined3d_vertex_pipe_ops glsl_vertex_pipe =
|
|||
glsl_vertex_pipe_vp_states,
|
||||
};
|
||||
|
||||
static void glsl_fragment_pipe_enable(const struct wined3d_gl_info *gl_info, BOOL enable)
|
||||
static void glsl_fragment_pipe_enable(const struct wined3d_context *context, BOOL enable)
|
||||
{
|
||||
/* Nothing to do. */
|
||||
}
|
||||
|
@ -12251,7 +12251,7 @@ static void glsl_fragment_pipe_free_context_data(struct wined3d_context *context
|
|||
{
|
||||
}
|
||||
|
||||
const struct fragment_pipeline glsl_fragment_pipe =
|
||||
const struct wined3d_fragment_pipe_ops glsl_fragment_pipe =
|
||||
{
|
||||
glsl_fragment_pipe_enable,
|
||||
glsl_fragment_pipe_get_caps,
|
||||
|
|
|
@ -659,8 +659,10 @@ static void nvrc_texfactor(struct wined3d_context *context, const struct wined3d
|
|||
}
|
||||
|
||||
/* Context activation is done by the caller. */
|
||||
static void nvrc_enable(const struct wined3d_gl_info *gl_info, BOOL enable)
|
||||
static void nvrc_enable(const struct wined3d_context *context, BOOL enable)
|
||||
{
|
||||
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||
|
||||
if (enable)
|
||||
{
|
||||
gl_info->gl_ops.gl.p_glEnable(GL_REGISTER_COMBINERS_NV);
|
||||
|
@ -674,9 +676,11 @@ static void nvrc_enable(const struct wined3d_gl_info *gl_info, BOOL enable)
|
|||
}
|
||||
|
||||
/* Context activation is done by the caller. */
|
||||
static void nvts_enable(const struct wined3d_gl_info *gl_info, BOOL enable)
|
||||
static void nvts_enable(const struct wined3d_context *context, BOOL enable)
|
||||
{
|
||||
nvrc_enable(gl_info, enable);
|
||||
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||
|
||||
nvrc_enable(context, enable);
|
||||
if (enable)
|
||||
{
|
||||
gl_info->gl_ops.gl.p_glEnable(GL_TEXTURE_SHADER_NV);
|
||||
|
@ -923,7 +927,8 @@ static void nvrc_context_free(struct wined3d_context *context)
|
|||
}
|
||||
|
||||
|
||||
const struct fragment_pipeline nvts_fragment_pipeline = {
|
||||
const struct wined3d_fragment_pipe_ops nvts_fragment_pipeline =
|
||||
{
|
||||
nvts_enable,
|
||||
nvrc_fragment_get_caps,
|
||||
nvrc_fragment_get_emul_mask,
|
||||
|
@ -935,7 +940,8 @@ const struct fragment_pipeline nvts_fragment_pipeline = {
|
|||
nvrc_fragmentstate_template,
|
||||
};
|
||||
|
||||
const struct fragment_pipeline nvrc_fragment_pipeline = {
|
||||
const struct wined3d_fragment_pipe_ops nvrc_fragment_pipeline =
|
||||
{
|
||||
nvrc_enable,
|
||||
nvrc_fragment_get_caps,
|
||||
nvrc_fragment_get_emul_mask,
|
||||
|
|
|
@ -3165,7 +3165,7 @@ static void shader_cleanup(struct wined3d_shader *shader)
|
|||
struct shader_none_priv
|
||||
{
|
||||
const struct wined3d_vertex_pipe_ops *vertex_pipe;
|
||||
const struct fragment_pipeline *fragment_pipe;
|
||||
const struct wined3d_fragment_pipe_ops *fragment_pipe;
|
||||
BOOL ffp_proj_control;
|
||||
};
|
||||
|
||||
|
@ -3185,21 +3185,19 @@ static void shader_none_init_context_state(struct wined3d_context *context) {}
|
|||
static void shader_none_select(void *shader_priv, struct wined3d_context *context,
|
||||
const struct wined3d_state *state)
|
||||
{
|
||||
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||
struct shader_none_priv *priv = shader_priv;
|
||||
|
||||
priv->vertex_pipe->vp_enable(context, !use_vs(state));
|
||||
priv->fragment_pipe->enable_extension(gl_info, !use_ps(state));
|
||||
priv->fragment_pipe->fp_enable(context, !use_ps(state));
|
||||
}
|
||||
|
||||
/* Context activation is done by the caller. */
|
||||
static void shader_none_disable(void *shader_priv, struct wined3d_context *context)
|
||||
{
|
||||
struct shader_none_priv *priv = shader_priv;
|
||||
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||
|
||||
priv->vertex_pipe->vp_enable(context, FALSE);
|
||||
priv->fragment_pipe->enable_extension(gl_info, FALSE);
|
||||
priv->fragment_pipe->fp_enable(context, FALSE);
|
||||
|
||||
context->shader_update_mask = (1u << WINED3D_SHADER_TYPE_PIXEL)
|
||||
| (1u << WINED3D_SHADER_TYPE_VERTEX)
|
||||
|
@ -3210,7 +3208,7 @@ static void shader_none_disable(void *shader_priv, struct wined3d_context *conte
|
|||
}
|
||||
|
||||
static HRESULT shader_none_alloc(struct wined3d_device *device, const struct wined3d_vertex_pipe_ops *vertex_pipe,
|
||||
const struct fragment_pipeline *fragment_pipe)
|
||||
const struct wined3d_fragment_pipe_ops *fragment_pipe)
|
||||
{
|
||||
struct fragment_caps fragment_caps;
|
||||
void *vertex_priv, *fragment_priv;
|
||||
|
|
|
@ -5186,7 +5186,6 @@ static const struct wined3d_state_entry_template ffp_fragmentstate_template[] =
|
|||
};
|
||||
|
||||
/* Context activation is done by the caller. */
|
||||
static void ffp_enable(const struct wined3d_gl_info *gl_info, BOOL enable) {}
|
||||
static void ffp_pipe_enable(const struct wined3d_context *context, BOOL enable) {}
|
||||
|
||||
static void *ffp_alloc(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv)
|
||||
|
@ -5297,8 +5296,9 @@ static void ffp_none_context_free(struct wined3d_context *context)
|
|||
{
|
||||
}
|
||||
|
||||
const struct fragment_pipeline ffp_fragment_pipeline = {
|
||||
ffp_enable,
|
||||
const struct wined3d_fragment_pipe_ops ffp_fragment_pipeline =
|
||||
{
|
||||
ffp_pipe_enable,
|
||||
ffp_fragment_get_caps,
|
||||
ffp_fragment_get_emul_mask,
|
||||
ffp_alloc,
|
||||
|
@ -5309,7 +5309,6 @@ const struct fragment_pipeline ffp_fragment_pipeline = {
|
|||
ffp_fragmentstate_template,
|
||||
};
|
||||
|
||||
static void none_enable(const struct wined3d_gl_info *gl_info, BOOL enable) {}
|
||||
static void none_pipe_enable(const struct wined3d_context *context, BOOL enable) {}
|
||||
|
||||
static void *none_alloc(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv)
|
||||
|
@ -5354,9 +5353,9 @@ static BOOL fp_none_color_fixup_supported(struct color_fixup_desc fixup)
|
|||
return is_identity_fixup(fixup);
|
||||
}
|
||||
|
||||
const struct fragment_pipeline none_fragment_pipe =
|
||||
const struct wined3d_fragment_pipe_ops none_fragment_pipe =
|
||||
{
|
||||
none_enable,
|
||||
none_pipe_enable,
|
||||
fp_none_get_caps,
|
||||
fp_none_get_emul_mask,
|
||||
none_alloc,
|
||||
|
@ -5522,7 +5521,7 @@ static void validate_state_table(struct wined3d_state_entry *state_table)
|
|||
|
||||
HRESULT compile_state_table(struct wined3d_state_entry *state_table, APPLYSTATEFUNC **dev_multistate_funcs,
|
||||
const struct wined3d_d3d_info *d3d_info, const BOOL *supported_extensions,
|
||||
const struct wined3d_vertex_pipe_ops *vertex, const struct fragment_pipeline *fragment,
|
||||
const struct wined3d_vertex_pipe_ops *vertex, const struct wined3d_fragment_pipe_ops *fragment,
|
||||
const struct wined3d_state_entry_template *misc)
|
||||
{
|
||||
APPLYSTATEFUNC multistate_funcs[STATE_HIGHEST + 1][3];
|
||||
|
|
|
@ -74,7 +74,7 @@
|
|||
#define WINED3D_QUIRK_BROKEN_ARB_FOG 0x00000200
|
||||
#define WINED3D_QUIRK_NO_INDEPENDENT_BIT_DEPTHS 0x00000400
|
||||
|
||||
struct fragment_pipeline;
|
||||
struct wined3d_fragment_pipe_ops;
|
||||
struct wined3d_adapter;
|
||||
struct wined3d_context;
|
||||
struct wined3d_state;
|
||||
|
@ -1444,7 +1444,7 @@ struct wined3d_shader_backend_ops
|
|||
const struct wined3d_state *state);
|
||||
void (*shader_destroy)(struct wined3d_shader *shader);
|
||||
HRESULT (*shader_alloc_private)(struct wined3d_device *device, const struct wined3d_vertex_pipe_ops *vertex_pipe,
|
||||
const struct fragment_pipeline *fragment_pipe);
|
||||
const struct wined3d_fragment_pipe_ops *fragment_pipe);
|
||||
void (*shader_free_private)(struct wined3d_device *device, struct wined3d_context *context);
|
||||
BOOL (*shader_allocate_context_data)(struct wined3d_context *context);
|
||||
void (*shader_free_context_data)(struct wined3d_context *context);
|
||||
|
@ -2159,9 +2159,9 @@ struct fragment_caps
|
|||
#define GL_EXT_EMUL_ARB_MULTITEXTURE 0x00000001
|
||||
#define GL_EXT_EMUL_EXT_FOG_COORD 0x00000002
|
||||
|
||||
struct fragment_pipeline
|
||||
struct wined3d_fragment_pipe_ops
|
||||
{
|
||||
void (*enable_extension)(const struct wined3d_gl_info *gl_info, BOOL enable);
|
||||
void (*fp_enable)(const struct wined3d_context *context, BOOL enable);
|
||||
void (*get_caps)(const struct wined3d_adapter *adapter, struct fragment_caps *caps);
|
||||
DWORD (*get_emul_mask)(const struct wined3d_gl_info *gl_info);
|
||||
void *(*alloc_private)(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv);
|
||||
|
@ -2197,13 +2197,13 @@ struct wined3d_vertex_pipe_ops
|
|||
};
|
||||
|
||||
extern const struct wined3d_state_entry_template misc_state_template[] DECLSPEC_HIDDEN;
|
||||
extern const struct fragment_pipeline none_fragment_pipe DECLSPEC_HIDDEN;
|
||||
extern const struct fragment_pipeline ffp_fragment_pipeline DECLSPEC_HIDDEN;
|
||||
extern const struct fragment_pipeline atifs_fragment_pipeline DECLSPEC_HIDDEN;
|
||||
extern const struct fragment_pipeline arbfp_fragment_pipeline DECLSPEC_HIDDEN;
|
||||
extern const struct fragment_pipeline nvts_fragment_pipeline DECLSPEC_HIDDEN;
|
||||
extern const struct fragment_pipeline nvrc_fragment_pipeline DECLSPEC_HIDDEN;
|
||||
extern const struct fragment_pipeline glsl_fragment_pipe DECLSPEC_HIDDEN;
|
||||
extern const struct wined3d_fragment_pipe_ops none_fragment_pipe DECLSPEC_HIDDEN;
|
||||
extern const struct wined3d_fragment_pipe_ops ffp_fragment_pipeline DECLSPEC_HIDDEN;
|
||||
extern const struct wined3d_fragment_pipe_ops atifs_fragment_pipeline DECLSPEC_HIDDEN;
|
||||
extern const struct wined3d_fragment_pipe_ops arbfp_fragment_pipeline DECLSPEC_HIDDEN;
|
||||
extern const struct wined3d_fragment_pipe_ops nvts_fragment_pipeline DECLSPEC_HIDDEN;
|
||||
extern const struct wined3d_fragment_pipe_ops nvrc_fragment_pipeline DECLSPEC_HIDDEN;
|
||||
extern const struct wined3d_fragment_pipe_ops glsl_fragment_pipe DECLSPEC_HIDDEN;
|
||||
|
||||
extern const struct wined3d_vertex_pipe_ops none_vertex_pipe DECLSPEC_HIDDEN;
|
||||
extern const struct wined3d_vertex_pipe_ops ffp_vertex_pipe DECLSPEC_HIDDEN;
|
||||
|
@ -2212,7 +2212,7 @@ extern const struct wined3d_vertex_pipe_ops glsl_vertex_pipe DECLSPEC_HIDDEN;
|
|||
/* "Base" state table */
|
||||
HRESULT compile_state_table(struct wined3d_state_entry *state_table, APPLYSTATEFUNC **dev_multistate_funcs,
|
||||
const struct wined3d_d3d_info *d3d_info, const BOOL *supported_extensions,
|
||||
const struct wined3d_vertex_pipe_ops *vertex, const struct fragment_pipeline *fragment,
|
||||
const struct wined3d_vertex_pipe_ops *vertex, const struct wined3d_fragment_pipe_ops *fragment,
|
||||
const struct wined3d_state_entry_template *misc) DECLSPEC_HIDDEN;
|
||||
|
||||
enum wined3d_blit_op
|
||||
|
@ -2794,7 +2794,7 @@ struct wined3d_adapter
|
|||
size_t format_size;
|
||||
|
||||
const struct wined3d_vertex_pipe_ops *vertex_pipe;
|
||||
const struct fragment_pipeline *fragment_pipe;
|
||||
const struct wined3d_fragment_pipe_ops *fragment_pipe;
|
||||
const struct wined3d_shader_backend_ops *shader_backend;
|
||||
const struct wined3d_adapter_ops *adapter_ops;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue