mesa: Use gl_shader_program::_LinkedShaders instead of FragmentProgram
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -1828,12 +1828,14 @@ brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog)
|
|||||||
{
|
{
|
||||||
struct brw_context *brw = brw_context(ctx);
|
struct brw_context *brw = brw_context(ctx);
|
||||||
struct brw_wm_prog_key key;
|
struct brw_wm_prog_key key;
|
||||||
struct gl_fragment_program *fp = prog->FragmentProgram;
|
|
||||||
struct brw_fragment_program *bfp = brw_fragment_program(fp);
|
|
||||||
|
|
||||||
if (!fp)
|
if (!prog->_LinkedShaders[MESA_SHADER_FRAGMENT])
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
struct gl_fragment_program *fp = (struct gl_fragment_program *)
|
||||||
|
prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program;
|
||||||
|
struct brw_fragment_program *bfp = brw_fragment_program(fp);
|
||||||
|
|
||||||
memset(&key, 0, sizeof(key));
|
memset(&key, 0, sizeof(key));
|
||||||
|
|
||||||
if (fp->UsesKill)
|
if (fp->UsesKill)
|
||||||
|
@@ -347,7 +347,8 @@ public:
|
|||||||
this->c = c;
|
this->c = c;
|
||||||
this->p = &c->func;
|
this->p = &c->func;
|
||||||
this->brw = p->brw;
|
this->brw = p->brw;
|
||||||
this->fp = prog->FragmentProgram;
|
this->fp = (struct gl_fragment_program *)
|
||||||
|
prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program;
|
||||||
this->prog = prog;
|
this->prog = prog;
|
||||||
this->intel = &brw->intel;
|
this->intel = &brw->intel;
|
||||||
this->ctx = &intel->ctx;
|
this->ctx = &intel->ctx;
|
||||||
|
@@ -224,7 +224,7 @@ bool do_wm_prog(struct brw_context *brw,
|
|||||||
|
|
||||||
brw_init_compile(brw, &c->func, c);
|
brw_init_compile(brw, &c->func, c);
|
||||||
|
|
||||||
if (prog && prog->FragmentProgram) {
|
if (prog && prog->_LinkedShaders[MESA_SHADER_FRAGMENT]) {
|
||||||
if (!brw_wm_fs_emit(brw, c, prog))
|
if (!brw_wm_fs_emit(brw, c, prog))
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
|
@@ -1860,8 +1860,7 @@ _mesa_valid_to_render(struct gl_context *ctx, const char *where)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_FRAGMENT_SHADER:
|
case GL_FRAGMENT_SHADER:
|
||||||
_mesa_append_uniforms_to_file(sh,
|
_mesa_append_uniforms_to_file(sh, sh->Program);
|
||||||
&shProg[i]->FragmentProgram->Base);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2171,7 +2171,6 @@ struct gl_shader_program
|
|||||||
} Vert;
|
} Vert;
|
||||||
|
|
||||||
/* post-link info: */
|
/* post-link info: */
|
||||||
struct gl_fragment_program *FragmentProgram; /**< Linked fragment prog */
|
|
||||||
struct gl_uniform_list *Uniforms;
|
struct gl_uniform_list *Uniforms;
|
||||||
struct gl_program_parameter_list *Varying;
|
struct gl_program_parameter_list *Varying;
|
||||||
GLboolean LinkStatus; /**< GL_LINK_STATUS */
|
GLboolean LinkStatus; /**< GL_LINK_STATUS */
|
||||||
|
@@ -811,8 +811,9 @@ print_shader_info(const struct gl_shader_program *shProg)
|
|||||||
if (shProg->_LinkedShaders[MESA_SHADER_VERTEX])
|
if (shProg->_LinkedShaders[MESA_SHADER_VERTEX])
|
||||||
printf(" vert prog %u\n",
|
printf(" vert prog %u\n",
|
||||||
shProg->_LinkedShaders[MESA_SHADER_VERTEX]->Program->Id);
|
shProg->_LinkedShaders[MESA_SHADER_VERTEX]->Program->Id);
|
||||||
if (shProg->FragmentProgram)
|
if (shProg->_LinkedShaders[MESA_SHADER_FRAGMENT])
|
||||||
printf(" frag prog %u\n", shProg->FragmentProgram->Base.Id);
|
printf(" frag prog %u\n",
|
||||||
|
shProg->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program->Id);
|
||||||
if (shProg->_LinkedShaders[MESA_SHADER_GEOMETRY])
|
if (shProg->_LinkedShaders[MESA_SHADER_GEOMETRY])
|
||||||
printf(" geom prog %u\n",
|
printf(" geom prog %u\n",
|
||||||
shProg->_LinkedShaders[MESA_SHADER_GEOMETRY]->Program->Id);
|
shProg->_LinkedShaders[MESA_SHADER_GEOMETRY]->Program->Id);
|
||||||
@@ -967,7 +968,7 @@ validate_shader_program(const struct gl_shader_program *shProg,
|
|||||||
{
|
{
|
||||||
const struct gl_shader *vs = shProg->_LinkedShaders[MESA_SHADER_VERTEX];
|
const struct gl_shader *vs = shProg->_LinkedShaders[MESA_SHADER_VERTEX];
|
||||||
const struct gl_shader *gs = shProg->_LinkedShaders[MESA_SHADER_GEOMETRY];
|
const struct gl_shader *gs = shProg->_LinkedShaders[MESA_SHADER_GEOMETRY];
|
||||||
const struct gl_fragment_program *fp = shProg->FragmentProgram;
|
const struct gl_shader *fs = shProg->_LinkedShaders[MESA_SHADER_FRAGMENT];
|
||||||
|
|
||||||
if (!shProg->LinkStatus) {
|
if (!shProg->LinkStatus) {
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
@@ -999,7 +1000,7 @@ validate_shader_program(const struct gl_shader_program *shProg,
|
|||||||
if (gs && !validate_samplers(gs->Program, errMsg)) {
|
if (gs && !validate_samplers(gs->Program, errMsg)) {
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
if (fp && !validate_samplers(&fp->Base, errMsg)) {
|
if (fs && !validate_samplers(fs->Program, errMsg)) {
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -275,8 +275,6 @@ void
|
|||||||
_mesa_clear_shader_program_data(struct gl_context *ctx,
|
_mesa_clear_shader_program_data(struct gl_context *ctx,
|
||||||
struct gl_shader_program *shProg)
|
struct gl_shader_program *shProg)
|
||||||
{
|
{
|
||||||
_mesa_reference_fragprog(ctx, &shProg->FragmentProgram, NULL);
|
|
||||||
|
|
||||||
if (shProg->Uniforms) {
|
if (shProg->Uniforms) {
|
||||||
_mesa_free_uniform_list(shProg->Uniforms);
|
_mesa_free_uniform_list(shProg->Uniforms);
|
||||||
shProg->Uniforms = NULL;
|
shProg->Uniforms = NULL;
|
||||||
|
@@ -246,10 +246,12 @@ update_program(struct gl_context *ctx)
|
|||||||
* come up, or matter.
|
* come up, or matter.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (fsProg && fsProg->LinkStatus && fsProg->FragmentProgram) {
|
if (fsProg && fsProg->LinkStatus
|
||||||
|
&& fsProg->_LinkedShaders[MESA_SHADER_FRAGMENT]) {
|
||||||
/* Use GLSL fragment shader */
|
/* Use GLSL fragment shader */
|
||||||
_mesa_reference_fragprog(ctx, &ctx->FragmentProgram._Current,
|
_mesa_reference_fragprog(ctx, &ctx->FragmentProgram._Current,
|
||||||
fsProg->FragmentProgram);
|
(struct gl_fragment_program *)
|
||||||
|
fsProg->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program);
|
||||||
}
|
}
|
||||||
else if (ctx->FragmentProgram._Enabled) {
|
else if (ctx->FragmentProgram._Enabled) {
|
||||||
/* Use user-defined fragment program */
|
/* Use user-defined fragment program */
|
||||||
|
@@ -489,7 +489,7 @@ static void
|
|||||||
update_texture_state( struct gl_context *ctx )
|
update_texture_state( struct gl_context *ctx )
|
||||||
{
|
{
|
||||||
GLuint unit;
|
GLuint unit;
|
||||||
struct gl_fragment_program *fprog = NULL;
|
struct gl_program *fprog = NULL;
|
||||||
struct gl_program *vprog = NULL;
|
struct gl_program *vprog = NULL;
|
||||||
GLbitfield enabledFragUnits = 0x0;
|
GLbitfield enabledFragUnits = 0x0;
|
||||||
|
|
||||||
@@ -505,10 +505,10 @@ update_texture_state( struct gl_context *ctx )
|
|||||||
|
|
||||||
if (ctx->Shader.CurrentFragmentProgram &&
|
if (ctx->Shader.CurrentFragmentProgram &&
|
||||||
ctx->Shader.CurrentFragmentProgram->LinkStatus) {
|
ctx->Shader.CurrentFragmentProgram->LinkStatus) {
|
||||||
fprog = ctx->Shader.CurrentFragmentProgram->FragmentProgram;
|
fprog = ctx->Shader.CurrentFragmentProgram->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program;
|
||||||
}
|
}
|
||||||
else if (ctx->FragmentProgram._Enabled) {
|
else if (ctx->FragmentProgram._Enabled) {
|
||||||
fprog = ctx->FragmentProgram.Current;
|
fprog = &ctx->FragmentProgram.Current->Base;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FINISHME: Geometry shader texture accesses should also be considered
|
/* FINISHME: Geometry shader texture accesses should also be considered
|
||||||
@@ -544,7 +544,7 @@ update_texture_state( struct gl_context *ctx )
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (fprog) {
|
if (fprog) {
|
||||||
enabledFragTargets |= fprog->Base.TexturesUsed[unit];
|
enabledFragTargets |= fprog->TexturesUsed[unit];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* fixed-function fragment program */
|
/* fixed-function fragment program */
|
||||||
@@ -611,7 +611,7 @@ update_texture_state( struct gl_context *ctx )
|
|||||||
if (fprog) {
|
if (fprog) {
|
||||||
const GLuint coordMask = (1 << MAX_TEXTURE_COORD_UNITS) - 1;
|
const GLuint coordMask = (1 << MAX_TEXTURE_COORD_UNITS) - 1;
|
||||||
ctx->Texture._EnabledCoordUnits
|
ctx->Texture._EnabledCoordUnits
|
||||||
= (fprog->Base.InputsRead >> FRAG_ATTRIB_TEX0) & coordMask;
|
= (fprog->InputsRead >> FRAG_ATTRIB_TEX0) & coordMask;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ctx->Texture._EnabledCoordUnits = enabledFragUnits;
|
ctx->Texture._EnabledCoordUnits = enabledFragUnits;
|
||||||
|
@@ -185,7 +185,7 @@ find_uniform_parameter_pos(struct gl_shader_program *shProg, GLint index,
|
|||||||
else {
|
else {
|
||||||
pos = shProg->Uniforms->Uniforms[index].FragPos;
|
pos = shProg->Uniforms->Uniforms[index].FragPos;
|
||||||
if (pos >= 0) {
|
if (pos >= 0) {
|
||||||
prog = &shProg->FragmentProgram->Base;
|
prog = shProg->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
pos = shProg->Uniforms->Uniforms[index].GeomPos;
|
pos = shProg->Uniforms->Uniforms[index].GeomPos;
|
||||||
@@ -921,11 +921,12 @@ _mesa_uniform(struct gl_context *ctx, struct gl_shader_program *shProg,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shProg->FragmentProgram) {
|
if (shProg->_LinkedShaders[MESA_SHADER_FRAGMENT]) {
|
||||||
/* convert uniform location to program parameter index */
|
/* convert uniform location to program parameter index */
|
||||||
GLint index = uniform->FragPos;
|
GLint index = uniform->FragPos;
|
||||||
if (index >= 0) {
|
if (index >= 0) {
|
||||||
set_program_uniform(ctx, &shProg->FragmentProgram->Base,
|
set_program_uniform(ctx,
|
||||||
|
shProg->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program,
|
||||||
index, offset, type, count, elems, values);
|
index, offset, type, count, elems, values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1069,11 +1070,12 @@ _mesa_uniform_matrix(struct gl_context *ctx, struct gl_shader_program *shProg,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shProg->FragmentProgram) {
|
if (shProg->_LinkedShaders[MESA_SHADER_FRAGMENT]) {
|
||||||
/* convert uniform location to program parameter index */
|
/* convert uniform location to program parameter index */
|
||||||
GLint index = uniform->FragPos;
|
GLint index = uniform->FragPos;
|
||||||
if (index >= 0) {
|
if (index >= 0) {
|
||||||
set_program_uniform_matrix(ctx, &shProg->FragmentProgram->Base,
|
set_program_uniform_matrix(ctx,
|
||||||
|
shProg->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program,
|
||||||
index, offset,
|
index, offset,
|
||||||
count, rows, cols, transpose, values);
|
count, rows, cols, transpose, values);
|
||||||
}
|
}
|
||||||
|
@@ -3300,8 +3300,8 @@ _mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
|
|||||||
linked_prog);
|
linked_prog);
|
||||||
break;
|
break;
|
||||||
case GL_FRAGMENT_SHADER:
|
case GL_FRAGMENT_SHADER:
|
||||||
_mesa_reference_fragprog(ctx, &prog->FragmentProgram,
|
_mesa_reference_program(ctx, &prog->_LinkedShaders[i]->Program,
|
||||||
(struct gl_fragment_program *)linked_prog);
|
linked_prog);
|
||||||
ok = ctx->Driver.ProgramStringNotify(ctx, GL_FRAGMENT_PROGRAM_ARB,
|
ok = ctx->Driver.ProgramStringNotify(ctx, GL_FRAGMENT_PROGRAM_ARB,
|
||||||
linked_prog);
|
linked_prog);
|
||||||
break;
|
break;
|
||||||
@@ -3427,8 +3427,6 @@ _mesa_glsl_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_mesa_reference_fragprog(ctx, &prog->FragmentProgram, NULL);
|
|
||||||
|
|
||||||
if (prog->LinkStatus) {
|
if (prog->LinkStatus) {
|
||||||
link_shaders(ctx, prog);
|
link_shaders(ctx, prog);
|
||||||
}
|
}
|
||||||
|
@@ -5193,8 +5193,8 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GL_FRAGMENT_SHADER:
|
case GL_FRAGMENT_SHADER:
|
||||||
_mesa_reference_fragprog(ctx, &prog->FragmentProgram,
|
_mesa_reference_program(ctx, &prog->_LinkedShaders[i]->Program,
|
||||||
(struct gl_fragment_program *)linked_prog);
|
linked_prog);
|
||||||
ok = ctx->Driver.ProgramStringNotify(ctx, GL_FRAGMENT_PROGRAM_ARB,
|
ok = ctx->Driver.ProgramStringNotify(ctx, GL_FRAGMENT_PROGRAM_ARB,
|
||||||
linked_prog);
|
linked_prog);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
|
@@ -1155,8 +1155,8 @@ destroy_shader_program_variants_cb(GLuint key, void *data, void *userData)
|
|||||||
|
|
||||||
destroy_program_variants(st,
|
destroy_program_variants(st,
|
||||||
shProg->_LinkedShaders[MESA_SHADER_VERTEX]->Program);
|
shProg->_LinkedShaders[MESA_SHADER_VERTEX]->Program);
|
||||||
destroy_program_variants(st, (struct gl_program *)
|
destroy_program_variants(st,
|
||||||
shProg->FragmentProgram);
|
shProg->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program);
|
||||||
destroy_program_variants(st,
|
destroy_program_variants(st,
|
||||||
shProg->_LinkedShaders[MESA_SHADER_GEOMETRY]->Program);
|
shProg->_LinkedShaders[MESA_SHADER_GEOMETRY]->Program);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user