diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c index e71e400c424..24d3594c006 100644 --- a/src/gallium/auxiliary/cso_cache/cso_context.c +++ b/src/gallium/auxiliary/cso_cache/cso_context.c @@ -91,9 +91,11 @@ struct cso_context_priv { int max_sampler_seen; unsigned nr_so_targets; + enum mesa_prim so_output_prim; struct pipe_stream_output_target *so_targets[PIPE_MAX_SO_BUFFERS]; unsigned nr_so_targets_saved; + enum mesa_prim so_output_prim_saved; struct pipe_stream_output_target *so_targets_saved[PIPE_MAX_SO_BUFFERS]; /** Current and saved state. @@ -451,7 +453,7 @@ cso_unbind_context(struct cso_context *cso) ctx->base.pipe->bind_vertex_elements_state(ctx->base.pipe, NULL); if (ctx->has_streamout) - ctx->base.pipe->set_stream_output_targets(ctx->base.pipe, 0, NULL, NULL); + ctx->base.pipe->set_stream_output_targets(ctx->base.pipe, 0, NULL, NULL, 0); struct pipe_framebuffer_state fb = {0}; ctx->base.pipe->set_framebuffer_state(ctx->base.pipe, &fb); @@ -1547,7 +1549,8 @@ void cso_set_stream_outputs(struct cso_context *cso, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct cso_context_priv *ctx = (struct cso_context_priv *)cso; struct pipe_context *pipe = ctx->base.pipe; @@ -1573,8 +1576,9 @@ cso_set_stream_outputs(struct cso_context *cso, } pipe->set_stream_output_targets(pipe, num_targets, targets, - offsets); + offsets, output_prim); ctx->nr_so_targets = num_targets; + ctx->so_output_prim = output_prim; } @@ -1586,6 +1590,7 @@ cso_save_stream_outputs(struct cso_context_priv *ctx) } ctx->nr_so_targets_saved = ctx->nr_so_targets; + ctx->so_output_prim_saved = ctx->so_output_prim; for (unsigned i = 0; i < ctx->nr_so_targets; i++) { assert(!ctx->so_targets_saved[i]); @@ -1624,10 +1629,12 @@ cso_restore_stream_outputs(struct cso_context_priv *ctx) } pipe->set_stream_output_targets(pipe, ctx->nr_so_targets_saved, - ctx->so_targets, offset); + ctx->so_targets, offset, + ctx->so_output_prim_saved); ctx->nr_so_targets = ctx->nr_so_targets_saved; ctx->nr_so_targets_saved = 0; + ctx->so_output_prim = ctx->so_output_prim_saved; } diff --git a/src/gallium/auxiliary/cso_cache/cso_context.h b/src/gallium/auxiliary/cso_cache/cso_context.h index 4f154fad98d..f3a65e24e51 100644 --- a/src/gallium/auxiliary/cso_cache/cso_context.h +++ b/src/gallium/auxiliary/cso_cache/cso_context.h @@ -101,7 +101,8 @@ void cso_set_vertex_buffers(struct cso_context *ctx, void cso_set_stream_outputs(struct cso_context *ctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets); + const unsigned *offsets, + enum mesa_prim output_prim); enum cso_unbind_flags { diff --git a/src/gallium/auxiliary/driver_ddebug/dd_context.c b/src/gallium/auxiliary/driver_ddebug/dd_context.c index 4032038aade..88f3caf6600 100644 --- a/src/gallium/auxiliary/driver_ddebug/dd_context.c +++ b/src/gallium/auxiliary/driver_ddebug/dd_context.c @@ -590,7 +590,8 @@ static void dd_context_set_stream_output_targets(struct pipe_context *_pipe, unsigned num_targets, struct pipe_stream_output_target **tgs, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct dd_context *dctx = dd_context(_pipe); struct pipe_context *pipe = dctx->pipe; @@ -599,7 +600,7 @@ dd_context_set_stream_output_targets(struct pipe_context *_pipe, dstate->num_so_targets = num_targets; safe_memcpy(dstate->so_targets, tgs, sizeof(*tgs) * num_targets); safe_memcpy(dstate->so_offsets, offsets, sizeof(*offsets) * num_targets); - pipe->set_stream_output_targets(pipe, num_targets, tgs, offsets); + pipe->set_stream_output_targets(pipe, num_targets, tgs, offsets, output_prim); } diff --git a/src/gallium/auxiliary/driver_noop/noop_state.c b/src/gallium/auxiliary/driver_noop/noop_state.c index dcd7dc960b4..1580060f8f4 100644 --- a/src/gallium/auxiliary/driver_noop/noop_state.c +++ b/src/gallium/auxiliary/driver_noop/noop_state.c @@ -281,7 +281,8 @@ static void noop_stream_output_target_destroy(struct pipe_context *ctx, static void noop_set_stream_output_targets(struct pipe_context *ctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { } diff --git a/src/gallium/auxiliary/driver_trace/tr_context.c b/src/gallium/auxiliary/driver_trace/tr_context.c index cd4520da73a..5503f86ddfa 100644 --- a/src/gallium/auxiliary/driver_trace/tr_context.c +++ b/src/gallium/auxiliary/driver_trace/tr_context.c @@ -1311,7 +1311,8 @@ static void trace_context_set_stream_output_targets(struct pipe_context *_pipe, unsigned num_targets, struct pipe_stream_output_target **tgs, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct trace_context *tr_ctx = trace_context(_pipe); struct pipe_context *pipe = tr_ctx->pipe; @@ -1322,8 +1323,9 @@ trace_context_set_stream_output_targets(struct pipe_context *_pipe, trace_dump_arg(uint, num_targets); trace_dump_arg_array(ptr, tgs, num_targets); trace_dump_arg_array(uint, offsets, num_targets); + trace_dump_arg(uint, output_prim); - pipe->set_stream_output_targets(pipe, num_targets, tgs, offsets); + pipe->set_stream_output_targets(pipe, num_targets, tgs, offsets, output_prim); trace_dump_call_end(); } diff --git a/src/gallium/auxiliary/hud/hud_context.c b/src/gallium/auxiliary/hud/hud_context.c index 19bef5ec7e9..6233ac05e80 100644 --- a/src/gallium/auxiliary/hud/hud_context.c +++ b/src/gallium/auxiliary/hud/hud_context.c @@ -572,7 +572,7 @@ hud_draw_results(struct hud_context *hud, struct pipe_resource *tex) cso_set_depth_stencil_alpha(cso, &hud->dsa); cso_set_rasterizer(cso, &hud->rasterizer); cso_set_viewport(cso, &viewport); - cso_set_stream_outputs(cso, 0, NULL, NULL); + cso_set_stream_outputs(cso, 0, NULL, NULL, 0); cso_set_tessctrl_shader_handle(cso, NULL); cso_set_tesseval_shader_handle(cso, NULL); cso_set_geometry_shader_handle(cso, NULL); diff --git a/src/gallium/auxiliary/postprocess/pp_run.c b/src/gallium/auxiliary/postprocess/pp_run.c index 893390b199a..bba404daac3 100644 --- a/src/gallium/auxiliary/postprocess/pp_run.c +++ b/src/gallium/auxiliary/postprocess/pp_run.c @@ -139,7 +139,7 @@ pp_run(struct pp_queue_t *ppq, struct pipe_resource *in, /* set default state */ cso_set_sample_mask(cso, ~0); cso_set_min_samples(cso, 1); - cso_set_stream_outputs(cso, 0, NULL, NULL); + cso_set_stream_outputs(cso, 0, NULL, NULL, 0); cso_set_tessctrl_shader_handle(cso, NULL); cso_set_tesseval_shader_handle(cso, NULL); cso_set_geometry_shader_handle(cso, NULL); diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c index ecbcff36902..5bdfc7b2928 100644 --- a/src/gallium/auxiliary/util/u_blitter.c +++ b/src/gallium/auxiliary/util/u_blitter.c @@ -681,7 +681,8 @@ void util_blitter_restore_vertex_states(struct blitter_context *blitter) offsets[i] = (unsigned)-1; pipe->set_stream_output_targets(pipe, ctx->base.saved_num_so_targets, - ctx->base.saved_so_targets, offsets); + ctx->base.saved_so_targets, offsets, + ctx->base.saved_so_output_prim); for (i = 0; i < ctx->base.saved_num_so_targets; i++) pipe_so_target_reference(&ctx->base.saved_so_targets[i], NULL); @@ -1391,7 +1392,7 @@ static void blitter_set_common_draw_rect_state(struct blitter_context_priv *ctx, pipe->bind_tes_state(pipe, NULL); } if (ctx->has_stream_out) - pipe->set_stream_output_targets(pipe, 0, NULL, NULL); + pipe->set_stream_output_targets(pipe, 0, NULL, NULL, 0); } static void blitter_draw(struct blitter_context_priv *ctx, @@ -2661,7 +2662,7 @@ void util_blitter_clear_buffer(struct blitter_context *blitter, pipe->bind_rasterizer_state(pipe, ctx->rs_discard_state); so_target = pipe->create_stream_output_target(pipe, dst, offset, size); - pipe->set_stream_output_targets(pipe, 1, &so_target, offsets); + pipe->set_stream_output_targets(pipe, 1, &so_target, offsets, MESA_PRIM_POINTS); util_draw_arrays(pipe, MESA_PRIM_POINTS, 0, size / 4); diff --git a/src/gallium/auxiliary/util/u_blitter.h b/src/gallium/auxiliary/util/u_blitter.h index b0162e3a215..92adde9107c 100644 --- a/src/gallium/auxiliary/util/u_blitter.h +++ b/src/gallium/auxiliary/util/u_blitter.h @@ -133,6 +133,7 @@ struct blitter_context struct pipe_vertex_buffer saved_vertex_buffers[PIPE_MAX_ATTRIBS]; unsigned saved_num_so_targets; + enum mesa_prim saved_so_output_prim; struct pipe_stream_output_target *saved_so_targets[PIPE_MAX_SO_BUFFERS]; struct pipe_query *saved_render_cond_query; @@ -549,12 +550,15 @@ util_blitter_save_vertex_buffers(struct blitter_context *blitter, static inline void util_blitter_save_so_targets(struct blitter_context *blitter, unsigned num_targets, - struct pipe_stream_output_target **targets) + struct pipe_stream_output_target **targets, + enum mesa_prim output_prim) { unsigned i; assert(num_targets <= ARRAY_SIZE(blitter->saved_so_targets)); blitter->saved_num_so_targets = num_targets; + blitter->saved_so_output_prim = output_prim; + for (i = 0; i < num_targets; i++) pipe_so_target_reference(&blitter->saved_so_targets[i], targets[i]); diff --git a/src/gallium/auxiliary/util/u_threaded_context.c b/src/gallium/auxiliary/util/u_threaded_context.c index 6e3b8b95bf0..9133b737294 100644 --- a/src/gallium/auxiliary/util/u_threaded_context.c +++ b/src/gallium/auxiliary/util/u_threaded_context.c @@ -2198,7 +2198,8 @@ tc_add_set_vertex_buffers_call(struct pipe_context *_pipe, unsigned count) struct tc_stream_outputs { struct tc_call_base base; - unsigned count; + uint8_t count; + uint8_t output_prim; struct pipe_stream_output_target *targets[PIPE_MAX_SO_BUFFERS]; unsigned offsets[PIPE_MAX_SO_BUFFERS]; }; @@ -2209,7 +2210,8 @@ tc_call_set_stream_output_targets(struct pipe_context *pipe, void *call) struct tc_stream_outputs *p = to_call(call, tc_stream_outputs); unsigned count = p->count; - pipe->set_stream_output_targets(pipe, count, p->targets, p->offsets); + pipe->set_stream_output_targets(pipe, count, p->targets, p->offsets, + p->output_prim); for (unsigned i = 0; i < count; i++) tc_drop_so_target_reference(p->targets[i]); @@ -2220,7 +2222,8 @@ static void tc_set_stream_output_targets(struct pipe_context *_pipe, unsigned count, struct pipe_stream_output_target **tgs, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct threaded_context *tc = threaded_context(_pipe); struct tc_stream_outputs *p = @@ -2238,6 +2241,7 @@ tc_set_stream_output_targets(struct pipe_context *_pipe, } } p->count = count; + p->output_prim = output_prim; memcpy(p->offsets, offsets, count * sizeof(unsigned)); tc_unbind_buffers(&tc->streamout_buffers[count], PIPE_MAX_SO_BUFFERS - count); diff --git a/src/gallium/drivers/asahi/agx_blit.c b/src/gallium/drivers/asahi/agx_blit.c index 938247445e3..ee31c5f45bd 100644 --- a/src/gallium/drivers/asahi/agx_blit.c +++ b/src/gallium/drivers/asahi/agx_blit.c @@ -477,7 +477,7 @@ agx_blitter_save(struct agx_context *ctx, struct blitter_context *blitter, util_blitter_save_geometry_shader(blitter, ctx->stage[PIPE_SHADER_GEOMETRY].shader); util_blitter_save_so_targets(blitter, ctx->streamout.num_targets, - ctx->streamout.targets); + ctx->streamout.targets, MESA_PRIM_UNKNOWN); util_blitter_save_vertex_buffers(blitter, ctx->vertex_buffers, util_last_bit(ctx->vb_mask)); util_blitter_save_vertex_elements(blitter, ctx->attributes); diff --git a/src/gallium/drivers/asahi/agx_streamout.c b/src/gallium/drivers/asahi/agx_streamout.c index f5278c775bb..c482147446b 100644 --- a/src/gallium/drivers/asahi/agx_streamout.c +++ b/src/gallium/drivers/asahi/agx_streamout.c @@ -52,7 +52,8 @@ agx_stream_output_target_destroy(struct pipe_context *pctx, static void agx_set_stream_output_targets(struct pipe_context *pctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct agx_context *ctx = agx_context(pctx); struct agx_streamout *so = &ctx->streamout; diff --git a/src/gallium/drivers/crocus/crocus_blit.c b/src/gallium/drivers/crocus/crocus_blit.c index 48fbb1f12c5..87a9d4d65d7 100644 --- a/src/gallium/drivers/crocus/crocus_blit.c +++ b/src/gallium/drivers/crocus/crocus_blit.c @@ -41,7 +41,7 @@ void crocus_blitter_begin(struct crocus_context *ice, enum crocus_blitter_op op, util_blitter_save_tesseval_shader(ice->blitter, ice->shaders.uncompiled[MESA_SHADER_TESS_EVAL]); util_blitter_save_geometry_shader(ice->blitter, ice->shaders.uncompiled[MESA_SHADER_GEOMETRY]); util_blitter_save_so_targets(ice->blitter, ice->state.so_targets, - (struct pipe_stream_output_target**)ice->state.so_target); + (struct pipe_stream_output_target**)ice->state.so_target, MESA_PRIM_UNKNOWN); util_blitter_save_vertex_buffers(ice->blitter, ice->state.vertex_buffers, util_last_bit(ice->state.bound_vertex_buffers)); util_blitter_save_vertex_elements(ice->blitter, (void *)ice->state.cso_vertex_elements); diff --git a/src/gallium/drivers/crocus/crocus_state.c b/src/gallium/drivers/crocus/crocus_state.c index 45128ad71db..b953f45e1d6 100644 --- a/src/gallium/drivers/crocus/crocus_state.c +++ b/src/gallium/drivers/crocus/crocus_state.c @@ -4122,7 +4122,8 @@ static void crocus_set_stream_output_targets(struct pipe_context *ctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct crocus_context *ice = (struct crocus_context *) ctx; struct crocus_batch *batch = &ice->batches[CROCUS_BATCH_RENDER]; diff --git a/src/gallium/drivers/d3d12/d3d12_blit.cpp b/src/gallium/drivers/d3d12/d3d12_blit.cpp index 89d044433bf..8af4f9a318b 100644 --- a/src/gallium/drivers/d3d12/d3d12_blit.cpp +++ b/src/gallium/drivers/d3d12/d3d12_blit.cpp @@ -287,7 +287,8 @@ util_blit_save_state(struct d3d12_context *ctx) util_blitter_save_fragment_constant_buffer_slot(ctx->blitter, ctx->cbufs[PIPE_SHADER_FRAGMENT]); util_blitter_save_vertex_buffers(ctx->blitter, ctx->vbs, ctx->num_vbs); util_blitter_save_sample_mask(ctx->blitter, ctx->gfx_pipeline_state.sample_mask, 0); - util_blitter_save_so_targets(ctx->blitter, ctx->gfx_pipeline_state.num_so_targets, ctx->so_targets); + util_blitter_save_so_targets(ctx->blitter, ctx->gfx_pipeline_state.num_so_targets, ctx->so_targets, + MESA_PRIM_UNKNOWN); } static void diff --git a/src/gallium/drivers/d3d12/d3d12_context_graphics.cpp b/src/gallium/drivers/d3d12/d3d12_context_graphics.cpp index ccc7e028fa1..1b6c2d5872e 100644 --- a/src/gallium/drivers/d3d12/d3d12_context_graphics.cpp +++ b/src/gallium/drivers/d3d12/d3d12_context_graphics.cpp @@ -1560,7 +1560,8 @@ static void d3d12_set_stream_output_targets(struct pipe_context *pctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct d3d12_context *ctx = d3d12_context(pctx); @@ -1981,7 +1982,8 @@ d3d12_clear_render_target(struct pipe_context *pctx, util_blitter_save_fragment_constant_buffer_slot(ctx->blitter, ctx->cbufs[PIPE_SHADER_FRAGMENT]); util_blitter_save_vertex_buffers(ctx->blitter, ctx->vbs, ctx->num_vbs); util_blitter_save_sample_mask(ctx->blitter, ctx->gfx_pipeline_state.sample_mask, 0); - util_blitter_save_so_targets(ctx->blitter, ctx->gfx_pipeline_state.num_so_targets, ctx->so_targets); + util_blitter_save_so_targets(ctx->blitter, ctx->gfx_pipeline_state.num_so_targets, ctx->so_targets, + MESA_PRIM_UNKNOWN); union pipe_color_union local_color; memcpy(&local_color, color, sizeof(local_color)); diff --git a/src/gallium/drivers/etnaviv/etnaviv_clear_blit.c b/src/gallium/drivers/etnaviv/etnaviv_clear_blit.c index 28121674035..65d641c966b 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_clear_blit.c +++ b/src/gallium/drivers/etnaviv/etnaviv_clear_blit.c @@ -74,7 +74,7 @@ etna_blit_save_state(struct etna_context *ctx, bool render_cond) ctx->cond_query, ctx->cond_cond, ctx->cond_mode); if (DBG_ENABLED(ETNA_DBG_DEQP)) - util_blitter_save_so_targets(ctx->blitter, 0, NULL); + util_blitter_save_so_targets(ctx->blitter, 0, NULL, 0); } uint64_t diff --git a/src/gallium/drivers/etnaviv/etnaviv_state.c b/src/gallium/drivers/etnaviv/etnaviv_state.c index 80813bbe9b1..054eb2c2869 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_state.c +++ b/src/gallium/drivers/etnaviv/etnaviv_state.c @@ -723,7 +723,8 @@ etna_vertex_elements_state_bind(struct pipe_context *pctx, void *ve) static void etna_set_stream_output_targets(struct pipe_context *pctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { /* stub */ } diff --git a/src/gallium/drivers/freedreno/freedreno_blitter.c b/src/gallium/drivers/freedreno/freedreno_blitter.c index 5dc63fbfef6..6f8888050cc 100644 --- a/src/gallium/drivers/freedreno/freedreno_blitter.c +++ b/src/gallium/drivers/freedreno/freedreno_blitter.c @@ -70,7 +70,7 @@ fd_blitter_pipe_begin(struct fd_context *ctx, bool render_cond) assert_dt util_blitter_save_tesseval_shader(ctx->blitter, ctx->prog.ds); util_blitter_save_geometry_shader(ctx->blitter, ctx->prog.gs); util_blitter_save_so_targets(ctx->blitter, ctx->streamout.num_targets, - ctx->streamout.targets); + ctx->streamout.targets, MESA_PRIM_UNKNOWN); util_blitter_save_rasterizer(ctx->blitter, ctx->rasterizer); util_blitter_save_viewport(ctx->blitter, &ctx->viewport[0]); util_blitter_save_scissor(ctx->blitter, &ctx->scissor[0]); @@ -232,7 +232,7 @@ fd_blitter_clear(struct pipe_context *pctx, unsigned buffers, pctx->bind_vertex_elements_state(pctx, ctx->solid_vbuf_state.vtx); util_set_vertex_buffers(pctx, 1, false, &ctx->solid_vbuf_state.vertexbuf.vb[0]); - pctx->set_stream_output_targets(pctx, 0, NULL, NULL); + pctx->set_stream_output_targets(pctx, 0, NULL, NULL, 0); if (pfb->layers > 1) pctx->bind_vs_state(pctx, ctx->solid_layered_prog.vs); diff --git a/src/gallium/drivers/freedreno/freedreno_state.c b/src/gallium/drivers/freedreno/freedreno_state.c index a3c8ce7c5db..12a0d38a05b 100644 --- a/src/gallium/drivers/freedreno/freedreno_state.c +++ b/src/gallium/drivers/freedreno/freedreno_state.c @@ -653,7 +653,8 @@ fd_stream_output_target_destroy(struct pipe_context *pctx, static void fd_set_stream_output_targets(struct pipe_context *pctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) in_dt + const unsigned *offsets, + enum mesa_prim output_prim) in_dt { struct fd_context *ctx = fd_context(pctx); struct fd_streamout_stateobj *so = &ctx->streamout; diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index 1ba7895567b..bbea195b3f5 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -4413,7 +4413,8 @@ static void iris_set_stream_output_targets(struct pipe_context *ctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct iris_context *ice = (struct iris_context *) ctx; struct iris_genx_state *genx = ice->state.genx; diff --git a/src/gallium/drivers/llvmpipe/lp_state_so.c b/src/gallium/drivers/llvmpipe/lp_state_so.c index 6e104f14d8f..44fc41ab54c 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_so.c +++ b/src/gallium/drivers/llvmpipe/lp_state_so.c @@ -73,7 +73,8 @@ static void llvmpipe_set_so_targets(struct pipe_context *pipe, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe); unsigned i; diff --git a/src/gallium/drivers/llvmpipe/lp_surface.c b/src/gallium/drivers/llvmpipe/lp_surface.c index 7bde398dd8b..b42606c2924 100644 --- a/src/gallium/drivers/llvmpipe/lp_surface.c +++ b/src/gallium/drivers/llvmpipe/lp_surface.c @@ -168,7 +168,7 @@ lp_blit(struct pipe_context *pipe, util_blitter_save_vertex_shader(lp->blitter, (void*)lp->vs); util_blitter_save_geometry_shader(lp->blitter, (void*)lp->gs); util_blitter_save_so_targets(lp->blitter, lp->num_so_targets, - (struct pipe_stream_output_target**)lp->so_targets); + (struct pipe_stream_output_target**)lp->so_targets, MESA_PRIM_UNKNOWN); util_blitter_save_rasterizer(lp->blitter, (void*)lp->rasterizer); util_blitter_save_viewport(lp->blitter, &lp->viewports[0]); util_blitter_save_scissor(lp->blitter, &lp->scissors[0]); diff --git a/src/gallium/drivers/nouveau/nv50/nv50_state.c b/src/gallium/drivers/nouveau/nv50/nv50_state.c index 171843cc2c4..4cf22dad853 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_state.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_state.c @@ -1206,7 +1206,8 @@ static void nv50_set_stream_output_targets(struct pipe_context *pipe, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct nv50_context *nv50 = nv50_context(pipe); unsigned i; diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c index b7f6d6f1d28..9fd6b4a3d07 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c @@ -1146,7 +1146,8 @@ static void nvc0_set_transform_feedback_targets(struct pipe_context *pipe, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct nvc0_context *nvc0 = nvc0_context(pipe); unsigned i; diff --git a/src/gallium/drivers/panfrost/pan_blit.c b/src/gallium/drivers/panfrost/pan_blit.c index b396d59fd7f..0b621b987ea 100644 --- a/src/gallium/drivers/panfrost/pan_blit.c +++ b/src/gallium/drivers/panfrost/pan_blit.c @@ -45,7 +45,7 @@ panfrost_blitter_save(struct panfrost_context *ctx, ctx->uncompiled[PIPE_SHADER_VERTEX]); util_blitter_save_rasterizer(blitter, ctx->rasterizer); util_blitter_save_viewport(blitter, &ctx->pipe_viewport); - util_blitter_save_so_targets(blitter, 0, NULL); + util_blitter_save_so_targets(blitter, 0, NULL, 0); if (blitter_op & PAN_SAVE_FRAGMENT_STATE) { if (blitter_op & PAN_SAVE_FRAGMENT_CONSTANT) diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index 66f71cf415e..3524d891111 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -894,7 +894,8 @@ static void panfrost_set_stream_output_targets(struct pipe_context *pctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct panfrost_context *ctx = pan_context(pctx); struct panfrost_streamout *so = &ctx->streamout; diff --git a/src/gallium/drivers/r600/r600_blit.c b/src/gallium/drivers/r600/r600_blit.c index 881b12471e1..e0a39321d6c 100644 --- a/src/gallium/drivers/r600/r600_blit.c +++ b/src/gallium/drivers/r600/r600_blit.c @@ -51,7 +51,8 @@ static void r600_blitter_begin(struct pipe_context *ctx, enum r600_blitter_op op util_blitter_save_tessctrl_shader(rctx->blitter, rctx->tcs_shader); util_blitter_save_tesseval_shader(rctx->blitter, rctx->tes_shader); util_blitter_save_so_targets(rctx->blitter, rctx->b.streamout.num_targets, - (struct pipe_stream_output_target**)rctx->b.streamout.targets); + (struct pipe_stream_output_target**)rctx->b.streamout.targets, + MESA_PRIM_UNKNOWN); util_blitter_save_rasterizer(rctx->blitter, rctx->rasterizer_state.cso); if (op & R600_SAVE_FRAGMENT_STATE) { diff --git a/src/gallium/drivers/r600/r600_pipe_common.h b/src/gallium/drivers/r600/r600_pipe_common.h index 130a31e60a4..cfe1293052d 100644 --- a/src/gallium/drivers/r600/r600_pipe_common.h +++ b/src/gallium/drivers/r600/r600_pipe_common.h @@ -704,7 +704,8 @@ void r600_streamout_buffers_dirty(struct r600_common_context *rctx); void r600_set_streamout_targets(struct pipe_context *ctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offset); + const unsigned *offset, + enum mesa_prim output_prim); void r600_emit_streamout_end(struct r600_common_context *rctx); void r600_update_prims_generated_query_state(struct r600_common_context *rctx, unsigned type, int diff); diff --git a/src/gallium/drivers/r600/r600_streamout.c b/src/gallium/drivers/r600/r600_streamout.c index 6f0f1f02df7..3e430658076 100644 --- a/src/gallium/drivers/r600/r600_streamout.c +++ b/src/gallium/drivers/r600/r600_streamout.c @@ -93,7 +93,8 @@ void r600_streamout_buffers_dirty(struct r600_common_context *rctx) void r600_set_streamout_targets(struct pipe_context *ctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct r600_common_context *rctx = (struct r600_common_context *)ctx; unsigned i; diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c index 0f1850019ce..15699a34fbc 100644 --- a/src/gallium/drivers/radeonsi/si_blit.c +++ b/src/gallium/drivers/radeonsi/si_blit.c @@ -31,7 +31,8 @@ void si_blitter_begin(struct si_context *sctx, enum si_blitter_op op) util_blitter_save_tesseval_shader(sctx->blitter, sctx->shader.tes.cso); util_blitter_save_geometry_shader(sctx->blitter, sctx->shader.gs.cso); util_blitter_save_so_targets(sctx->blitter, sctx->streamout.num_targets, - (struct pipe_stream_output_target **)sctx->streamout.targets); + (struct pipe_stream_output_target **)sctx->streamout.targets, + sctx->streamout.output_prim); util_blitter_save_rasterizer(sctx->blitter, sctx->queued.named.rasterizer); if (op & SI_SAVE_FRAGMENT_STATE) { diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index 9084d128a7e..57e18f88034 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -786,6 +786,7 @@ struct si_streamout_target { }; struct si_streamout { + enum mesa_prim output_prim; bool begin_emitted; unsigned enabled_mask; diff --git a/src/gallium/drivers/radeonsi/si_state_streamout.c b/src/gallium/drivers/radeonsi/si_state_streamout.c index 795892a1728..f0d6144b90c 100644 --- a/src/gallium/drivers/radeonsi/si_state_streamout.c +++ b/src/gallium/drivers/radeonsi/si_state_streamout.c @@ -58,7 +58,8 @@ void si_streamout_buffers_dirty(struct si_context *sctx) static void si_set_streamout_targets(struct pipe_context *ctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct si_context *sctx = (struct si_context *)ctx; unsigned old_num_targets = sctx->streamout.num_targets; @@ -216,6 +217,7 @@ static void si_set_streamout_targets(struct pipe_context *ctx, unsigned num_targ if (!!sctx->streamout.enabled_mask != !!enabled_mask) sctx->do_update_shaders = true; /* to keep/remove streamout shader code as an optimization */ + sctx->streamout.output_prim = output_prim; sctx->streamout.num_targets = num_targets; sctx->streamout.enabled_mask = enabled_mask; sctx->streamout.append_bitmask = append_bitmask; diff --git a/src/gallium/drivers/softpipe/sp_state_so.c b/src/gallium/drivers/softpipe/sp_state_so.c index b0cb55a2625..0966e2ed79b 100644 --- a/src/gallium/drivers/softpipe/sp_state_so.c +++ b/src/gallium/drivers/softpipe/sp_state_so.c @@ -63,7 +63,8 @@ static void softpipe_set_so_targets(struct pipe_context *pipe, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct softpipe_context *softpipe = softpipe_context(pipe); unsigned i; diff --git a/src/gallium/drivers/softpipe/sp_surface.c b/src/gallium/drivers/softpipe/sp_surface.c index d8ba29afd52..4101ffada47 100644 --- a/src/gallium/drivers/softpipe/sp_surface.c +++ b/src/gallium/drivers/softpipe/sp_surface.c @@ -66,7 +66,7 @@ static void sp_blit(struct pipe_context *pipe, util_blitter_save_vertex_shader(sp->blitter, sp->vs); util_blitter_save_geometry_shader(sp->blitter, sp->gs); util_blitter_save_so_targets(sp->blitter, sp->num_so_targets, - (struct pipe_stream_output_target**)sp->so_targets); + (struct pipe_stream_output_target**)sp->so_targets, MESA_PRIM_UNKNOWN); util_blitter_save_rasterizer(sp->blitter, sp->rasterizer); util_blitter_save_viewport(sp->blitter, &sp->viewports[0]); util_blitter_save_scissor(sp->blitter, &sp->scissors[0]); diff --git a/src/gallium/drivers/svga/svga_pipe_blit.c b/src/gallium/drivers/svga/svga_pipe_blit.c index 14f7ab48d7e..1b8df860847 100644 --- a/src/gallium/drivers/svga/svga_pipe_blit.c +++ b/src/gallium/drivers/svga/svga_pipe_blit.c @@ -613,7 +613,7 @@ try_blit(struct svga_context *svga, const struct pipe_blit_info *blit_info) util_blitter_save_tessctrl_shader(svga->blitter, svga->curr.tcs); util_blitter_save_tesseval_shader(svga->blitter, svga->curr.tes); util_blitter_save_so_targets(svga->blitter, svga->num_so_targets, - (struct pipe_stream_output_target**)svga->so_targets); + (struct pipe_stream_output_target**)svga->so_targets, MESA_PRIM_UNKNOWN); util_blitter_save_rasterizer(svga->blitter, (void*)svga->curr.rast); util_blitter_save_viewport(svga->blitter, &svga->curr.viewport[0]); util_blitter_save_scissor(svga->blitter, &svga->curr.scissor[0]); diff --git a/src/gallium/drivers/svga/svga_pipe_clear.c b/src/gallium/drivers/svga/svga_pipe_clear.c index f964ff1b116..63f38fbd300 100644 --- a/src/gallium/drivers/svga/svga_pipe_clear.c +++ b/src/gallium/drivers/svga/svga_pipe_clear.c @@ -31,7 +31,7 @@ begin_blit(struct svga_context *svga) util_blitter_save_tessctrl_shader(svga->blitter, svga->curr.tcs); util_blitter_save_tesseval_shader(svga->blitter, svga->curr.tes); util_blitter_save_so_targets(svga->blitter, svga->num_so_targets, - (struct pipe_stream_output_target**)svga->so_targets); + (struct pipe_stream_output_target**)svga->so_targets, MESA_PRIM_UNKNOWN); util_blitter_save_rasterizer(svga->blitter, (void*)svga->curr.rast); util_blitter_save_viewport(svga->blitter, &svga->curr.viewport[0]); util_blitter_save_scissor(svga->blitter, &svga->curr.scissor[0]); diff --git a/src/gallium/drivers/svga/svga_pipe_streamout.c b/src/gallium/drivers/svga/svga_pipe_streamout.c index 0c1a3f5e584..c1604799b40 100644 --- a/src/gallium/drivers/svga/svga_pipe_streamout.c +++ b/src/gallium/drivers/svga/svga_pipe_streamout.c @@ -398,7 +398,8 @@ static void svga_set_stream_output_targets(struct pipe_context *pipe, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct svga_context *svga = svga_context(pipe); struct SVGA3dSoTarget soBindings[SVGA3D_DX_MAX_SOTARGETS]; diff --git a/src/gallium/drivers/tegra/tegra_context.c b/src/gallium/drivers/tegra/tegra_context.c index 2041119b5e5..30324ef2c78 100644 --- a/src/gallium/drivers/tegra/tegra_context.c +++ b/src/gallium/drivers/tegra/tegra_context.c @@ -684,12 +684,13 @@ static void tegra_set_stream_output_targets(struct pipe_context *pcontext, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct tegra_context *context = to_tegra_context(pcontext); context->gpu->set_stream_output_targets(context->gpu, num_targets, - targets, offsets); + targets, offsets, output_prim); } static void diff --git a/src/gallium/drivers/v3d/v3d_blit.c b/src/gallium/drivers/v3d/v3d_blit.c index 378068b8e5a..84d8434a378 100644 --- a/src/gallium/drivers/v3d/v3d_blit.c +++ b/src/gallium/drivers/v3d/v3d_blit.c @@ -48,7 +48,7 @@ v3d_blitter_save(struct v3d_context *v3d, enum v3d_blitter_op op) util_blitter_save_vertex_shader(v3d->blitter, v3d->prog.bind_vs); util_blitter_save_geometry_shader(v3d->blitter, v3d->prog.bind_gs); util_blitter_save_so_targets(v3d->blitter, v3d->streamout.num_targets, - v3d->streamout.targets); + v3d->streamout.targets, MESA_PRIM_UNKNOWN); util_blitter_save_rasterizer(v3d->blitter, v3d->rasterizer); util_blitter_save_viewport(v3d->blitter, &v3d->viewport); util_blitter_save_fragment_shader(v3d->blitter, v3d->prog.bind_fs); @@ -57,7 +57,7 @@ v3d_blitter_save(struct v3d_context *v3d, enum v3d_blitter_op op) util_blitter_save_stencil_ref(v3d->blitter, &v3d->stencil_ref); util_blitter_save_sample_mask(v3d->blitter, v3d->sample_mask, 0); util_blitter_save_so_targets(v3d->blitter, v3d->streamout.num_targets, - v3d->streamout.targets); + v3d->streamout.targets, MESA_PRIM_UNKNOWN); if (op & V3D_SAVE_FRAMEBUFFER) util_blitter_save_framebuffer(v3d->blitter, &v3d->framebuffer); diff --git a/src/gallium/drivers/v3d/v3dx_state.c b/src/gallium/drivers/v3d/v3dx_state.c index 1f1ae2420cc..73b8789a607 100644 --- a/src/gallium/drivers/v3d/v3dx_state.c +++ b/src/gallium/drivers/v3d/v3dx_state.c @@ -1244,7 +1244,8 @@ static void v3d_set_stream_output_targets(struct pipe_context *pctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct v3d_context *ctx = v3d_context(pctx); struct v3d_streamout_stateobj *so = &ctx->streamout; diff --git a/src/gallium/drivers/virgl/virgl_streamout.c b/src/gallium/drivers/virgl/virgl_streamout.c index cd414c63521..ba409fa6376 100644 --- a/src/gallium/drivers/virgl/virgl_streamout.c +++ b/src/gallium/drivers/virgl/virgl_streamout.c @@ -72,7 +72,8 @@ static void virgl_destroy_so_target(struct pipe_context *ctx, static void virgl_set_so_targets(struct pipe_context *ctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offset) + const unsigned *offset, + enum mesa_prim output_prim) { struct virgl_context *vctx = virgl_context(ctx); int i; diff --git a/src/gallium/drivers/zink/zink_blit.c b/src/gallium/drivers/zink/zink_blit.c index 16b0f426215..c207e69660a 100644 --- a/src/gallium/drivers/zink/zink_blit.c +++ b/src/gallium/drivers/zink/zink_blit.c @@ -511,7 +511,7 @@ zink_blit_begin(struct zink_context *ctx, enum zink_blit_flags flags) util_blitter_save_tesseval_shader(ctx->blitter, ctx->gfx_stages[MESA_SHADER_TESS_EVAL]); util_blitter_save_geometry_shader(ctx->blitter, ctx->gfx_stages[MESA_SHADER_GEOMETRY]); util_blitter_save_rasterizer(ctx->blitter, ctx->rast_state); - util_blitter_save_so_targets(ctx->blitter, ctx->num_so_targets, ctx->so_targets); + util_blitter_save_so_targets(ctx->blitter, ctx->num_so_targets, ctx->so_targets, MESA_PRIM_UNKNOWN); if (flags & ZINK_BLIT_SAVE_FS_CONST_BUF) util_blitter_save_fragment_constant_buffer_slot(ctx->blitter, ctx->ubos[MESA_SHADER_FRAGMENT]); diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 2b9f5b37a57..c4d4a9f4e54 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -4345,7 +4345,8 @@ static void zink_set_stream_output_targets(struct pipe_context *pctx, unsigned num_targets, struct pipe_stream_output_target **targets, - const unsigned *offsets) + const unsigned *offsets, + enum mesa_prim output_prim) { struct zink_context *ctx = zink_context(pctx); diff --git a/src/gallium/frontends/d3d10umd/Shader.cpp b/src/gallium/frontends/d3d10umd/Shader.cpp index 90423c7927b..d61fbb65b9b 100644 --- a/src/gallium/frontends/d3d10umd/Shader.cpp +++ b/src/gallium/frontends/d3d10umd/Shader.cpp @@ -968,7 +968,7 @@ SoSetTargets(D3D10DDI_HDEVICE hDevice, // IN } pipe->set_stream_output_targets(pipe, SOTargets, pDevice->so_targets, - pOffsets); + pOffsets, MESA_PRIM_UNKNOWN); } diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c index ef0eb43af87..1723e4b450a 100644 --- a/src/gallium/frontends/lavapipe/lvp_execute.c +++ b/src/gallium/frontends/lavapipe/lvp_execute.c @@ -3390,7 +3390,7 @@ static void handle_begin_transform_feedback(struct vk_cmd_queue_entry *cmd, &offsets[i]); } state->pctx->set_stream_output_targets(state->pctx, state->num_so_targets, - state->so_targets, offsets); + state->so_targets, offsets, MESA_PRIM_UNKNOWN); } static void handle_end_transform_feedback(struct vk_cmd_queue_entry *cmd, @@ -3413,7 +3413,7 @@ static void handle_end_transform_feedback(struct vk_cmd_queue_entry *cmd, &offset); } } - state->pctx->set_stream_output_targets(state->pctx, 0, NULL, NULL); + state->pctx->set_stream_output_targets(state->pctx, 0, NULL, NULL, 0); } static void handle_draw_indirect_byte_count(struct vk_cmd_queue_entry *cmd, diff --git a/src/gallium/frontends/nine/device9.c b/src/gallium/frontends/nine/device9.c index 1ce6d3d24d9..ee0d1f7f250 100644 --- a/src/gallium/frontends/nine/device9.c +++ b/src/gallium/frontends/nine/device9.c @@ -3339,11 +3339,11 @@ NineDevice9_ProcessVertices( struct NineDevice9 *This, draw.max_index = VertexCount - 1; - pipe_sw->set_stream_output_targets(pipe_sw, 1, &target, offsets); + pipe_sw->set_stream_output_targets(pipe_sw, 1, &target, offsets, draw.mode); pipe_sw->draw_vbo(pipe_sw, &draw, 0, NULL, &sc, 1); - pipe_sw->set_stream_output_targets(pipe_sw, 0, NULL, 0); + pipe_sw->set_stream_output_targets(pipe_sw, 0, NULL, NULL, 0); pipe_sw->stream_output_target_destroy(pipe_sw, target); u_box_1d(0, VertexCount * so.stride[0] * 4, &box); diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h index b04fb80f48c..d3705c30ec9 100644 --- a/src/gallium/include/pipe/p_context.h +++ b/src/gallium/include/pipe/p_context.h @@ -650,9 +650,10 @@ struct pipe_context { struct pipe_stream_output_target *); void (*set_stream_output_targets)(struct pipe_context *, - unsigned num_targets, - struct pipe_stream_output_target **targets, - const unsigned *offsets); + unsigned num_targets, + struct pipe_stream_output_target **targets, + const unsigned *offsets, + enum mesa_prim output_prim); uint32_t (*stream_output_target_offset)(struct pipe_stream_output_target *target); diff --git a/src/mesa/main/transformfeedback.c b/src/mesa/main/transformfeedback.c index 8e4d16d7d59..bc1c25f9e8a 100644 --- a/src/mesa/main/transformfeedback.c +++ b/src/mesa/main/transformfeedback.c @@ -460,7 +460,7 @@ begin_transform_feedback(struct gl_context *ctx, GLenum mode, bool no_error) /* Start writing at the beginning of each target. */ cso_set_stream_outputs(ctx->cso_context, obj->num_targets, - obj->targets, offsets); + obj->targets, offsets, mode); _mesa_update_valid_to_render_state(ctx); } @@ -488,7 +488,7 @@ end_transform_feedback(struct gl_context *ctx, unsigned i; FLUSH_VERTICES(ctx, 0, 0); - cso_set_stream_outputs(ctx->cso_context, 0, NULL, NULL); + cso_set_stream_outputs(ctx->cso_context, 0, NULL, NULL, 0); /* The next call to glDrawTransformFeedbackStream should use the vertex * count from the last call to glEndTransformFeedback. @@ -1249,7 +1249,7 @@ pause_transform_feedback(struct gl_context *ctx, { FLUSH_VERTICES(ctx, 0, 0); - cso_set_stream_outputs(ctx->cso_context, 0, NULL, NULL); + cso_set_stream_outputs(ctx->cso_context, 0, NULL, NULL, 0); obj->Paused = GL_TRUE; _mesa_update_valid_to_render_state(ctx); @@ -1302,7 +1302,7 @@ resume_transform_feedback(struct gl_context *ctx, offsets[i] = (unsigned)-1; cso_set_stream_outputs(ctx->cso_context, obj->num_targets, - obj->targets, offsets); + obj->targets, offsets, obj->Mode); _mesa_update_valid_to_render_state(ctx); } diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c index 8585e4969e9..e5c060a16ca 100644 --- a/src/mesa/state_tracker/st_cb_bitmap.c +++ b/src/mesa/state_tracker/st_cb_bitmap.c @@ -262,7 +262,7 @@ setup_render_state(struct gl_context *ctx, st->util_velems.count = 3; cso_set_vertex_elements(cso, &st->util_velems); - cso_set_stream_outputs(st->cso_context, 0, NULL, NULL); + cso_set_stream_outputs(st->cso_context, 0, NULL, NULL, 0); } diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c index dc4864d8247..25339aeb63e 100644 --- a/src/mesa/state_tracker/st_cb_clear.c +++ b/src/mesa/state_tracker/st_cb_clear.c @@ -283,7 +283,7 @@ clear_with_quad(struct gl_context *ctx, unsigned clear_buffers) st->util_velems.count = 1; cso_set_vertex_elements(cso, &st->util_velems); - cso_set_stream_outputs(cso, 0, NULL, NULL); + cso_set_stream_outputs(cso, 0, NULL, NULL, 0); cso_set_sample_mask(cso, ~0); cso_set_min_samples(cso, 1); st->clear.raster.multisample = st->state.fb_num_samples > 1; diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c index 5f5c282a0de..fd44b5fcae9 100644 --- a/src/mesa/state_tracker/st_cb_drawpixels.c +++ b/src/mesa/state_tracker/st_cb_drawpixels.c @@ -889,7 +889,7 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z, st->util_velems.count = 3; cso_set_vertex_elements(cso, &st->util_velems); - cso_set_stream_outputs(cso, 0, NULL, NULL); + cso_set_stream_outputs(cso, 0, NULL, NULL, 0); /* Compute Gallium window coords (y=0=top) with pixel zoom. * Recall that these coords are transformed by the current diff --git a/src/mesa/state_tracker/st_cb_drawtex.c b/src/mesa/state_tracker/st_cb_drawtex.c index bf6dcf8f5f7..cb5ba13a5c2 100644 --- a/src/mesa/state_tracker/st_cb_drawtex.c +++ b/src/mesa/state_tracker/st_cb_drawtex.c @@ -273,7 +273,7 @@ st_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z, velems.count = numAttribs; cso_set_vertex_elements(cso, &velems); - cso_set_stream_outputs(cso, 0, NULL, NULL); + cso_set_stream_outputs(cso, 0, NULL, NULL, 0); /* viewport state: viewport matching window dims */ { diff --git a/src/mesa/state_tracker/st_pbo.c b/src/mesa/state_tracker/st_pbo.c index 16f74984f19..f2cddbeac87 100644 --- a/src/mesa/state_tracker/st_pbo.c +++ b/src/mesa/state_tracker/st_pbo.c @@ -268,7 +268,7 @@ st_pbo_draw(struct st_context *st, const struct st_pbo_addresses *addr, cso_set_rasterizer(cso, &st->pbo.raster); /* Disable stream output */ - cso_set_stream_outputs(cso, 0, NULL, 0); + cso_set_stream_outputs(cso, 0, NULL, 0, 0); if (addr->depth == 1) { cso_draw_arrays(cso, MESA_PRIM_TRIANGLE_STRIP, 0, 4);