diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2009-10-06 13:55:48 +1000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2009-10-06 13:57:51 +1000 |
commit | 340436d8d2f5f6360c2920de3a7547af95deb8f6 (patch) | |
tree | d92a9c63591fd245bf86a6885e532579e6f804fa /src/gallium/drivers/nv50 | |
parent | 4911443d364e38bf93915cf9587f5cf8791cb30d (diff) |
nv50: fix segfault when there's gaps in enabled texture units
Tested with progs/demos/multiarb.
Diffstat (limited to 'src/gallium/drivers/nv50')
-rw-r--r-- | src/gallium/drivers/nv50/nv50_state_validate.c | 11 | ||||
-rw-r--r-- | src/gallium/drivers/nv50/nv50_tex.c | 3 |
2 files changed, 10 insertions, 4 deletions
diff --git a/src/gallium/drivers/nv50/nv50_state_validate.c b/src/gallium/drivers/nv50/nv50_state_validate.c index 867b1ea872..fd27620371 100644 --- a/src/gallium/drivers/nv50/nv50_state_validate.c +++ b/src/gallium/drivers/nv50/nv50_state_validate.c @@ -356,13 +356,16 @@ viewport_uptodate: if (nv50->dirty & NV50_NEW_SAMPLER) { int i; - so = so_new(nv50->sampler_nr * 8 + 3, 0); + so = so_new(nv50->sampler_nr * 9 + 2, 0); so_method(so, tesla, NV50TCL_CB_ADDR, 1); so_data (so, NV50_CB_TSC); - so_method(so, tesla, NV50TCL_CB_DATA(0) | 0x40000000, - nv50->sampler_nr * 8); - for (i = 0; i < nv50->sampler_nr; i++) + for (i = 0; i < nv50->sampler_nr; i++) { + if (!nv50->sampler[i]) + continue; + + so_method(so, tesla, NV50TCL_CB_DATA(0) | (2<<29), 8); so_datap (so, nv50->sampler[i]->tsc, 8); + } so_ref(so, &nv50->state.tsc_upload); so_ref(NULL, &so); } diff --git a/src/gallium/drivers/nv50/nv50_tex.c b/src/gallium/drivers/nv50/nv50_tex.c index 21825a0411..72d33150af 100644 --- a/src/gallium/drivers/nv50/nv50_tex.c +++ b/src/gallium/drivers/nv50/nv50_tex.c @@ -157,6 +157,9 @@ nv50_tex_validate(struct nv50_context *nv50) for (unit = 0; unit < nv50->miptree_nr; unit++) { struct nv50_miptree *mt = nv50->miptree[unit]; + if (!mt) + continue; + so_method(so, tesla, NV50TCL_CB_DATA(0) | 0x40000000, 8); if (nv50_tex_construct(nv50, so, mt, unit)) { NOUVEAU_ERR("failed tex validate\n"); |