mesa/cs: Add compute support to update_program().
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Kristian Høgsberg <krh@bitplanet.net> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
committed by
Jordan Justen
parent
abb049dab6
commit
bf058dad6b
@@ -101,9 +101,12 @@ update_program(struct gl_context *ctx)
|
||||
ctx->_Shader->CurrentProgram[MESA_SHADER_GEOMETRY];
|
||||
struct gl_shader_program *fsProg =
|
||||
ctx->_Shader->CurrentProgram[MESA_SHADER_FRAGMENT];
|
||||
const struct gl_shader_program *csProg =
|
||||
ctx->_Shader->CurrentProgram[MESA_SHADER_COMPUTE];
|
||||
const struct gl_vertex_program *prevVP = ctx->VertexProgram._Current;
|
||||
const struct gl_fragment_program *prevFP = ctx->FragmentProgram._Current;
|
||||
const struct gl_geometry_program *prevGP = ctx->GeometryProgram._Current;
|
||||
const struct gl_compute_program *prevCP = ctx->ComputeProgram._Current;
|
||||
GLbitfield new_state = 0x0;
|
||||
|
||||
/*
|
||||
@@ -199,6 +202,16 @@ update_program(struct gl_context *ctx)
|
||||
_mesa_reference_vertprog(ctx, &ctx->VertexProgram._Current, NULL);
|
||||
}
|
||||
|
||||
if (csProg && csProg->LinkStatus
|
||||
&& csProg->_LinkedShaders[MESA_SHADER_COMPUTE]) {
|
||||
/* Use GLSL compute shader */
|
||||
_mesa_reference_compprog(ctx, &ctx->ComputeProgram._Current,
|
||||
gl_compute_program(csProg->_LinkedShaders[MESA_SHADER_COMPUTE]->Program));
|
||||
} else {
|
||||
/* no compute program */
|
||||
_mesa_reference_compprog(ctx, &ctx->ComputeProgram._Current, NULL);
|
||||
}
|
||||
|
||||
/* Let the driver know what's happening:
|
||||
*/
|
||||
if (ctx->FragmentProgram._Current != prevFP) {
|
||||
@@ -225,6 +238,14 @@ update_program(struct gl_context *ctx)
|
||||
}
|
||||
}
|
||||
|
||||
if (ctx->ComputeProgram._Current != prevCP) {
|
||||
new_state |= _NEW_PROGRAM;
|
||||
if (ctx->Driver.BindProgram) {
|
||||
ctx->Driver.BindProgram(ctx, GL_COMPUTE_PROGRAM_NV,
|
||||
(struct gl_program *) ctx->ComputeProgram._Current);
|
||||
}
|
||||
}
|
||||
|
||||
return new_state;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user