void gen6_sol_program(struct brw_ff_gs_compile *c,
struct brw_ff_gs_prog_key *key,
unsigned num_verts, bool check_edge_flag);
+void gen6_brw_upload_ff_gs_prog(struct brw_context *brw);
#endif
static const struct brw_tracked_state *gen6_atoms[] =
{
&brw_vs_prog, /* must do before state base address */
- &brw_ff_gs_prog, /* must do before state base address */
+ &brw_gs_prog, /* must do before state base address */
&brw_wm_prog, /* must do before state base address */
&gen6_clip_vp,
#include "brw_context.h"
#include "brw_vec4_gs_visitor.h"
#include "brw_state.h"
+#include "brw_gs.h"
static bool
(struct brw_geometry_program *) brw->geometry_program;
if (gp == NULL) {
+ if (brw->gen == 6) {
+ if (brw->state.dirty.brw & BRW_NEW_TRANSFORM_FEEDBACK)
+ gen6_brw_upload_ff_gs_prog(brw);
+ return;
+ }
+
/* No geometry shader. Vertex data just passes straight through. */
if (brw->state.dirty.brw & BRW_NEW_VUE_MAP_VS) {
brw->vue_map_geom_out = brw->vue_map_vs;
const struct brw_tracked_state brw_gs_prog = {
.dirty = {
.mesa = (_NEW_LIGHT | _NEW_BUFFERS | _NEW_TEXTURE),
- .brw = BRW_NEW_GEOMETRY_PROGRAM | BRW_NEW_VUE_MAP_VS,
+ .brw = (BRW_NEW_GEOMETRY_PROGRAM |
+ BRW_NEW_VUE_MAP_VS |
+ BRW_NEW_TRANSFORM_FEEDBACK),
},
.emit = brw_upload_gs_prog
};