ss->total_resource_bytes -= tex->size;
+ FREE(tex->rendered_to);
FREE(tex);
}
if (usage & PIPE_TRANSFER_MAP_DIRECTLY)
return NULL;
- assert(box->depth == 1);
st = CALLOC_STRUCT(svga_transfer);
if (!st)
return NULL;
st->base.usage = usage;
st->base.box = *box;
st->base.stride = nblocksx*util_format_get_blocksize(texture->format);
- st->base.layer_stride = 0;
+ st->base.layer_stride = st->base.stride * nblocksy;
st->hw_nblocksy = nblocksy;
st->hwbuf = svga_winsys_buffer_create(svga,
1,
0,
- st->hw_nblocksy*st->base.stride);
+ st->hw_nblocksy * st->base.stride * box->depth);
while(!st->hwbuf && (st->hw_nblocksy /= 2)) {
st->hwbuf = svga_winsys_buffer_create(svga,
1,
0,
- st->hw_nblocksy*st->base.stride);
+ st->hw_nblocksy * st->base.stride * box->depth);
}
if(!st->hwbuf)
svga_transfer_dma(svga, st, SVGA3D_WRITE_HOST_VRAM, flags);
ss->texture_timestamp++;
- tex->view_age[transfer->level] = ++(tex->age);
+ svga_age_texture_view(tex, transfer->level);
if (transfer->resource->target == PIPE_TEXTURE_CUBE)
- tex->defined[transfer->box.z][transfer->level] = TRUE;
+ svga_define_texture_level(tex, transfer->box.z, transfer->level);
else
- tex->defined[0][transfer->level] = TRUE;
+ svga_define_texture_level(tex, 0, transfer->level);
}
FREE(st->swbuf);
}
if (template->target == PIPE_TEXTURE_3D) {
- tex->key.flags |= SVGA3D_SURFACE_HINT_VOLUME;
+ tex->key.flags |= SVGA3D_SURFACE_VOLUME;
}
tex->key.cachable = 1;
tex->size = util_resource_size(template);
svgascreen->total_resource_bytes += tex->size;
+ tex->rendered_to = CALLOC(template->depth0 * template->array_size,
+ sizeof(tex->rendered_to[0]));
+ if (!tex->rendered_to)
+ goto error2;
+
return &tex->b.b;
error2:
+ FREE(tex->rendered_to);
FREE(tex);
error1:
return NULL;
tex->key.cachable = 0;
tex->handle = srf;
+ tex->rendered_to = CALLOC(1, sizeof(tex->rendered_to[0]));
+
return &tex->b.b;
}