summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Vetter <[email protected]>2011-02-25 23:32:48 +0100
committerJakob Bornecrantz <[email protected]>2011-02-26 15:35:24 +0100
commitb8e44f648eac07d9a8c113b19a9097626c24a61f (patch)
tree15d303c794af58555776a8c217570b2dd4397384 /src
parent1df1e0841de7da9587e8b1f5d43304627305d22d (diff)
i915g: fix null deref in draw_rect emission
Signed-off-by: Daniel Vetter <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/i915/i915_state_emit.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/gallium/drivers/i915/i915_state_emit.c b/src/gallium/drivers/i915/i915_state_emit.c
index 510fb1ccc63..a9a9d7fcb4e 100644
--- a/src/gallium/drivers/i915/i915_state_emit.c
+++ b/src/gallium/drivers/i915/i915_state_emit.c
@@ -413,7 +413,6 @@ i915_emit_hardware_state(struct i915_context *i915 )
{
uint w, h;
struct pipe_surface *cbuf_surface = i915->framebuffer.cbufs[0];
- struct i915_texture *tex = i915_texture(cbuf_surface->texture);
unsigned x, y;
int layer;
uint32_t draw_offset;
@@ -422,10 +421,15 @@ i915_emit_hardware_state(struct i915_context *i915 )
ret = framebuffer_size(&i915->framebuffer, &w, &h);
assert(ret);
- layer = cbuf_surface->u.tex.first_layer;
+ if (cbuf_surface) {
+ struct i915_texture *tex = i915_texture(cbuf_surface->texture);
+ layer = cbuf_surface->u.tex.first_layer;
+
+ x = tex->image_offset[cbuf_surface->u.tex.level][layer].nblocksx;
+ y = tex->image_offset[cbuf_surface->u.tex.level][layer].nblocksy;
- x = tex->image_offset[cbuf_surface->u.tex.level][layer].nblocksx;
- y = tex->image_offset[cbuf_surface->u.tex.level][layer].nblocksy;
+ } else
+ x = y = 0;
draw_offset = x | (y << 16);