summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Roberts <neil@linux.intel.com>2012-02-13 18:48:17 +0000
committerNeil Roberts <neil@linux.intel.com>2012-02-13 18:48:17 +0000
commitf84839e87c855d677ed0a3d0a353ce7168a90907 (patch)
tree494d1c5fc0fe210d0886492b520f7ed288948452
parenta654dac122ea88ce1a942015e4b328ad6ae814af (diff)
downloadcogl-f84839e87c855d677ed0a3d0a353ce7168a90907.tar.gz
pipeline-state: Fix crash in the get_all_uniform_values function
The get_all_uniform_values function tries to walk the parent hierarchy of pipelines to find pipelines overriding the uniforms state and then grabs the values from the override. However it was accessing data inside the ‘big state’ even if the pipeline didn't override the uniforms state so it would crash if it encountered a parent pipeline with no big state. Reviewed-by: Robert Bragg <robert@linux.intel.com>
-rw-r--r--cogl/cogl-pipeline-state.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/cogl/cogl-pipeline-state.c b/cogl/cogl-pipeline-state.c
index 4dd06f9c..a79494a3 100644
--- a/cogl/cogl-pipeline-state.c
+++ b/cogl/cogl-pipeline-state.c
@@ -274,17 +274,18 @@ _cogl_pipeline_get_all_uniform_values (CoglPipeline *pipeline,
do
{
- const CoglPipelineUniformsState *uniforms_state =
- &pipeline->big_state->uniforms_state;
-
- data.override_count = 0;
- data.src_values = uniforms_state->override_values;
-
if ((pipeline->differences & COGL_PIPELINE_STATE_UNIFORMS))
- _cogl_bitmask_foreach (&uniforms_state->override_mask,
- get_uniforms_cb,
- &data);
+ {
+ const CoglPipelineUniformsState *uniforms_state =
+ &pipeline->big_state->uniforms_state;
+
+ data.override_count = 0;
+ data.src_values = uniforms_state->override_values;
+ _cogl_bitmask_foreach (&uniforms_state->override_mask,
+ get_uniforms_cb,
+ &data);
+ }
pipeline = _cogl_pipeline_get_parent (pipeline);
}
while (pipeline);