mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 03:48:06 +02:00
nv30: add state scissor, based on nv40 one
This commit is contained in:
parent
8b72737a0b
commit
e5bbb18441
3 changed files with 39 additions and 0 deletions
|
|
@ -17,6 +17,7 @@ DRIVER_SOURCES = \
|
|||
nv30_state_emit.c \
|
||||
nv30_state_fb.c \
|
||||
nv30_state_rasterizer.c \
|
||||
nv30_state_scissor.c \
|
||||
nv30_surface.c \
|
||||
nv30_vbo.c \
|
||||
nv30_vertprog.c
|
||||
|
|
|
|||
|
|
@ -90,6 +90,8 @@ struct nv30_blend_state_new {
|
|||
|
||||
|
||||
struct nv30_state {
|
||||
unsigned scissor_enabled;
|
||||
|
||||
struct nouveau_stateobj *hw[NV30_STATE_MAX];
|
||||
};
|
||||
|
||||
|
|
@ -104,6 +106,7 @@ struct nv30_context {
|
|||
|
||||
/* HW state derived from pipe states */
|
||||
struct nv30_state state;
|
||||
struct pipe_scissor_state scissor;
|
||||
|
||||
uint32_t dirty;
|
||||
|
||||
|
|
|
|||
35
src/gallium/drivers/nv30/nv30_state_scissor.c
Normal file
35
src/gallium/drivers/nv30/nv30_state_scissor.c
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
#include "nv30_context.h"
|
||||
|
||||
static boolean
|
||||
nv30_state_scissor_validate(struct nv30_context *nv30)
|
||||
{
|
||||
struct pipe_rasterizer_state *rast = &nv30->rasterizer->pipe;
|
||||
struct pipe_scissor_state *s = &nv30->scissor;
|
||||
struct nouveau_stateobj *so;
|
||||
|
||||
if (nv30->state.hw[NV30_STATE_SCISSOR] &&
|
||||
(rast->scissor == 0 && nv30->state.scissor_enabled == 0))
|
||||
return FALSE;
|
||||
nv30->state.scissor_enabled = rast->scissor;
|
||||
|
||||
so = so_new(3, 0);
|
||||
so_method(so, nv30->screen->rankine, NV34TCL_SCISSOR_HORIZ, 2);
|
||||
if (nv30->state.scissor_enabled) {
|
||||
so_data (so, ((s->maxx - s->minx) << 16) | s->minx);
|
||||
so_data (so, ((s->maxy - s->miny) << 16) | s->miny);
|
||||
} else {
|
||||
so_data (so, 4096 << 16);
|
||||
so_data (so, 4096 << 16);
|
||||
}
|
||||
|
||||
so_ref(so, &nv30->state.hw[NV30_STATE_SCISSOR]);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
struct nv30_state_entry nv30_state_scissor = {
|
||||
.validate = nv30_state_scissor_validate,
|
||||
.dirty = {
|
||||
.pipe = NV30_NEW_SCISSOR | NV30_NEW_RAST,
|
||||
.hw = NV30_STATE_SCISSOR
|
||||
}
|
||||
};
|
||||
Loading…
Add table
Reference in a new issue