summaryrefslogtreecommitdiff
path: root/cogl/cogl-pipeline-state.c
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 /cogl/cogl-pipeline-state.c
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>
Diffstat (limited to 'cogl/cogl-pipeline-state.c')
-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);