diff options
Diffstat (limited to 'src/gallium/drivers/llvmpipe/lp_tile_soa.h')
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_tile_soa.h | 30 |
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, |