mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 21:40:08 +01:00
softpipe: fix streamout with an emptry geometry shader
Same approach as in the llvmpipe, if the geometry shader is null and we have stream output then attach it to the vertex shader right before executing the draw pipeline. Signed-off-by: Zack Rusin <zackr@vmware.com> Reviewed-by: José Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
723b78397f
commit
2aad06844f
2 changed files with 23 additions and 12 deletions
|
|
@ -105,6 +105,13 @@ softpipe_draw_vbo(struct pipe_context *pipe,
|
|||
draw_set_mapped_so_targets(draw, sp->num_so_targets,
|
||||
sp->so_targets);
|
||||
|
||||
if (sp->gs && !sp->gs->shader.tokens) {
|
||||
/* we have an empty geometry shader with stream output, so
|
||||
attach the stream output info to the current vertex shader */
|
||||
if (sp->vs) {
|
||||
draw_vs_attach_so(sp->vs->draw_data, &sp->gs->shader.stream_output);
|
||||
}
|
||||
}
|
||||
draw_collect_pipeline_statistics(draw,
|
||||
sp->active_statistics_queries > 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -275,21 +275,25 @@ softpipe_create_gs_state(struct pipe_context *pipe,
|
|||
if (state == NULL )
|
||||
goto fail;
|
||||
|
||||
/* debug */
|
||||
if (softpipe->dump_gs)
|
||||
tgsi_dump(templ->tokens, 0);
|
||||
state->shader = *templ;
|
||||
|
||||
/* copy shader tokens, the ones passed in will go away.
|
||||
*/
|
||||
state->shader.tokens = tgsi_dup_tokens(templ->tokens);
|
||||
if (state->shader.tokens == NULL)
|
||||
goto fail;
|
||||
if (templ->tokens) {
|
||||
/* debug */
|
||||
if (softpipe->dump_gs)
|
||||
tgsi_dump(templ->tokens, 0);
|
||||
|
||||
state->draw_data = draw_create_geometry_shader(softpipe->draw, templ);
|
||||
if (state->draw_data == NULL)
|
||||
goto fail;
|
||||
/* copy shader tokens, the ones passed in will go away.
|
||||
*/
|
||||
state->shader.tokens = tgsi_dup_tokens(templ->tokens);
|
||||
if (state->shader.tokens == NULL)
|
||||
goto fail;
|
||||
|
||||
state->max_sampler = state->draw_data->info.file_max[TGSI_FILE_SAMPLER];
|
||||
state->draw_data = draw_create_geometry_shader(softpipe->draw, templ);
|
||||
if (state->draw_data == NULL)
|
||||
goto fail;
|
||||
|
||||
state->max_sampler = state->draw_data->info.file_max[TGSI_FILE_SAMPLER];
|
||||
}
|
||||
|
||||
return state;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue