summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/llvmpipe/lp_tile_soa.h
diff options
context:
space:
mode:
authorJosé Fonseca <jfonseca@vmware.com>2009-08-18 11:41:01 +0100
committerJosé Fonseca <jfonseca@vmware.com>2009-08-29 09:21:34 +0100
commitefab431684bb17459073f6a2e96044cb2ebd2524 (patch)
tree7800a9ccaefaf6dd1937cfa8ceecf565125c0c1f /src/gallium/drivers/llvmpipe/lp_tile_soa.h
parentee066eaf6d0dd3c771dc3e37390f3665e747af2a (diff)
llvmpipe: Tile in SoA format identical to the blender function output.
Diffstat (limited to 'src/gallium/drivers/llvmpipe/lp_tile_soa.h')
-rw-r--r--src/gallium/drivers/llvmpipe/lp_tile_soa.h30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_tile_soa.h b/src/gallium/drivers/llvmpipe/lp_tile_soa.h
index 96fe87245c..3d8c703b73 100644
--- a/src/gallium/drivers/llvmpipe/lp_tile_soa.h
+++ b/src/gallium/drivers/llvmpipe/lp_tile_soa.h
@@ -29,9 +29,7 @@
#define LP_TILE_SOA_H
#include "pipe/p_compiler.h"
-
-
-struct pipe_transfer;
+#include "tgsi/tgsi_exec.h" // for NUM_CHANNELS
#ifdef __cplusplus
@@ -39,6 +37,32 @@ extern "C" {
#endif
+struct pipe_transfer;
+
+
+/**
+ * Cache tile size (width and height). This needs to be a power of two.
+ */
+#define TILE_SIZE 64
+
+
+#define TILE_VECTOR_HEIGHT 2
+#define TILE_VECTOR_WIDTH 8
+
+extern const unsigned char
+tile_offset[TILE_VECTOR_HEIGHT][TILE_VECTOR_WIDTH];
+
+#define TILE_C_STRIDE (TILE_VECTOR_HEIGHT*TILE_VECTOR_WIDTH)
+#define TILE_X_STRIDE (NUM_CHANNELS*TILE_C_STRIDE)
+#define TILE_Y_STRIDE (TILE_VECTOR_HEIGHT*TILE_SIZE*NUM_CHANNELS)
+
+#define TILE_PIXEL(_p, _x, _y, _c) \
+ ((_p)[((_y)/TILE_VECTOR_HEIGHT)*TILE_Y_STRIDE + \
+ ((_x)/TILE_VECTOR_WIDTH)*TILE_X_STRIDE + \
+ (_c)*TILE_C_STRIDE + \
+ tile_offset[(_y) % TILE_VECTOR_HEIGHT][(_x) % TILE_VECTOR_WIDTH]])
+
+
void
lp_get_tile_rgba_soa(struct pipe_transfer *pt,
uint x, uint y,