}
static int generate_gs_copy_shader(struct r600_context *rctx,
- struct r600_pipe_shader *gs)
+ struct r600_pipe_shader *gs,
+ struct pipe_stream_output_info *so)
{
struct r600_shader_ctx ctx = {};
struct r600_shader *gs_shader = &gs->shader;
}
/* XXX handle clipvertex, streamout? */
+ emit_streamout(&ctx, so);
/* export vertex data */
/* XXX factor out common code with r600_shader_from_tgsi ? */
}
if (ctx.type == TGSI_PROCESSOR_GEOMETRY) {
- if ((r = generate_gs_copy_shader(rctx, pipeshader)))
+ if ((r = generate_gs_copy_shader(rctx, pipeshader, &so)))
return r;
}
struct r600_context *rctx = (struct r600_context *)ctx;
rctx->gs_shader = (struct r600_pipe_shader_selector *)state;
+
+ if (!state)
+ return;
+ rctx->b.streamout.stride_in_dw = rctx->gs_shader->so.stride;
}
static void r600_delete_shader_selector(struct pipe_context *ctx,