mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 13:20:14 +01:00
draw: add switch for drivers to force vertex data passthrough
This commit is contained in:
parent
23e62c94ee
commit
c48da7d78b
4 changed files with 32 additions and 18 deletions
|
|
@ -272,6 +272,14 @@ draw_enable_point_sprites(struct draw_context *draw, boolean enable)
|
|||
}
|
||||
|
||||
|
||||
void
|
||||
draw_set_force_passthrough( struct draw_context *draw, boolean enable )
|
||||
{
|
||||
draw_do_flush( draw, DRAW_FLUSH_STATE_CHANGE );
|
||||
draw->force_passthrough = enable;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Ask the draw module for the location/slot of the given vertex attribute in
|
||||
* a post-transformed vertex.
|
||||
|
|
|
|||
|
|
@ -160,6 +160,9 @@ void draw_set_render( struct draw_context *draw,
|
|||
void draw_set_driver_clipping( struct draw_context *draw,
|
||||
boolean bypass_clipping );
|
||||
|
||||
void draw_set_force_passthrough( struct draw_context *draw,
|
||||
boolean enable );
|
||||
|
||||
/*******************************************************************************
|
||||
* Draw pipeline
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -163,12 +163,15 @@ struct draw_context
|
|||
|
||||
struct {
|
||||
boolean bypass_clipping;
|
||||
boolean bypass_vs;
|
||||
} driver;
|
||||
|
||||
boolean flushing; /**< debugging/sanity */
|
||||
boolean suspend_flushing; /**< internally set */
|
||||
boolean bypass_clipping; /**< set if either api or driver bypass_clipping true */
|
||||
|
||||
boolean force_passthrough; /**< never clip or shade */
|
||||
|
||||
/* pipe state that we need: */
|
||||
const struct pipe_rasterizer_state *rasterizer;
|
||||
struct pipe_viewport_state viewport;
|
||||
|
|
|
|||
|
|
@ -69,26 +69,26 @@ draw_pt_arrays(struct draw_context *draw,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
if (!draw->force_passthrough) {
|
||||
if (!draw->render) {
|
||||
opt |= PT_PIPELINE;
|
||||
}
|
||||
|
||||
if (!draw->render) {
|
||||
opt |= PT_PIPELINE;
|
||||
if (draw_need_pipeline(draw,
|
||||
draw->rasterizer,
|
||||
prim)) {
|
||||
opt |= PT_PIPELINE;
|
||||
}
|
||||
|
||||
if (!draw->bypass_clipping && !draw->pt.test_fse) {
|
||||
opt |= PT_CLIPTEST;
|
||||
}
|
||||
|
||||
if (!draw->rasterizer->bypass_vs) {
|
||||
opt |= PT_SHADE;
|
||||
}
|
||||
}
|
||||
|
||||
if (draw_need_pipeline(draw,
|
||||
draw->rasterizer,
|
||||
prim)) {
|
||||
opt |= PT_PIPELINE;
|
||||
}
|
||||
|
||||
if (!draw->bypass_clipping && !draw->pt.test_fse) {
|
||||
opt |= PT_CLIPTEST;
|
||||
}
|
||||
|
||||
if (!draw->rasterizer->bypass_vs) {
|
||||
opt |= PT_SHADE;
|
||||
}
|
||||
|
||||
|
||||
if (opt == 0)
|
||||
middle = draw->pt.middle.fetch_emit;
|
||||
else if (opt == PT_SHADE && !draw->pt.no_fse)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue