mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-16 13:00:31 +01:00
nv30: add state stipple, based on nv40 one
This commit is contained in:
parent
e5bbb18441
commit
d4bc56ca49
3 changed files with 42 additions and 0 deletions
|
|
@ -18,6 +18,7 @@ DRIVER_SOURCES = \
|
|||
nv30_state_fb.c \
|
||||
nv30_state_rasterizer.c \
|
||||
nv30_state_scissor.c \
|
||||
nv30_state_stipple.c \
|
||||
nv30_surface.c \
|
||||
nv30_vbo.c \
|
||||
nv30_vertprog.c
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@ struct nv30_blend_state_new {
|
|||
|
||||
struct nv30_state {
|
||||
unsigned scissor_enabled;
|
||||
unsigned stipple_enabled;
|
||||
|
||||
struct nouveau_stateobj *hw[NV30_STATE_MAX];
|
||||
};
|
||||
|
|
@ -121,6 +122,7 @@ struct nv30_context {
|
|||
struct pipe_blend_color blend_colour;
|
||||
struct pipe_framebuffer_state framebuffer;
|
||||
struct nv30_rasterizer_state_new *rasterizer;
|
||||
unsigned stipple[32];
|
||||
|
||||
uint32_t rt_enable;
|
||||
struct pipe_buffer *rt[2];
|
||||
|
|
|
|||
39
src/gallium/drivers/nv30/nv30_state_stipple.c
Normal file
39
src/gallium/drivers/nv30/nv30_state_stipple.c
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
#include "nv30_context.h"
|
||||
|
||||
static boolean
|
||||
nv30_state_stipple_validate(struct nv30_context *nv30)
|
||||
{
|
||||
struct pipe_rasterizer_state *rast = &nv30->rasterizer->pipe;
|
||||
struct nouveau_grobj *rankine = nv30->screen->rankine;
|
||||
struct nouveau_stateobj *so;
|
||||
|
||||
if (nv30->state.hw[NV30_STATE_STIPPLE] &&
|
||||
(rast->poly_stipple_enable == 0 && nv30->state.stipple_enabled == 0))
|
||||
return FALSE;
|
||||
|
||||
if (rast->poly_stipple_enable) {
|
||||
unsigned i;
|
||||
|
||||
so = so_new(35, 0);
|
||||
so_method(so, rankine, NV34TCL_POLYGON_STIPPLE_ENABLE, 1);
|
||||
so_data (so, 1);
|
||||
so_method(so, rankine, NV34TCL_POLYGON_STIPPLE_PATTERN(0), 32);
|
||||
for (i = 0; i < 32; i++)
|
||||
so_data(so, nv30->stipple[i]);
|
||||
} else {
|
||||
so = so_new(2, 0);
|
||||
so_method(so, rankine, NV34TCL_POLYGON_STIPPLE_ENABLE, 1);
|
||||
so_data (so, 0);
|
||||
}
|
||||
|
||||
so_ref(so, &nv30->state.hw[NV30_STATE_STIPPLE]);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
struct nv30_state_entry nv30_state_stipple = {
|
||||
.validate = nv30_state_stipple_validate,
|
||||
.dirty = {
|
||||
.pipe = NV30_NEW_STIPPLE | NV30_NEW_RAST,
|
||||
.hw = NV30_STATE_STIPPLE,
|
||||
}
|
||||
};
|
||||
Loading…
Add table
Reference in a new issue