radeonsi: always unmap texture CPU mappings on 32-bit CPU architectures

Team Fortress 2 32-bit version runs out of the CPU address space.

Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
This commit is contained in:
Marek Olšák 2018-12-14 16:03:00 -05:00
parent edfca1f8dc
commit 3ae57957be

View file

@ -1798,6 +1798,12 @@ static void *si_texture_transfer_map(struct pipe_context *ctx,
buf = &tex->buffer;
}
/* Always unmap texture CPU mappings on 32-bit architectures, so that
* we don't run out of the CPU address space.
*/
if (sizeof(void*) == 4)
usage |= RADEON_TRANSFER_TEMPORARY;
if (!(map = si_buffer_map_sync_with_rings(sctx, buf, usage)))
goto fail_trans;
@ -1819,6 +1825,16 @@ static void si_texture_transfer_unmap(struct pipe_context *ctx,
struct pipe_resource *texture = transfer->resource;
struct si_texture *tex = (struct si_texture*)texture;
/* Always unmap texture CPU mappings on 32-bit architectures, so that
* we don't run out of the CPU address space.
*/
if (sizeof(void*) == 4) {
struct r600_resource *buf =
stransfer->staging ? stransfer->staging : &tex->buffer;
sctx->ws->buffer_unmap(buf->buf);
}
if ((transfer->usage & PIPE_TRANSFER_WRITE) && stransfer->staging) {
if (tex->is_depth && tex->buffer.b.b.nr_samples <= 1) {
ctx->resource_copy_region(ctx, texture, transfer->level,