gallium: pass XFB primitive mode to set_stream_output_targets

radeonsi would like to know the prim mode. GL always knows it,
so let's pass it through.

Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32685>
This commit is contained in:
Marek Olšák 2024-12-17 01:33:07 -05:00 committed by Marge Bot
parent e22b78a196
commit 1e14b00e8b
54 changed files with 120 additions and 73 deletions

View file

@ -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;
}

View file

@ -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 {

View file

@ -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);
}

View file

@ -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)
{
}

View file

@ -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();
}

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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]);

View file

@ -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);

View file

@ -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);

View file

@ -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;

View file

@ -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);

View file

@ -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];

View file

@ -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

View file

@ -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));

View file

@ -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

View file

@ -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 */
}

View file

@ -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);

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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]);

View file

@ -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;

View file

@ -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;

View file

@ -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)

View file

@ -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;

View file

@ -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) {

View file

@ -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);

View file

@ -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;

View file

@ -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) {

View file

@ -786,6 +786,7 @@ struct si_streamout_target {
};
struct si_streamout {
enum mesa_prim output_prim;
bool begin_emitted;
unsigned enabled_mask;

View file

@ -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;

View file

@ -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;

View file

@ -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]);

View file

@ -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]);

View file

@ -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]);

View file

@ -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];

View file

@ -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

View file

@ -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);

View file

@ -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;

View file

@ -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;

View file

@ -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]);

View file

@ -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);

View file

@ -968,7 +968,7 @@ SoSetTargets(D3D10DDI_HDEVICE hDevice, // IN
}
pipe->set_stream_output_targets(pipe, SOTargets, pDevice->so_targets,
pOffsets);
pOffsets, MESA_PRIM_UNKNOWN);
}

View file

@ -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,

View file

@ -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);

View file

@ -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);

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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;

View file

@ -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

View file

@ -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 */
{

View file

@ -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);