llvmpipe: implement lp_rast_load_color()
authorBrian Paul <brianp@vmware.com>
Fri, 11 Dec 2009 22:00:28 +0000 (15:00 -0700)
committerBrian Paul <brianp@vmware.com>
Fri, 11 Dec 2009 22:00:28 +0000 (15:00 -0700)
src/gallium/drivers/llvmpipe/lp_rast.c

index 2ea3ac6..9020cf9 100644 (file)
@@ -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);
 }