summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Bragg <robert@linux.intel.com>2013-01-19 15:36:25 +0000
committerRobert Bragg <robert@linux.intel.com>2013-01-21 17:24:33 +0000
commit957e3d050624c224f1b46c20674df4922ffdadee (patch)
tree963e1e63f2ae5a312cf0414dc5573dc9e5620296
parent5de5569e960102afe979a5f2f0403e1defebca62 (diff)
downloadcogl-957e3d050624c224f1b46c20674df4922ffdadee.tar.gz
progend-glsl: dirty prog for vertex state changes
_cogl_pipeline_progend_glsl_pre_change_notify and _cogl_pipeline_progend_glsl_layer_pre_change_notify were only dirtying the current program state for changes related to fragment processing. This make both functions also check for changes that affect vertex shader codegen. This also fixes a mistake where _cogl_pipeline_progend_glsl_layer_pre_change_notify was checking for non-layer related changes which would never be seen, and instead it should be checking for layer based changes only. (cherry picked from commit efc48edb6fc59b12c252856c7263e562f4eb1777)
-rw-r--r--cogl/driver/gl/cogl-pipeline-progend-glsl.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/cogl/driver/gl/cogl-pipeline-progend-glsl.c b/cogl/driver/gl/cogl-pipeline-progend-glsl.c
index fd3c4d61..c4e4bc20 100644
--- a/cogl/driver/gl/cogl-pipeline-progend-glsl.c
+++ b/cogl/driver/gl/cogl-pipeline-progend-glsl.c
@@ -756,8 +756,11 @@ _cogl_pipeline_progend_glsl_pre_change_notify (CoglPipeline *pipeline,
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
- if ((change & _cogl_pipeline_get_state_for_fragment_codegen (ctx)))
- dirty_program_state (pipeline);
+ if ((change & (_cogl_pipeline_get_state_for_fragment_codegen (ctx) |
+ COGL_PIPELINE_STATE_AFFECTS_VERTEX_CODEGEN)))
+ {
+ dirty_program_state (pipeline);
+ }
else
{
int i;
@@ -792,13 +795,12 @@ _cogl_pipeline_progend_glsl_layer_pre_change_notify (
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
- if ((change & _cogl_pipeline_get_state_for_fragment_codegen (ctx)))
+ if ((change & (_cogl_pipeline_get_layer_state_for_fragment_codegen (ctx) |
+ COGL_PIPELINE_LAYER_STATE_AFFECTS_VERTEX_CODEGEN)))
{
dirty_program_state (owner);
- return;
}
-
- if (change & COGL_PIPELINE_LAYER_STATE_COMBINE_CONSTANT)
+ else if (change & COGL_PIPELINE_LAYER_STATE_COMBINE_CONSTANT)
{
CoglPipelineProgramState *program_state = get_program_state (owner);
if (program_state)