mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 22:08:26 +02:00
mesa: make _CurrentFragmentProgram a gl_program struct pointer
Making this point to a gl_program struct rather than a gl_shader_program struct will allow use to later also make the CurrentProgram array hold gl_program structs which in turn will allow for code simpilifcation. Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
6e3f6097c9
commit
c46a630000
6 changed files with 22 additions and 30 deletions
|
|
@ -1438,14 +1438,10 @@ brw_upload_wm_ubo_surfaces(struct brw_context *brw)
|
|||
{
|
||||
struct gl_context *ctx = &brw->ctx;
|
||||
/* _NEW_PROGRAM */
|
||||
struct gl_shader_program *prog = ctx->_Shader->_CurrentFragmentProgram;
|
||||
|
||||
if (!prog || !prog->_LinkedShaders[MESA_SHADER_FRAGMENT])
|
||||
return;
|
||||
struct gl_program *prog = ctx->_Shader->_CurrentFragmentProgram;
|
||||
|
||||
/* BRW_NEW_FS_PROG_DATA */
|
||||
brw_upload_ubo_surfaces(brw, prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program,
|
||||
&brw->wm.base, brw->wm.base.prog_data);
|
||||
brw_upload_ubo_surfaces(brw, prog, &brw->wm.base, brw->wm.base.prog_data);
|
||||
}
|
||||
|
||||
const struct brw_tracked_state brw_wm_ubo_surfaces = {
|
||||
|
|
|
|||
|
|
@ -99,10 +99,8 @@ check_blend_func_error(struct gl_context *ctx)
|
|||
* the blend equation or "blend_support_all_equations", the error
|
||||
* INVALID_OPERATION is generated [...]"
|
||||
*/
|
||||
const struct gl_shader_program *sh_prog =
|
||||
ctx->_Shader->_CurrentFragmentProgram;
|
||||
const GLbitfield blend_support = !sh_prog ? 0 :
|
||||
sh_prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program->sh.fs.BlendSupport;
|
||||
const struct gl_program *prog = ctx->_Shader->_CurrentFragmentProgram;
|
||||
const GLbitfield blend_support = !prog ? 0 : prog->sh.fs.BlendSupport;
|
||||
|
||||
if ((blend_support & ctx->Color._AdvancedBlendMode) == 0) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
|
|
|
|||
|
|
@ -2921,7 +2921,7 @@ struct gl_pipeline_object
|
|||
*/
|
||||
struct gl_shader_program *CurrentProgram[MESA_SHADER_STAGES];
|
||||
|
||||
struct gl_shader_program *_CurrentFragmentProgram;
|
||||
struct gl_program *_CurrentFragmentProgram;
|
||||
|
||||
/**
|
||||
* Program used by glUniform calls.
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ _mesa_delete_pipeline_object(struct gl_context *ctx,
|
|||
{
|
||||
unsigned i;
|
||||
|
||||
_mesa_reference_shader_program(ctx, &obj->_CurrentFragmentProgram, NULL);
|
||||
_mesa_reference_program(ctx, &obj->_CurrentFragmentProgram, NULL);
|
||||
|
||||
for (i = 0; i < MESA_SHADER_STAGES; i++)
|
||||
_mesa_reference_shader_program(ctx, &obj->CurrentProgram[i], NULL);
|
||||
|
|
|
|||
|
|
@ -161,8 +161,7 @@ _mesa_free_shader_state(struct gl_context *ctx)
|
|||
_mesa_reference_shader_program(ctx, &ctx->Shader.CurrentProgram[i],
|
||||
NULL);
|
||||
}
|
||||
_mesa_reference_shader_program(ctx, &ctx->Shader._CurrentFragmentProgram,
|
||||
NULL);
|
||||
_mesa_reference_program(ctx, &ctx->Shader._CurrentFragmentProgram, NULL);
|
||||
_mesa_reference_shader_program(ctx, &ctx->Shader.ActiveProgram, NULL);
|
||||
|
||||
/* Extended for ARB_separate_shader_objects */
|
||||
|
|
@ -1230,10 +1229,13 @@ use_shader_program(struct gl_context *ctx, gl_shader_stage stage,
|
|||
/* Empty for now. */
|
||||
break;
|
||||
case MESA_SHADER_FRAGMENT:
|
||||
if (*target == ctx->_Shader->_CurrentFragmentProgram) {
|
||||
_mesa_reference_shader_program(ctx,
|
||||
&ctx->_Shader->_CurrentFragmentProgram,
|
||||
NULL);
|
||||
if (*target != NULL &&
|
||||
((*target)->_LinkedShaders[MESA_SHADER_FRAGMENT] &&
|
||||
(*target)->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program ==
|
||||
ctx->_Shader->_CurrentFragmentProgram)) {
|
||||
_mesa_reference_program(ctx,
|
||||
&ctx->_Shader->_CurrentFragmentProgram,
|
||||
NULL);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -135,9 +135,8 @@ update_program(struct gl_context *ctx)
|
|||
if (fsProg && fsProg->data->LinkStatus
|
||||
&& fsProg->_LinkedShaders[MESA_SHADER_FRAGMENT]) {
|
||||
/* Use GLSL fragment shader */
|
||||
_mesa_reference_shader_program(ctx,
|
||||
&ctx->_Shader->_CurrentFragmentProgram,
|
||||
fsProg);
|
||||
_mesa_reference_program(ctx, &ctx->_Shader->_CurrentFragmentProgram,
|
||||
fsProg->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program);
|
||||
_mesa_reference_program(ctx, &ctx->FragmentProgram._Current,
|
||||
fsProg->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program);
|
||||
_mesa_reference_program(ctx, &ctx->FragmentProgram._TexEnvProgram,
|
||||
|
|
@ -145,9 +144,8 @@ update_program(struct gl_context *ctx)
|
|||
}
|
||||
else if (ctx->FragmentProgram._Enabled) {
|
||||
/* Use user-defined fragment program */
|
||||
_mesa_reference_shader_program(ctx,
|
||||
&ctx->_Shader->_CurrentFragmentProgram,
|
||||
NULL);
|
||||
_mesa_reference_program(ctx, &ctx->_Shader->_CurrentFragmentProgram,
|
||||
NULL);
|
||||
_mesa_reference_program(ctx, &ctx->FragmentProgram._Current,
|
||||
ctx->FragmentProgram.Current);
|
||||
_mesa_reference_program(ctx, &ctx->FragmentProgram._TexEnvProgram,
|
||||
|
|
@ -156,9 +154,8 @@ update_program(struct gl_context *ctx)
|
|||
else if (ctx->ATIFragmentShader._Enabled &&
|
||||
ctx->ATIFragmentShader.Current->Program) {
|
||||
/* Use the enabled ATI fragment shader's associated program */
|
||||
_mesa_reference_shader_program(ctx,
|
||||
&ctx->_Shader->_CurrentFragmentProgram,
|
||||
NULL);
|
||||
_mesa_reference_program(ctx, &ctx->_Shader->_CurrentFragmentProgram,
|
||||
NULL);
|
||||
_mesa_reference_program(ctx, &ctx->FragmentProgram._Current,
|
||||
ctx->ATIFragmentShader.Current->Program);
|
||||
_mesa_reference_program(ctx, &ctx->FragmentProgram._TexEnvProgram,
|
||||
|
|
@ -168,9 +165,8 @@ update_program(struct gl_context *ctx)
|
|||
/* Use fragment program generated from fixed-function state */
|
||||
struct gl_shader_program *f = _mesa_get_fixed_func_fragment_program(ctx);
|
||||
|
||||
_mesa_reference_shader_program(ctx,
|
||||
&ctx->_Shader->_CurrentFragmentProgram,
|
||||
f);
|
||||
_mesa_reference_program(ctx, &ctx->_Shader->_CurrentFragmentProgram,
|
||||
f->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program);
|
||||
_mesa_reference_program(ctx, &ctx->FragmentProgram._Current,
|
||||
f->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program);
|
||||
_mesa_reference_program(ctx, &ctx->FragmentProgram._TexEnvProgram,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue