X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi965%2Fbrw_gs.h;h=f2597c8abab3c99746141bbbf470840051fbd1e1;hb=8dd3e341b337ca2d22bcc0e7548a78a6c36ca77d;hp=bbb991ea2e57d67827b5e220f6f722ba862f37bd;hpb=288299ae12603cf7ab0388db426d764c3f31304e;p=mesa.git diff --git a/src/mesa/drivers/dri/i965/brw_gs.h b/src/mesa/drivers/dri/i965/brw_gs.h index bbb991ea2e5..f2597c8abab 100644 --- a/src/mesa/drivers/dri/i965/brw_gs.h +++ b/src/mesa/drivers/dri/i965/brw_gs.h @@ -40,11 +40,36 @@ #define MAX_GS_VERTS (4) struct brw_gs_prog_key { - GLuint attrs:32; - GLuint primitive:4; - GLuint hint_gs_always:1; + GLbitfield64 attrs; + + /** + * Hardware primitive type being drawn, e.g. _3DPRIM_TRILIST. + */ + GLuint primitive:8; + + GLuint pv_first:1; GLuint need_gs_prog:1; - GLuint pad:26; + GLuint userclip_active:1; + GLuint rasterizer_discard:1; + + /** + * Number of varyings that are output to transform feedback. + */ + GLuint num_transform_feedback_bindings:7; /* 0-BRW_MAX_SOL_BINDINGS */ + + /** + * Map from the index of a transform feedback binding table entry to the + * gl_vert_result that should be streamed out through that binding table + * entry. + */ + unsigned char transform_feedback_bindings[BRW_MAX_SOL_BINDINGS]; + + /** + * Map from the index of a transform feedback binding table entry to the + * swizzles that should be used when streaming out data through that + * binding table entry. + */ + unsigned char transform_feedback_swizzles[BRW_MAX_SOL_BINDINGS]; }; struct brw_gs_compile { @@ -54,23 +79,37 @@ struct brw_gs_compile { struct { struct brw_reg R0; + + /** + * Register holding streamed vertex buffer pointers -- see the Sandy + * Bridge PRM, volume 2 part 1, section 4.4.2 (GS Thread Payload + * [DevSNB]). These pointers are delivered in GRF 1. + */ + struct brw_reg SVBI; + struct brw_reg vertex[MAX_GS_VERTS]; + struct brw_reg header; + struct brw_reg temp; + + /** + * Register holding destination indices for streamed buffer writes. + * Only used for SOL programs. + */ + struct brw_reg destination_indices; } reg; - /* 3 different ways of expressing vertex size: - */ - GLuint nr_attrs; + /* Number of registers used to store vertex data */ GLuint nr_regs; - GLuint nr_bytes; - GLboolean need_ff_sync; + + struct brw_vue_map vue_map; }; #define ATTR_SIZE (4*4) -void brw_gs_quads( struct brw_gs_compile *c ); -void brw_gs_quad_strip( struct brw_gs_compile *c ); -void brw_gs_tris( struct brw_gs_compile *c ); +void brw_gs_quads( struct brw_gs_compile *c, struct brw_gs_prog_key *key ); +void brw_gs_quad_strip( struct brw_gs_compile *c, struct brw_gs_prog_key *key ); void brw_gs_lines( struct brw_gs_compile *c ); -void brw_gs_points( struct brw_gs_compile *c ); +void gen6_sol_program(struct brw_gs_compile *c, struct brw_gs_prog_key *key, + unsigned num_verts, bool check_edge_flag); #endif