#define MAX_GS_VERTS (4)
-struct brw_gs_prog_key {
- GLuint attrs:32;
- GLuint primitive:4;
- GLuint hint_gs_always:1;
+struct brw_ff_gs_prog_key {
+ 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:25;
+
+ /**
+ * 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_varying_slot 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 {
+struct brw_ff_gs_compile {
struct brw_compile func;
- struct brw_gs_prog_key key;
- struct brw_gs_prog_data prog_data;
+ struct brw_ff_gs_prog_key key;
+ struct brw_ff_gs_prog_data prog_data;
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;
-};
-#define ATTR_SIZE (4*4)
+ struct brw_vue_map vue_map;
+};
-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_tris( struct brw_gs_compile *c );
-void brw_gs_lines( struct brw_gs_compile *c );
-void brw_gs_points( struct brw_gs_compile *c );
+void brw_ff_gs_quads(struct brw_ff_gs_compile *c,
+ struct brw_ff_gs_prog_key *key);
+void brw_ff_gs_quad_strip(struct brw_ff_gs_compile *c,
+ struct brw_ff_gs_prog_key *key);
+void brw_ff_gs_lines(struct brw_ff_gs_compile *c);
+void gen6_sol_program(struct brw_ff_gs_compile *c,
+ struct brw_ff_gs_prog_key *key,
+ unsigned num_verts, bool check_edge_flag);
#endif