summaryrefslogtreecommitdiff
path: root/src/gallium/drivers
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2010-04-08 14:47:28 -0600
committerBrian Paul <brianp@vmware.com>2010-04-08 14:47:30 -0600
commita8aa763e8a717533f2b13bb6ea53cbccbede68c9 (patch)
treec66ece1316a09f968b9cb6cf9cf51494a0a7f3b7 /src/gallium/drivers
parent463bc64af266194acbea71cd52e26a79b8c8a260 (diff)
downloadmesa-a8aa763e8a717533f2b13bb6ea53cbccbede68c9.tar.gz
llvmpipe: call llvmpipe_get_texture_tile() for depth/stencil
The returned pointer isn't used, but the tile status/layout info gets updated. Helps to fix glReadPixels(DEPTH / STENCIL).
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r--src/gallium/drivers/llvmpipe/lp_rast.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_rast.c b/src/gallium/drivers/llvmpipe/lp_rast.c
index 73770d8e989..f3ac77a7092 100644
--- a/src/gallium/drivers/llvmpipe/lp_rast.c
+++ b/src/gallium/drivers/llvmpipe/lp_rast.c
@@ -175,12 +175,26 @@ lp_rast_tile_begin(struct lp_rasterizer_task *task,
{
struct pipe_surface *zsbuf = rast->curr_scene->fb.zsbuf;
if (zsbuf) {
+ struct llvmpipe_texture *lpt = llvmpipe_texture(zsbuf->texture);
+
if (scene->has_depth_clear)
usage = LP_TEX_USAGE_WRITE_ALL;
else
usage = LP_TEX_USAGE_READ_WRITE;
+ /* "prime" the tile: convert data from linear to tiled if necessary
+ * and update the tile's layout info.
+ */
+ (void) llvmpipe_get_texture_tile(lpt,
+ zsbuf->face,
+ zsbuf->level,
+ usage,
+ x, y);
+ /* Get actual pointer to the tile data. Note that depth/stencil
+ * data is tiled differently than color data.
+ */
task->depth_tile = lp_rast_get_depth_block_pointer(rast, x, y);
+
assert(task->depth_tile);
}
else {