diff options
author | Stéphane Marchesin <marcheu@chromium.org> | 2011-06-24 16:41:09 -0700 |
---|---|---|
committer | Stéphane Marchesin <marcheu@chromium.org> | 2011-06-24 16:43:58 -0700 |
commit | 3a7953910a7c3babebd6479bbefe9a1032bd8299 (patch) | |
tree | 9f493d4b8bef8fed53263dae1ec4b17531e51f4d | |
parent | 1a69b50b3b441ce8f7a00af3a7f02c37df50f6c3 (diff) |
i915g: Don't do shader fixup if no surface is bound.
-rw-r--r-- | src/gallium/drivers/i915/i915_state_emit.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/gallium/drivers/i915/i915_state_emit.c b/src/gallium/drivers/i915/i915_state_emit.c index b7ccba8cd83..55399a9cdc8 100644 --- a/src/gallium/drivers/i915/i915_state_emit.c +++ b/src/gallium/drivers/i915/i915_state_emit.c @@ -355,8 +355,14 @@ static const struct { PIPE_FORMAT_NONE, 0x00000000}, }; -static boolean need_fixup(enum pipe_format f) +static boolean need_fixup(struct pipe_surface* p) { + enum pipe_format f; + /* if we don't have a surface bound yet, we don't need to fixup the shader */ + if (!p) + return FALSE; + + f = p->format; for(int i=0; fixup_formats[i].format != PIPE_FORMAT_NONE; i++) if (fixup_formats[i].format == f) return TRUE; @@ -379,14 +385,14 @@ validate_program(struct i915_context *i915, unsigned *batch_space) struct pipe_surface *cbuf_surface = i915->framebuffer.cbufs[0]; /* we need more batch space if we want to emulate rgba framebuffers */ - *batch_space = i915->fs->program_len + (need_fixup(cbuf_surface->format) ? 3 : 0); + *batch_space = i915->fs->program_len + (need_fixup(cbuf_surface) ? 3 : 0); } static void emit_program(struct i915_context *i915) { struct pipe_surface *cbuf_surface = i915->framebuffer.cbufs[0]; - boolean need_format_fixup = need_fixup(cbuf_surface->format); + boolean need_format_fixup = need_fixup(cbuf_surface); uint i; /* we should always have, at least, a pass-through program */ |