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