nv50: don't segfault on shaders with 0 instructions
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Wed, 15 Sep 2010 22:51:32 +0000 (00:51 +0200)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Thu, 16 Sep 2010 12:49:20 +0000 (14:49 +0200)
src/gallium/drivers/nv50/nv50_pc.c

index bb464ec4c9f54f0a7ac85d95c654d84f609abc69..676540538e551847c14923d78f8695fddf2ee2c5 100644 (file)
@@ -459,7 +459,8 @@ nv50_emit_program(struct nv_pc *pc)
    assert(pc->emit == &code[pc->bin_size / 4]);
 
    /* XXX: we can do better than this ... */
-   if (!(pc->emit[-2] & 1) || (pc->emit[-2] & 2) || (pc->emit[-1] & 3)) {
+   if (!pc->bin_size ||
+       !(pc->emit[-2] & 1) || (pc->emit[-2] & 2) || (pc->emit[-1] & 3)) {
       pc->emit[0] = 0xf0000001;
       pc->emit[1] = 0xe0000000;
       pc->bin_size += 8;
@@ -523,6 +524,7 @@ nv50_generate_code(struct nv50_translation_info *ti)
    ret = nv_pc_exec_pass2(pc);
    if (ret)
       goto out;
+   assert(!(pc->bin_size % 8));
 
    pc->emit = CALLOC(pc->bin_size / 4 + 2, 4);
    if (!pc->emit) {