Mesa (master): nv50: don't segfault on shaders with 0 instructions

Christoph Bumiller chrisbmr at kemper.freedesktop.org
Thu Sep 16 12:50:37 UTC 2010


Module: Mesa
Branch: master
Commit: e0aa7e043803b10f503440ed088d89b67f5fd66f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e0aa7e043803b10f503440ed088d89b67f5fd66f

Author: Christoph Bumiller <e0425955 at student.tuwien.ac.at>
Date:   Thu Sep 16 00:51:32 2010 +0200

nv50: don't segfault on shaders with 0 instructions

---

 src/gallium/drivers/nv50/nv50_pc.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_pc.c b/src/gallium/drivers/nv50/nv50_pc.c
index bb464ec..6765405 100644
--- a/src/gallium/drivers/nv50/nv50_pc.c
+++ b/src/gallium/drivers/nv50/nv50_pc.c
@@ -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) {




More information about the mesa-commit mailing list