summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2009-12-11 15:00:28 -0700
committerBrian Paul <brianp@vmware.com>2009-12-11 15:00:28 -0700
commit92dc0f92b0f0fa2f3e4ba832ef2232169ce19ce8 (patch)
tree55d20e0150e2bf252fb406e1ea742835923a3574
parent2bce5c195f94e2cce8f67c6a8066b0ae408487ce (diff)
llvmpipe: implement lp_rast_load_color()
-rw-r--r--src/gallium/drivers/llvmpipe/lp_rast.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_rast.c b/src/gallium/drivers/llvmpipe/lp_rast.c
index 2ea3ac6b3b1..9020cf9cec2 100644
--- a/src/gallium/drivers/llvmpipe/lp_rast.c
+++ b/src/gallium/drivers/llvmpipe/lp_rast.c
@@ -210,9 +210,31 @@ void lp_rast_load_color( struct lp_rasterizer *rast,
unsigned thread_index,
const union lp_rast_cmd_arg arg)
{
- LP_DBG(DEBUG_RAST, "%s\n", __FUNCTION__);
+ struct lp_rasterizer_task *task = &rast->tasks[thread_index];
+ const unsigned x = task->x;
+ const unsigned y = task->y;
+ int w = TILE_SIZE;
+ int h = TILE_SIZE;
+
+ LP_DBG(DEBUG_RAST, "%s at %u, %u\n", __FUNCTION__, x, y);
+
+ if (x + w > rast->state.fb.width)
+ w -= x + w - rast->state.fb.width;
+
+ if (y + h > rast->state.fb.height)
+ h -= y + h - rast->state.fb.height;
- /* call u_tile func to load colors from surface */
+ assert(w >= 0);
+ assert(h >= 0);
+ assert(w <= TILE_SIZE);
+ assert(h <= TILE_SIZE);
+
+ lp_tile_read_4ub(rast->cbuf_transfer->format,
+ rast->tasks[thread_index].tile.color,
+ rast->cbuf_map,
+ rast->cbuf_transfer->stride,
+ x, y,
+ w, h);
}