mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-13 07:00:37 +01:00
nv40: do full swtnl fallback when edge flags present.
This isn't necessary, with some effort we can do this on the hw. However, until I encounter something "real" that uses them there's not a lot of point.
This commit is contained in:
parent
2193578851
commit
58b1bcaa09
5 changed files with 18 additions and 6 deletions
|
|
@ -32,11 +32,6 @@ nv40_destroy(struct pipe_context *pipe)
|
|||
FREE(nv40);
|
||||
}
|
||||
|
||||
static void
|
||||
nv40_set_edgeflags(struct pipe_context *pipe, const unsigned *bitfield)
|
||||
{
|
||||
}
|
||||
|
||||
struct pipe_context *
|
||||
nv40_create(struct pipe_screen *pscreen, unsigned pctx_id)
|
||||
{
|
||||
|
|
@ -58,7 +53,6 @@ nv40_create(struct pipe_screen *pscreen, unsigned pctx_id)
|
|||
nv40->pipe.winsys = ws;
|
||||
nv40->pipe.screen = pscreen;
|
||||
nv40->pipe.destroy = nv40_destroy;
|
||||
nv40->pipe.set_edgeflags = nv40_set_edgeflags;
|
||||
nv40->pipe.draw_arrays = nv40_draw_arrays;
|
||||
nv40->pipe.draw_elements = nv40_draw_elements;
|
||||
nv40->pipe.clear = nv40_clear;
|
||||
|
|
|
|||
|
|
@ -155,6 +155,7 @@ struct nv40_context {
|
|||
unsigned vtxbuf_nr;
|
||||
struct pipe_vertex_element vtxelt[PIPE_MAX_ATTRIBS];
|
||||
unsigned vtxelt_nr;
|
||||
const unsigned *edgeflags;
|
||||
};
|
||||
|
||||
static INLINE struct nv40_context *
|
||||
|
|
|
|||
|
|
@ -680,6 +680,16 @@ nv40_set_vertex_elements(struct pipe_context *pipe, unsigned count,
|
|||
nv40->draw_dirty |= NV40_NEW_ARRAYS;
|
||||
}
|
||||
|
||||
static void
|
||||
nv40_set_edgeflags(struct pipe_context *pipe, const unsigned *bitfield)
|
||||
{
|
||||
struct nv40_context *nv40 = nv40_context(pipe);
|
||||
|
||||
nv40->edgeflags = bitfield;
|
||||
nv40->dirty |= NV40_NEW_ARRAYS;
|
||||
nv40->draw_dirty |= NV40_NEW_ARRAYS;
|
||||
}
|
||||
|
||||
void
|
||||
nv40_init_state_functions(struct nv40_context *nv40)
|
||||
{
|
||||
|
|
@ -719,6 +729,7 @@ nv40_init_state_functions(struct nv40_context *nv40)
|
|||
nv40->pipe.set_scissor_state = nv40_set_scissor_state;
|
||||
nv40->pipe.set_viewport_state = nv40_set_viewport_state;
|
||||
|
||||
nv40->pipe.set_edgeflags = nv40_set_edgeflags;
|
||||
nv40->pipe.set_vertex_buffers = nv40_set_vertex_buffers;
|
||||
nv40->pipe.set_vertex_elements = nv40_set_vertex_elements;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -167,6 +167,7 @@ nv40_state_validate_swtnl(struct nv40_context *nv40)
|
|||
draw_set_viewport_state(draw, &nv40->viewport);
|
||||
|
||||
if (nv40->draw_dirty & NV40_NEW_ARRAYS) {
|
||||
draw_set_edgeflags(draw, nv40->edgeflags);
|
||||
draw_set_vertex_buffers(draw, nv40->vtxbuf_nr, nv40->vtxbuf);
|
||||
draw_set_vertex_elements(draw, nv40->vtxelt_nr, nv40->vtxelt);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -488,6 +488,11 @@ nv40_vbo_validate(struct nv40_context *nv40)
|
|||
unsigned vb_flags = NOUVEAU_BO_VRAM | NOUVEAU_BO_GART | NOUVEAU_BO_RD;
|
||||
int hw;
|
||||
|
||||
if (nv40->edgeflags) {
|
||||
nv40->fallback_swtnl |= NV40_NEW_ARRAYS;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
vtxbuf = so_new(20, 18);
|
||||
so_method(vtxbuf, curie, NV40TCL_VTXBUF_ADDRESS(0), nv40->vtxelt_nr);
|
||||
vtxfmt = so_new(17, 0);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue