nv50: fix segfault when there's gaps in enabled texture units
Tested with progs/demos/multiarb.
This commit is contained in:
parent
4911443d36
commit
340436d8d2
|
@ -356,13 +356,16 @@ viewport_uptodate:
|
||||||
if (nv50->dirty & NV50_NEW_SAMPLER) {
|
if (nv50->dirty & NV50_NEW_SAMPLER) {
|
||||||
int i;
|
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_method(so, tesla, NV50TCL_CB_ADDR, 1);
|
||||||
so_data (so, NV50_CB_TSC);
|
so_data (so, NV50_CB_TSC);
|
||||||
so_method(so, tesla, NV50TCL_CB_DATA(0) | 0x40000000,
|
for (i = 0; i < nv50->sampler_nr; i++) {
|
||||||
nv50->sampler_nr * 8);
|
if (!nv50->sampler[i])
|
||||||
for (i = 0; i < nv50->sampler_nr; i++)
|
continue;
|
||||||
|
|
||||||
|
so_method(so, tesla, NV50TCL_CB_DATA(0) | (2<<29), 8);
|
||||||
so_datap (so, nv50->sampler[i]->tsc, 8);
|
so_datap (so, nv50->sampler[i]->tsc, 8);
|
||||||
|
}
|
||||||
so_ref(so, &nv50->state.tsc_upload);
|
so_ref(so, &nv50->state.tsc_upload);
|
||||||
so_ref(NULL, &so);
|
so_ref(NULL, &so);
|
||||||
}
|
}
|
||||||
|
|
|
@ -157,6 +157,9 @@ nv50_tex_validate(struct nv50_context *nv50)
|
||||||
for (unit = 0; unit < nv50->miptree_nr; unit++) {
|
for (unit = 0; unit < nv50->miptree_nr; unit++) {
|
||||||
struct nv50_miptree *mt = nv50->miptree[unit];
|
struct nv50_miptree *mt = nv50->miptree[unit];
|
||||||
|
|
||||||
|
if (!mt)
|
||||||
|
continue;
|
||||||
|
|
||||||
so_method(so, tesla, NV50TCL_CB_DATA(0) | 0x40000000, 8);
|
so_method(so, tesla, NV50TCL_CB_DATA(0) | 0x40000000, 8);
|
||||||
if (nv50_tex_construct(nv50, so, mt, unit)) {
|
if (nv50_tex_construct(nv50, so, mt, unit)) {
|
||||||
NOUVEAU_ERR("failed tex validate\n");
|
NOUVEAU_ERR("failed tex validate\n");
|
||||||
|
|
Loading…
Reference in New Issue