nv30_context.h revision a514aeb77899816d82c5b31f3bf2206d82d68893
13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#ifndef __NV30_CONTEXT_H__
2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define __NV30_CONTEXT_H__
3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "pipe/p_context.h"
5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "pipe/p_defines.h"
6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "pipe/p_state.h"
7014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "draw/draw_vertex.h"
9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "nouveau/nouveau_winsys.h"
11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "nouveau/nouveau_gldefs.h"
12014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define NOUVEAU_PUSH_CONTEXT(ctx)                                              \
14014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch	struct nv30_context *ctx = nv30
15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "nouveau/nouveau_push.h"
16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "nv30_state.h"
189fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
193ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block#define NOUVEAU_ERR(fmt, args...) \
203ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block	fprintf(stderr, "%s:%d -  "fmt, __func__, __LINE__, ##args);
213ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block#define NOUVEAU_MSG(fmt, args...) \
223ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block	fprintf(stderr, "nouveau: "fmt, ##args);
233ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block
241e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#define NV30_NEW_VERTPROG	(1 << 1)
251e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#define NV30_NEW_FRAGPROG	(1 << 2)
261e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#define NV30_NEW_ARRAYS		(1 << 3)
271e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
281e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockstruct nv30_context {
291e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	struct pipe_context pipe;
301e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	struct nouveau_winsys *nvws;
311e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
321e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	struct draw_context *draw;
331e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
341e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	int chipset;
351e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	struct nouveau_grobj *rankine;
361e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	struct nouveau_notifier *sync;
371e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
381e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	/* query objects */
391e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	struct nouveau_notifier *query;
40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch	struct nouveau_resource *query_heap;
411e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
421e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	uint32_t dirty;
431e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
441e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	struct nv30_sampler_state *tex_sampler[PIPE_MAX_SAMPLERS];
451e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	struct nv30_miptree *tex_miptree[PIPE_MAX_SAMPLERS];
46b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch	unsigned dirty_samplers;
47db1b4389239a7132c9cde0915dbd3f775dc1027aBen Murdoch	unsigned fp_samplers;
481e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	unsigned vp_samplers;
491e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
501e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	uint32_t rt_enable;
511e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	struct pipe_buffer *rt[2];
521e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	struct pipe_buffer *zeta;
531e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
541e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	struct {
551e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block		struct pipe_buffer *buffer;
56b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch		uint32_t format;
57db1b4389239a7132c9cde0915dbd3f775dc1027aBen Murdoch	} tex[16];
581e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
591e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	unsigned vb_enable;
601e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	struct {
611e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block		struct pipe_buffer *buffer;
621e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block		unsigned delta;
631e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	} vb[16];
64b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
65b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch	struct {
663fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch		struct nouveau_resource *exec_heap;
673fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch		struct nouveau_resource *data_heap;
683fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch
693fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch		struct nv30_vertex_program *active;
703fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch
711e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block		struct nv30_vertex_program *current;
723fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch		struct pipe_buffer *constant_buf;
731e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	} vertprog;
743fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch
753fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch	struct {
763fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch		struct nv30_fragment_program *active;
771e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
781e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block		struct nv30_fragment_program *current;
791e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block		struct pipe_buffer *constant_buf;
801e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	} fragprog;
811e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
821e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	struct pipe_vertex_buffer  vtxbuf[PIPE_ATTRIB_MAX];
831e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block	struct pipe_vertex_element vtxelt[PIPE_ATTRIB_MAX];
841e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block};
851e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
861e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockstatic INLINE struct nv30_context *
871e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blocknv30_context(struct pipe_context *pipe)
883ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block{
893ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block	return (struct nv30_context *)pipe;
903ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block}
913ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block
923ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockextern void nv30_init_state_functions(struct nv30_context *nv30);
933ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockextern void nv30_init_surface_functions(struct nv30_context *nv30);
943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochextern void nv30_init_miptree_functions(struct nv30_context *nv30);
95014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochextern void nv30_init_query_functions(struct nv30_context *nv30);
963ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block
97014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochextern void nv30_screen_init_miptree_functions(struct pipe_screen *pscreen);
983ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block
993ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block/* nv30_draw.c */
1003ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockextern struct draw_stage *nv30_draw_render_stage(struct nv30_context *nv30);
1013ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block
1023ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block/* nv30_vertprog.c */
1033ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockextern void nv30_vertprog_translate(struct nv30_context *,
1043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch				    struct nv30_vertex_program *);
1053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochextern void nv30_vertprog_bind(struct nv30_context *,
106b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch			       struct nv30_vertex_program *);
107b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochextern void nv30_vertprog_destroy(struct nv30_context *,
108014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch				  struct nv30_vertex_program *);
1096ded16be15dd865a9b21ea304d5273c8be299c87Steve Block
1103ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block/* nv30_fragprog.c */
111b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochextern void nv30_fragprog_translate(struct nv30_context *,
112b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch				    struct nv30_fragment_program *);
113f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochextern void nv30_fragprog_bind(struct nv30_context *,
114f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch			       struct nv30_fragment_program *);
115014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochextern void nv30_fragprog_destroy(struct nv30_context *,
116f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch				  struct nv30_fragment_program *);
117f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
118f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch/* nv30_fragtex.c */
119f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochextern void nv30_fragtex_bind(struct nv30_context *);
120014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
1213fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch/* nv30_state.c and friends */
122b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochextern void nv30_emit_hw_state(struct nv30_context *nv30);
123014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochextern void nv30_state_tex_update(struct nv30_context *nv30);
124014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
125014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch/* nv30_vbo.c */
126257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochextern boolean nv30_draw_arrays(struct pipe_context *, unsigned mode,
127257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch				unsigned start, unsigned count);
1283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochextern boolean nv30_draw_elements(struct pipe_context *pipe,
1293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch				  struct pipe_buffer *indexBuffer,
1303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch				  unsigned indexSize,
1313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch				  unsigned mode, unsigned start,
1323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch				  unsigned count);
133b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
134014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch/* nv30_clear.c */
1353ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockextern void nv30_clear(struct pipe_context *pipe, struct pipe_surface *ps,
136756813857a4c2a4d8ad2e805969d5768d3cf43a0Iain Merrick		       unsigned clearValue);
137b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
138b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#endif
139014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch