X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fllvmpipe%2Flp_texture.c;h=f6a1ec26bc5ec47196698e9c92e152334824db86;hb=978c1aa1d0f6fd9a188762a8534de33fc63eeea0;hp=ca38571b2bc273d4a0da37142a2ba2d8fb06c8dc;hpb=c88f3e0374620f18cf38d9fc3c45d14bc53f62b2;p=mesa.git diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c b/src/gallium/drivers/llvmpipe/lp_texture.c index ca38571b2bc..f6a1ec26bc5 100644 --- a/src/gallium/drivers/llvmpipe/lp_texture.c +++ b/src/gallium/drivers/llvmpipe/lp_texture.c @@ -219,7 +219,20 @@ llvmpipe_displaytarget_layout(struct llvmpipe_screen *screen, 16, &lpr->row_stride[0] ); - return lpr->dt != NULL; + if (lpr->dt == NULL) + return FALSE; + + { + void *map = winsys->displaytarget_map(winsys, lpr->dt, + PIPE_TRANSFER_WRITE); + + if (map) + memset(map, 0, height * lpr->row_stride[0]); + + winsys->displaytarget_unmap(winsys, lpr->dt); + } + + return TRUE; } @@ -265,6 +278,7 @@ llvmpipe_resource_create(struct pipe_screen *_screen, lpr->data = align_malloc(bytes, 16); if (!lpr->data) goto fail; + memset(lpr->data, 0, bytes); } lpr->id = id_counter++; @@ -756,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; @@ -960,11 +975,16 @@ 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); + if (lpr->tiled[level].data) { + memset(lpr->tiled[level].data, 0, buffer_size); + } } else { assert(layout == LP_TEX_LAYOUT_LINEAR); if (lpr->dt) { - /* we get the linear memory from the winsys */ + /* we get the linear memory from the winsys, and it has + * already been zeroed + */ struct llvmpipe_screen *screen = llvmpipe_screen(lpr->base.screen); struct sw_winsys *winsys = screen->winsys; @@ -976,6 +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); + if (lpr->linear[level].data) { + memset(lpr->linear[level].data, 0, buffer_size); + } } } }