| #ifndef __NV30_CONTEXT_H__ |
| #define __NV30_CONTEXT_H__ |
| |
| #include "pipe/p_format.h" |
| |
| #include "nv30_screen.h" |
| #include "nv30_state.h" |
| |
| #include "nouveau/nouveau_context.h" |
| |
| #define BUFCTX_FB 0 |
| #define BUFCTX_VTXTMP 1 |
| #define BUFCTX_VTXBUF 2 |
| #define BUFCTX_IDXBUF 3 |
| #define BUFCTX_VERTTEX(n) (4 + (n)) |
| #define BUFCTX_FRAGPROG 8 |
| #define BUFCTX_FRAGTEX(n) (9 + (n)) |
| |
| #define NV30_NEW_BLEND (1 << 0) |
| #define NV30_NEW_RASTERIZER (1 << 1) |
| #define NV30_NEW_ZSA (1 << 2) |
| #define NV30_NEW_VERTPROG (1 << 3) |
| #define NV30_NEW_VERTCONST (1 << 4) |
| #define NV30_NEW_FRAGPROG (1 << 5) |
| #define NV30_NEW_FRAGCONST (1 << 6) |
| #define NV30_NEW_BLEND_COLOUR (1 << 7) |
| #define NV30_NEW_STENCIL_REF (1 << 8) |
| #define NV30_NEW_CLIP (1 << 9) |
| #define NV30_NEW_SAMPLE_MASK (1 << 10) |
| #define NV30_NEW_FRAMEBUFFER (1 << 11) |
| #define NV30_NEW_STIPPLE (1 << 12) |
| #define NV30_NEW_SCISSOR (1 << 13) |
| #define NV30_NEW_VIEWPORT (1 << 14) |
| #define NV30_NEW_ARRAYS (1 << 15) |
| #define NV30_NEW_VERTEX (1 << 16) |
| #define NV30_NEW_CONSTBUF (1 << 17) |
| #define NV30_NEW_FRAGTEX (1 << 18) |
| #define NV30_NEW_VERTTEX (1 << 19) |
| #define NV30_NEW_SWTNL (1 << 31) |
| #define NV30_NEW_ALL 0x000fffff |
| |
| struct nv30_context { |
| struct nouveau_context base; |
| struct nv30_screen *screen; |
| |
| struct nouveau_bufctx *bufctx; |
| |
| struct { |
| unsigned rt_enable; |
| unsigned scissor_off; |
| unsigned num_vtxelts; |
| boolean prim_restart; |
| struct nv30_fragprog *fragprog; |
| } state; |
| |
| uint32_t dirty; |
| |
| struct draw_context *draw; |
| uint32_t draw_flags; |
| uint32_t draw_dirty; |
| |
| struct nv30_blend_stateobj *blend; |
| struct nv30_rasterizer_stateobj *rast; |
| struct nv30_zsa_stateobj *zsa; |
| struct nv30_vertex_stateobj *vertex; |
| |
| struct { |
| unsigned filter; |
| unsigned aniso; |
| } config; |
| |
| struct { |
| struct nv30_vertprog *program; |
| |
| struct pipe_resource *constbuf; |
| unsigned constbuf_nr; |
| |
| struct pipe_sampler_view *textures[PIPE_MAX_SAMPLERS]; |
| unsigned num_textures; |
| struct nv30_sampler_state *samplers[PIPE_MAX_SAMPLERS]; |
| unsigned num_samplers; |
| unsigned dirty_samplers; |
| } vertprog; |
| |
| struct { |
| struct nv30_fragprog *program; |
| |
| struct pipe_resource *constbuf; |
| unsigned constbuf_nr; |
| |
| struct pipe_sampler_view *textures[PIPE_MAX_SAMPLERS]; |
| unsigned num_textures; |
| struct nv30_sampler_state *samplers[PIPE_MAX_SAMPLERS]; |
| unsigned num_samplers; |
| unsigned dirty_samplers; |
| } fragprog; |
| |
| struct pipe_framebuffer_state framebuffer; |
| struct pipe_blend_color blend_colour; |
| struct pipe_stencil_ref stencil_ref; |
| struct pipe_poly_stipple stipple; |
| struct pipe_scissor_state scissor; |
| struct pipe_viewport_state viewport; |
| struct pipe_clip_state clip; |
| |
| unsigned sample_mask; |
| |
| struct pipe_vertex_buffer vtxbuf[PIPE_MAX_ATTRIBS]; |
| unsigned num_vtxbufs; |
| struct pipe_index_buffer idxbuf; |
| uint32_t vbo_fifo; |
| uint32_t vbo_user; |
| unsigned vbo_min_index; |
| unsigned vbo_max_index; |
| boolean vbo_push_hint; |
| |
| struct nouveau_heap *blit_vp; |
| struct pipe_resource *blit_fp; |
| |
| /*XXX: nvfx state, DO NOT USE EVER OUTSIDE "STOLEN" NVFX code */ |
| unsigned is_nv4x; |
| unsigned use_nv4x; |
| bool hw_pointsprite_control; |
| enum { |
| HW, |
| } render_mode; |
| }; |
| |
| static INLINE struct nv30_context * |
| nv30_context(struct pipe_context *pipe) |
| { |
| return (struct nv30_context *)pipe; |
| } |
| |
| struct pipe_context * |
| nv30_context_create(struct pipe_screen *pscreen, void *priv); |
| |
| void |
| nv30_vbo_init(struct pipe_context *pipe); |
| |
| void |
| nv30_vbo_validate(struct nv30_context *nv30); |
| |
| void |
| nv30_query_init(struct pipe_context *pipe); |
| |
| void |
| nv30_state_init(struct pipe_context *pipe); |
| |
| void |
| nv30_clear_init(struct pipe_context *pipe); |
| |
| void |
| nv30_vertprog_init(struct pipe_context *pipe); |
| |
| void |
| nv30_vertprog_validate(struct nv30_context *nv30); |
| |
| void |
| nv30_fragprog_init(struct pipe_context *pipe); |
| |
| void |
| nv30_fragprog_validate(struct nv30_context *nv30); |
| |
| void |
| nv30_texture_init(struct pipe_context *pipe); |
| |
| void |
| nv30_texture_validate(struct nv30_context *nv30); |
| |
| void |
| nv30_fragtex_init(struct pipe_context *pipe); |
| |
| void |
| nv30_fragtex_validate(struct nv30_context *nv30); |
| |
| void |
| nv40_verttex_init(struct pipe_context *pipe); |
| |
| void |
| nv40_verttex_validate(struct nv30_context *nv30); |
| |
| void |
| nv30_push_vbo(struct nv30_context *nv30, const struct pipe_draw_info *info); |
| |
| void |
| nv30_draw_init(struct pipe_context *pipe); |
| |
| void |
| nv30_render_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info); |
| |
| boolean |
| nv30_state_validate(struct nv30_context *nv30, boolean hwtnl); |
| |
| void |
| nv30_state_release(struct nv30_context *nv30); |
| |
| //XXX: needed to make it build, clean this up! |
| void |
| _nvfx_fragprog_translate(struct nv30_context *nvfx, struct nv30_fragprog *fp, |
| boolean emulate_sprite_flipping); |
| |
| boolean |
| _nvfx_vertprog_translate(struct nv30_context *nv30, struct nv30_vertprog *vp); |
| |
| #ifdef NV30_3D_VERTEX_BEGIN_END |
| #define NV30_PRIM_GL_CASE(n) \ |
| case PIPE_PRIM_##n: return NV30_3D_VERTEX_BEGIN_END_##n |
| |
| static INLINE unsigned |
| nv30_prim_gl(unsigned prim) |
| { |
| switch (prim) { |
| NV30_PRIM_GL_CASE(POINTS); |
| NV30_PRIM_GL_CASE(LINES); |
| NV30_PRIM_GL_CASE(LINE_LOOP); |
| NV30_PRIM_GL_CASE(LINE_STRIP); |
| NV30_PRIM_GL_CASE(TRIANGLES); |
| NV30_PRIM_GL_CASE(TRIANGLE_STRIP); |
| NV30_PRIM_GL_CASE(TRIANGLE_FAN); |
| NV30_PRIM_GL_CASE(QUADS); |
| NV30_PRIM_GL_CASE(QUAD_STRIP); |
| NV30_PRIM_GL_CASE(POLYGON); |
| default: |
| return NV30_3D_VERTEX_BEGIN_END_POINTS; |
| break; |
| } |
| } |
| #endif |
| |
| #endif |