X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fllvmpipe%2Flp_texture.c;h=f6a1ec26bc5ec47196698e9c92e152334824db86;hb=978c1aa1d0f6fd9a188762a8534de33fc63eeea0;hp=8fac77b0c57d6dc4bc9af21b36853e604f6884a7;hpb=9a1fd9a37ce3ee2ede5bef5cf508a02f3bdb6098;p=mesa.git diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c b/src/gallium/drivers/llvmpipe/lp_texture.c index 8fac77b0c57..f6a1ec26bc5 100644 --- a/src/gallium/drivers/llvmpipe/lp_texture.c +++ b/src/gallium/drivers/llvmpipe/lp_texture.c @@ -601,10 +601,6 @@ llvmpipe_get_transfer(struct pipe_context *pipe, assert(resource); assert(level <= resource->last_level); - if (usage & PIPE_TRANSFER_MAP_PERMANENTLY) { - return NULL; - } - /* * Transfers, like other pipe operations, must happen in order, so flush the * context if necessary. @@ -774,6 +770,7 @@ llvmpipe_user_buffer_create(struct pipe_screen *screen, buffer->base.height0 = 1; buffer->base.depth0 = 1; buffer->base.array_size = 1; + buffer->base.user_ptr = ptr; buffer->userBuffer = TRUE; buffer->data = ptr; @@ -978,7 +975,9 @@ alloc_image_data(struct llvmpipe_resource *lpr, unsigned level, /* tiled data is stored in regular memory */ uint buffer_size = tex_image_size(lpr, level, layout); lpr->tiled[level].data = align_malloc(buffer_size, alignment); - memset(lpr->tiled[level].data, 0, buffer_size); + if (lpr->tiled[level].data) { + memset(lpr->tiled[level].data, 0, buffer_size); + } } else { assert(layout == LP_TEX_LAYOUT_LINEAR); @@ -997,7 +996,9 @@ alloc_image_data(struct llvmpipe_resource *lpr, unsigned level, /* not a display target - allocate regular memory */ uint buffer_size = tex_image_size(lpr, level, LP_TEX_LAYOUT_LINEAR); lpr->linear[level].data = align_malloc(buffer_size, alignment); - memset(lpr->linear[level].data, 0, buffer_size); + if (lpr->linear[level].data) { + memset(lpr->linear[level].data, 0, buffer_size); + } } } }