X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fllvmpipe%2Flp_rast.h;h=315601e1b6a97668c74209fd56828f0d93b714f3;hb=1d35f77228ad540a551a8e09e062b764a6e31f5e;hp=21ebfa7ca9185dbf7df7a149a60313895698490f;hpb=adb48d535082f5a311751e1866997e381b2d3038;p=mesa.git diff --git a/src/gallium/drivers/llvmpipe/lp_rast.h b/src/gallium/drivers/llvmpipe/lp_rast.h index 21ebfa7ca91..315601e1b6a 100644 --- a/src/gallium/drivers/llvmpipe/lp_rast.h +++ b/src/gallium/drivers/llvmpipe/lp_rast.h @@ -43,16 +43,17 @@ struct lp_rasterizer; struct lp_scene; -struct lp_scene_queue; struct lp_fence; struct cmd_bin; -struct pipe_screen; /** For sub-pixel positioning */ #define FIXED_ORDER 4 #define FIXED_ONE (1<stride)) +#define GET_DADY(inputs) ((float (*)[4])((char *)((inputs) + 1) + 2 * (inputs)->stride)) +#define GET_PLANES(tri) ((struct lp_rast_plane *)((char *)(&(tri)->inputs + 1) + 3 * (tri)->inputs.stride)) + -struct lp_rasterizer *lp_rast_create( struct pipe_screen *screen, - struct lp_scene_queue *empty ); -void lp_rast_destroy( struct lp_rasterizer * ); +struct lp_rasterizer * +lp_rast_create( unsigned num_threads ); -unsigned lp_rast_get_num_threads( struct lp_rasterizer * ); +void +lp_rast_destroy( struct lp_rasterizer * ); -void lp_rasterize_scene( struct lp_rasterizer *rast, - struct lp_scene *scene, - const struct pipe_framebuffer_state *fb, - bool write_depth ); +unsigned +lp_rast_get_num_threads( struct lp_rasterizer * ); +void +lp_rast_queue_scene( struct lp_rasterizer *rast, + struct lp_scene *scene ); + +void +lp_rast_finish( struct lp_rasterizer *rast ); union lp_rast_cmd_arg { const struct lp_rast_shader_inputs *shade_tile; - const struct lp_rast_triangle *triangle; + struct { + const struct lp_rast_triangle *tri; + unsigned plane_mask; + } triangle; const struct lp_rast_state *set_state; - uint8_t clear_color[4]; - unsigned clear_zstencil; + float clear_color[4]; + struct { + uint32_t value; + uint32_t mask; + } clear_zstencil; + const struct lp_rast_state *state; struct lp_fence *fence; + struct llvmpipe_query *query_obj; }; /* Cast wrappers. Hopefully these compile to noops! */ -static INLINE const union lp_rast_cmd_arg +static INLINE union lp_rast_cmd_arg lp_rast_arg_inputs( const struct lp_rast_shader_inputs *shade_tile ) { union lp_rast_cmd_arg arg; @@ -160,15 +173,33 @@ lp_rast_arg_inputs( const struct lp_rast_shader_inputs *shade_tile ) return arg; } -static INLINE const union lp_rast_cmd_arg -lp_rast_arg_triangle( const struct lp_rast_triangle *triangle ) +static INLINE union lp_rast_cmd_arg +lp_rast_arg_triangle( const struct lp_rast_triangle *triangle, + unsigned plane_mask) +{ + union lp_rast_cmd_arg arg; + arg.triangle.tri = triangle; + arg.triangle.plane_mask = plane_mask; + return arg; +} + +/** + * Build argument for a contained triangle. + * + * All planes are enabled, so instead of the plane mask we pass the upper + * left coordinates of the a block that fully encloses the triangle. + */ +static INLINE union lp_rast_cmd_arg +lp_rast_arg_triangle_contained( const struct lp_rast_triangle *triangle, + unsigned x, unsigned y) { union lp_rast_cmd_arg arg; - arg.triangle = triangle; + arg.triangle.tri = triangle; + arg.triangle.plane_mask = x | (y << 8); return arg; } -static INLINE const union lp_rast_cmd_arg +static INLINE union lp_rast_cmd_arg lp_rast_arg_state( const struct lp_rast_state *state ) { union lp_rast_cmd_arg arg; @@ -176,7 +207,7 @@ lp_rast_arg_state( const struct lp_rast_state *state ) return arg; } -static INLINE const union lp_rast_cmd_arg +static INLINE union lp_rast_cmd_arg lp_rast_arg_fence( struct lp_fence *fence ) { union lp_rast_cmd_arg arg; @@ -185,7 +216,25 @@ lp_rast_arg_fence( struct lp_fence *fence ) } -static INLINE const union lp_rast_cmd_arg +static INLINE union lp_rast_cmd_arg +lp_rast_arg_clearzs( unsigned value, unsigned mask ) +{ + union lp_rast_cmd_arg arg; + arg.clear_zstencil.value = value; + arg.clear_zstencil.mask = mask; + return arg; +} + + +static INLINE union lp_rast_cmd_arg +lp_rast_arg_query( struct llvmpipe_query *pq ) +{ + union lp_rast_cmd_arg arg; + arg.query_obj = pq; + return arg; +} + +static INLINE union lp_rast_cmd_arg lp_rast_arg_null( void ) { union lp_rast_cmd_arg arg; @@ -194,43 +243,39 @@ lp_rast_arg_null( void ) } - /** * Binnable Commands. * These get put into bins by the setup code and are called when * the bins are executed. */ +#define LP_RAST_OP_CLEAR_COLOR 0x0 +#define LP_RAST_OP_CLEAR_ZSTENCIL 0x1 +#define LP_RAST_OP_TRIANGLE_1 0x2 +#define LP_RAST_OP_TRIANGLE_2 0x3 +#define LP_RAST_OP_TRIANGLE_3 0x4 +#define LP_RAST_OP_TRIANGLE_4 0x5 +#define LP_RAST_OP_TRIANGLE_5 0x6 +#define LP_RAST_OP_TRIANGLE_6 0x7 +#define LP_RAST_OP_TRIANGLE_7 0x8 +#define LP_RAST_OP_TRIANGLE_8 0x9 +#define LP_RAST_OP_TRIANGLE_3_4 0xa +#define LP_RAST_OP_TRIANGLE_3_16 0xb +#define LP_RAST_OP_TRIANGLE_4_16 0xc +#define LP_RAST_OP_SHADE_TILE 0xd +#define LP_RAST_OP_SHADE_TILE_OPAQUE 0xe +#define LP_RAST_OP_BEGIN_QUERY 0xf +#define LP_RAST_OP_END_QUERY 0x10 +#define LP_RAST_OP_SET_STATE 0x11 + +#define LP_RAST_OP_MAX 0x12 +#define LP_RAST_OP_MASK 0xff + +void +lp_debug_bins( struct lp_scene *scene ); +void +lp_debug_draw_bins_by_cmd_length( struct lp_scene *scene ); +void +lp_debug_draw_bins_by_coverage( struct lp_scene *scene ); -void lp_rast_clear_color( struct lp_rasterizer *, - unsigned thread_index, - const union lp_rast_cmd_arg ); - -void lp_rast_clear_zstencil( struct lp_rasterizer *, - unsigned thread_index, - const union lp_rast_cmd_arg ); - -void lp_rast_load_color( struct lp_rasterizer *, - unsigned thread_index, - const union lp_rast_cmd_arg ); - -void lp_rast_load_zstencil( struct lp_rasterizer *, - unsigned thread_index, - const union lp_rast_cmd_arg ); - -void lp_rast_set_state( struct lp_rasterizer *, - unsigned thread_index, - const union lp_rast_cmd_arg ); - -void lp_rast_triangle( struct lp_rasterizer *, - unsigned thread_index, - const union lp_rast_cmd_arg ); - -void lp_rast_shade_tile( struct lp_rasterizer *, - unsigned thread_index, - const union lp_rast_cmd_arg ); - -void lp_rast_fence( struct lp_rasterizer *, - unsigned thread_index, - const union lp_rast_cmd_arg ); #endif