i915g: Don't bind 0-length programs
authorStéphane Marchesin <marcheu@chromium.org>
Thu, 4 Oct 2012 04:06:56 +0000 (21:06 -0700)
committerStéphane Marchesin <marcheu@chromium.org>
Thu, 4 Oct 2012 19:39:06 +0000 (12:39 -0700)
Since we started doing fixups for different render target formats,
this has been an issue. Instead just don't do anything, when the
program gets emitted later it'll get the correct fixup.

Fixes a bunch of piglit tests.

src/gallium/drivers/i915/i915_state_emit.c

index 590a1baa42093213dd83cb2cd62918c5c4e04a72..7b4b02ee6202d26a2788e20fc455fe6517a0adcc 100644 (file)
@@ -370,6 +370,11 @@ validate_program(struct i915_context *i915, unsigned *batch_space)
 {
    uint additional_size = 0;
 
+   if (!i915->fs->program_len) {
+      *batch_space = 0;
+      return;
+   }
+
    additional_size += i915->current.target_fixup_format ? 3 : 0;
 
    /* we need more batch space if we want to emulate rgba framebuffers */
@@ -382,12 +387,13 @@ emit_program(struct i915_context *i915)
    uint additional_size = 0;
    uint i;
 
+   if (!i915->fs->program_len)
+      return;
+
    /* count how much additional space we'll need */
    validate_program(i915, &additional_size);
    additional_size -= i915->fs->decl_len + i915->fs->program_len;
 
-   /* we should always have, at least, a pass-through program */
-   assert(i915->fs->program_len > 0);
 
    /* output the declarations */
    {