浏览代码

nv50: fix segfault when there's gaps in enabled texture units

Tested with progs/demos/multiarb.
tags/mesa_7_7_rc1
Ben Skeggs 16 年前
父节点
当前提交
340436d8d2
共有 2 个文件被更改,包括 10 次插入4 次删除
  1. 7
    4
      src/gallium/drivers/nv50/nv50_state_validate.c
  2. 3
    0
      src/gallium/drivers/nv50/nv50_tex.c

+ 7
- 4
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);
}

+ 3
- 0
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");

正在加载...
取消
保存