mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 06:48:06 +02:00
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:
parent
e22b78a196
commit
1e14b00e8b
54 changed files with 120 additions and 73 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -786,6 +786,7 @@ struct si_streamout_target {
|
|||
};
|
||||
|
||||
struct si_streamout {
|
||||
enum mesa_prim output_prim;
|
||||
bool begin_emitted;
|
||||
|
||||
unsigned enabled_mask;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -968,7 +968,7 @@ SoSetTargets(D3D10DDI_HDEVICE hDevice, // IN
|
|||
}
|
||||
|
||||
pipe->set_stream_output_targets(pipe, SOTargets, pDevice->so_targets,
|
||||
pOffsets);
|
||||
pOffsets, MESA_PRIM_UNKNOWN);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue