Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 1 | #ifndef __NV50_CONTEXT_H__ |
| 2 | #define __NV50_CONTEXT_H__ |
| 3 | |
| 4 | #include "pipe/p_context.h" |
| 5 | #include "pipe/p_defines.h" |
| 6 | #include "pipe/p_state.h" |
Ben Skeggs | f302fca | 2008-09-11 06:41:18 +1000 | [diff] [blame] | 7 | #include "pipe/p_compiler.h" |
| 8 | |
| 9 | #include "util/u_memory.h" |
| 10 | #include "util/u_math.h" |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 11 | |
Ben Skeggs | 26add92 | 2008-02-16 17:23:12 +1100 | [diff] [blame] | 12 | #include "draw/draw_vertex.h" |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 13 | |
Ben Skeggs | 26add92 | 2008-02-16 17:23:12 +1100 | [diff] [blame] | 14 | #include "nouveau/nouveau_winsys.h" |
| 15 | #include "nouveau/nouveau_gldefs.h" |
Ben Skeggs | f722fd9 | 2008-06-01 22:41:40 +1000 | [diff] [blame] | 16 | #include "nouveau/nouveau_stateobj.h" |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 17 | |
Ben Skeggs | b2e48f8 | 2008-03-12 02:39:13 +1100 | [diff] [blame] | 18 | #include "nv50_screen.h" |
Ben Skeggs | 19a1e90 | 2008-06-11 14:59:19 +1000 | [diff] [blame] | 19 | #include "nv50_program.h" |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 20 | |
| 21 | #define NOUVEAU_ERR(fmt, args...) \ |
| 22 | fprintf(stderr, "%s:%d - "fmt, __func__, __LINE__, ##args); |
| 23 | #define NOUVEAU_MSG(fmt, args...) \ |
| 24 | fprintf(stderr, "nouveau: "fmt, ##args); |
| 25 | |
Ben Skeggs | 716c1cd | 2008-06-01 23:10:31 +1000 | [diff] [blame] | 26 | /* Constant buffer assignment */ |
Ben Skeggs | f50e78e | 2008-06-11 15:28:41 +1000 | [diff] [blame] | 27 | #define NV50_CB_PMISC 0 |
| 28 | #define NV50_CB_PVP 1 |
Ben Skeggs | 716c1cd | 2008-06-01 23:10:31 +1000 | [diff] [blame] | 29 | #define NV50_CB_PFP 2 |
| 30 | #define NV50_CB_PGP 3 |
| 31 | #define NV50_CB_TIC 4 |
| 32 | #define NV50_CB_TSC 5 |
Ben Skeggs | cae38d0 | 2008-06-16 16:29:40 +1000 | [diff] [blame] | 33 | #define NV50_CB_PUPLOAD 6 |
Ben Skeggs | 716c1cd | 2008-06-01 23:10:31 +1000 | [diff] [blame] | 34 | |
Ben Skeggs | 2fee5f7 | 2008-03-12 03:54:53 +1100 | [diff] [blame] | 35 | #define NV50_NEW_BLEND (1 << 0) |
| 36 | #define NV50_NEW_ZSA (1 << 1) |
| 37 | #define NV50_NEW_BLEND_COLOUR (1 << 2) |
| 38 | #define NV50_NEW_STIPPLE (1 << 3) |
| 39 | #define NV50_NEW_SCISSOR (1 << 4) |
| 40 | #define NV50_NEW_VIEWPORT (1 << 5) |
Ben Skeggs | cd85dc1 | 2008-03-12 04:29:58 +1100 | [diff] [blame] | 41 | #define NV50_NEW_RASTERIZER (1 << 6) |
Ben Skeggs | cd9ed05 | 2008-03-12 04:50:53 +1100 | [diff] [blame] | 42 | #define NV50_NEW_FRAMEBUFFER (1 << 7) |
Ben Skeggs | f722fd9 | 2008-06-01 22:41:40 +1000 | [diff] [blame] | 43 | #define NV50_NEW_VERTPROG (1 << 8) |
Ben Skeggs | 716c1cd | 2008-06-01 23:10:31 +1000 | [diff] [blame] | 44 | #define NV50_NEW_VERTPROG_CB (1 << 9) |
| 45 | #define NV50_NEW_FRAGPROG (1 << 10) |
| 46 | #define NV50_NEW_FRAGPROG_CB (1 << 11) |
| 47 | #define NV50_NEW_ARRAYS (1 << 12) |
Ben Skeggs | c0ed6a8 | 2008-06-13 12:09:46 +1000 | [diff] [blame] | 48 | #define NV50_NEW_SAMPLER (1 << 13) |
| 49 | #define NV50_NEW_TEXTURE (1 << 14) |
Ben Skeggs | 3250bac | 2008-03-12 02:56:10 +1100 | [diff] [blame] | 50 | |
| 51 | struct nv50_blend_stateobj { |
| 52 | struct pipe_blend_state pipe; |
| 53 | struct nouveau_stateobj *so; |
| 54 | }; |
| 55 | |
Ben Skeggs | 06bd7d7 | 2008-03-12 03:41:05 +1100 | [diff] [blame] | 56 | struct nv50_zsa_stateobj { |
| 57 | struct pipe_depth_stencil_alpha_state pipe; |
| 58 | struct nouveau_stateobj *so; |
| 59 | }; |
| 60 | |
Ben Skeggs | cd85dc1 | 2008-03-12 04:29:58 +1100 | [diff] [blame] | 61 | struct nv50_rasterizer_stateobj { |
| 62 | struct pipe_rasterizer_state pipe; |
| 63 | struct nouveau_stateobj *so; |
| 64 | }; |
| 65 | |
Ben Skeggs | 6c1627a | 2009-06-06 10:57:19 +1000 | [diff] [blame] | 66 | struct nv50_sampler_stateobj { |
| 67 | bool normalized; |
| 68 | unsigned tsc[8]; |
| 69 | }; |
| 70 | |
Ben Skeggs | 103020f | 2009-01-12 13:42:19 +1000 | [diff] [blame] | 71 | struct nv50_miptree_level { |
Ben Skeggs | 103020f | 2009-01-12 13:42:19 +1000 | [diff] [blame] | 72 | int *image_offset; |
Ben Skeggs | 63a3a37 | 2009-02-20 09:32:47 +1000 | [diff] [blame] | 73 | unsigned pitch; |
Christoph Bumiller | 442a5e4 | 2009-08-14 18:23:55 +0200 | [diff] [blame] | 74 | unsigned tile_mode; |
Ben Skeggs | 103020f | 2009-01-12 13:42:19 +1000 | [diff] [blame] | 75 | }; |
| 76 | |
Ben Skeggs | c0ed6a8 | 2008-06-13 12:09:46 +1000 | [diff] [blame] | 77 | struct nv50_miptree { |
Ben Skeggs | 02f3245 | 2009-08-31 13:00:34 +1000 | [diff] [blame] | 78 | struct nouveau_miptree base; |
Ben Skeggs | 17cbe45 | 2009-01-05 14:56:41 +1100 | [diff] [blame] | 79 | |
Ben Skeggs | 103020f | 2009-01-12 13:42:19 +1000 | [diff] [blame] | 80 | struct nv50_miptree_level level[PIPE_MAX_TEXTURE_LEVELS]; |
Ben Skeggs | 17cbe45 | 2009-01-05 14:56:41 +1100 | [diff] [blame] | 81 | int image_nr; |
| 82 | int total_size; |
Ben Skeggs | c0ed6a8 | 2008-06-13 12:09:46 +1000 | [diff] [blame] | 83 | }; |
| 84 | |
| 85 | static INLINE struct nv50_miptree * |
| 86 | nv50_miptree(struct pipe_texture *pt) |
| 87 | { |
| 88 | return (struct nv50_miptree *)pt; |
| 89 | } |
| 90 | |
Ben Skeggs | 9b0add0 | 2008-07-11 22:45:11 +1000 | [diff] [blame] | 91 | struct nv50_surface { |
| 92 | struct pipe_surface base; |
Ben Skeggs | 9b0add0 | 2008-07-11 22:45:11 +1000 | [diff] [blame] | 93 | }; |
| 94 | |
| 95 | static INLINE struct nv50_surface * |
| 96 | nv50_surface(struct pipe_surface *pt) |
| 97 | { |
| 98 | return (struct nv50_surface *)pt; |
| 99 | } |
| 100 | |
Ben Skeggs | bb9efb5 | 2008-06-16 22:24:16 +1000 | [diff] [blame] | 101 | struct nv50_state { |
| 102 | unsigned dirty; |
| 103 | |
| 104 | struct nouveau_stateobj *fb; |
| 105 | struct nouveau_stateobj *blend; |
| 106 | struct nouveau_stateobj *blend_colour; |
| 107 | struct nouveau_stateobj *zsa; |
| 108 | struct nouveau_stateobj *rast; |
| 109 | struct nouveau_stateobj *stipple; |
| 110 | struct nouveau_stateobj *scissor; |
Ben Skeggs | 035a04d | 2008-06-16 22:34:50 +1000 | [diff] [blame] | 111 | unsigned scissor_enabled; |
Ben Skeggs | bb9efb5 | 2008-06-16 22:24:16 +1000 | [diff] [blame] | 112 | struct nouveau_stateobj *viewport; |
Ben Skeggs | 7a81ffa | 2008-07-11 01:53:28 +1000 | [diff] [blame] | 113 | unsigned viewport_bypass; |
Ben Skeggs | bb9efb5 | 2008-06-16 22:24:16 +1000 | [diff] [blame] | 114 | struct nouveau_stateobj *tsc_upload; |
| 115 | struct nouveau_stateobj *tic_upload; |
Ben Skeggs | f1edfa0 | 2009-06-06 14:00:45 +1000 | [diff] [blame] | 116 | unsigned miptree_nr; |
Ben Skeggs | bb9efb5 | 2008-06-16 22:24:16 +1000 | [diff] [blame] | 117 | struct nouveau_stateobj *vertprog; |
| 118 | struct nouveau_stateobj *fragprog; |
Christoph Bumiller | 6516594 | 2009-09-14 20:23:39 +0200 | [diff] [blame^] | 119 | struct nouveau_stateobj *programs; |
Ben Skeggs | bb9efb5 | 2008-06-16 22:24:16 +1000 | [diff] [blame] | 120 | struct nouveau_stateobj *vtxfmt; |
| 121 | struct nouveau_stateobj *vtxbuf; |
Christoph Bumiller | d7c5555 | 2009-08-20 21:39:02 +0200 | [diff] [blame] | 122 | struct nouveau_stateobj *vtxattr; |
Ben Skeggs | bb9efb5 | 2008-06-16 22:24:16 +1000 | [diff] [blame] | 123 | }; |
| 124 | |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 125 | struct nv50_context { |
| 126 | struct pipe_context pipe; |
Ben Skeggs | b2e48f8 | 2008-03-12 02:39:13 +1100 | [diff] [blame] | 127 | |
| 128 | struct nv50_screen *screen; |
| 129 | unsigned pctx_id; |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 130 | |
| 131 | struct draw_context *draw; |
Ben Skeggs | 3250bac | 2008-03-12 02:56:10 +1100 | [diff] [blame] | 132 | |
Ben Skeggs | bb9efb5 | 2008-06-16 22:24:16 +1000 | [diff] [blame] | 133 | struct nv50_state state; |
| 134 | |
Ben Skeggs | 3250bac | 2008-03-12 02:56:10 +1100 | [diff] [blame] | 135 | unsigned dirty; |
| 136 | struct nv50_blend_stateobj *blend; |
Ben Skeggs | 06bd7d7 | 2008-03-12 03:41:05 +1100 | [diff] [blame] | 137 | struct nv50_zsa_stateobj *zsa; |
Ben Skeggs | cd85dc1 | 2008-03-12 04:29:58 +1100 | [diff] [blame] | 138 | struct nv50_rasterizer_stateobj *rasterizer; |
Ben Skeggs | 2fee5f7 | 2008-03-12 03:54:53 +1100 | [diff] [blame] | 139 | struct pipe_blend_color blend_colour; |
| 140 | struct pipe_poly_stipple stipple; |
| 141 | struct pipe_scissor_state scissor; |
| 142 | struct pipe_viewport_state viewport; |
Ben Skeggs | cd9ed05 | 2008-03-12 04:50:53 +1100 | [diff] [blame] | 143 | struct pipe_framebuffer_state framebuffer; |
Ben Skeggs | f722fd9 | 2008-06-01 22:41:40 +1000 | [diff] [blame] | 144 | struct nv50_program *vertprog; |
| 145 | struct nv50_program *fragprog; |
| 146 | struct pipe_buffer *constbuf[PIPE_SHADER_TYPES]; |
| 147 | struct pipe_vertex_buffer vtxbuf[PIPE_MAX_ATTRIBS]; |
| 148 | unsigned vtxbuf_nr; |
| 149 | struct pipe_vertex_element vtxelt[PIPE_MAX_ATTRIBS]; |
| 150 | unsigned vtxelt_nr; |
Ben Skeggs | 6c1627a | 2009-06-06 10:57:19 +1000 | [diff] [blame] | 151 | struct nv50_sampler_stateobj *sampler[PIPE_MAX_SAMPLERS]; |
Ben Skeggs | c0ed6a8 | 2008-06-13 12:09:46 +1000 | [diff] [blame] | 152 | unsigned sampler_nr; |
| 153 | struct nv50_miptree *miptree[PIPE_MAX_SAMPLERS]; |
| 154 | unsigned miptree_nr; |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 155 | }; |
| 156 | |
Ben Skeggs | 3250bac | 2008-03-12 02:56:10 +1100 | [diff] [blame] | 157 | static INLINE struct nv50_context * |
| 158 | nv50_context(struct pipe_context *pipe) |
| 159 | { |
| 160 | return (struct nv50_context *)pipe; |
| 161 | } |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 162 | |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 163 | extern void nv50_init_surface_functions(struct nv50_context *nv50); |
| 164 | extern void nv50_init_state_functions(struct nv50_context *nv50); |
Ben Skeggs | b8965be | 2007-12-09 03:22:14 +1100 | [diff] [blame] | 165 | extern void nv50_init_query_functions(struct nv50_context *nv50); |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 166 | |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 167 | extern void nv50_screen_init_miptree_functions(struct pipe_screen *pscreen); |
| 168 | |
Younes Manton | 32cd1a0 | 2009-02-07 12:53:30 -0500 | [diff] [blame] | 169 | extern int |
| 170 | nv50_surface_do_copy(struct nv50_screen *screen, struct pipe_surface *dst, |
| 171 | int dx, int dy, struct pipe_surface *src, int sx, int sy, |
| 172 | int w, int h); |
| 173 | |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 174 | /* nv50_draw.c */ |
| 175 | extern struct draw_stage *nv50_draw_render_stage(struct nv50_context *nv50); |
| 176 | |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 177 | /* nv50_vbo.c */ |
| 178 | extern boolean nv50_draw_arrays(struct pipe_context *, unsigned mode, |
| 179 | unsigned start, unsigned count); |
| 180 | extern boolean nv50_draw_elements(struct pipe_context *pipe, |
Ben Skeggs | 3e39bc3 | 2008-01-28 18:32:46 +1100 | [diff] [blame] | 181 | struct pipe_buffer *indexBuffer, |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 182 | unsigned indexSize, |
| 183 | unsigned mode, unsigned start, |
| 184 | unsigned count); |
Ben Skeggs | f722fd9 | 2008-06-01 22:41:40 +1000 | [diff] [blame] | 185 | extern void nv50_vbo_validate(struct nv50_context *nv50); |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 186 | |
| 187 | /* nv50_clear.c */ |
Michel Dänzer | eb168e2 | 2009-04-04 19:01:51 +0200 | [diff] [blame] | 188 | extern void nv50_clear(struct pipe_context *pipe, unsigned buffers, |
| 189 | const float *rgba, double depth, unsigned stencil); |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 190 | |
Ben Skeggs | f722fd9 | 2008-06-01 22:41:40 +1000 | [diff] [blame] | 191 | /* nv50_program.c */ |
| 192 | extern void nv50_vertprog_validate(struct nv50_context *nv50); |
| 193 | extern void nv50_fragprog_validate(struct nv50_context *nv50); |
Christoph Bumiller | 6516594 | 2009-09-14 20:23:39 +0200 | [diff] [blame^] | 194 | extern void nv50_linkage_validate(struct nv50_context *nv50); |
Ben Skeggs | f722fd9 | 2008-06-01 22:41:40 +1000 | [diff] [blame] | 195 | extern void nv50_program_destroy(struct nv50_context *nv50, struct nv50_program *p); |
| 196 | |
| 197 | /* nv50_state_validate.c */ |
Ben Skeggs | 9c29512 | 2008-03-12 02:59:20 +1100 | [diff] [blame] | 198 | extern boolean nv50_state_validate(struct nv50_context *nv50); |
| 199 | |
Ben Skeggs | 6210069 | 2008-07-11 20:49:06 +1000 | [diff] [blame] | 200 | /* nv50_tex.c */ |
| 201 | extern void nv50_tex_validate(struct nv50_context *); |
| 202 | |
Ben Skeggs | 47b418b | 2007-12-05 14:01:01 +1100 | [diff] [blame] | 203 | #endif |