1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef __NVC0_CONTEXT_H__ 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define __NVC0_CONTEXT_H__ 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_context.h" 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_defines.h" 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_state.h" 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_memory.h" 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_math.h" 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_inlines.h" 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_dynarray.h" 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef NVC0_WITH_DRAW_MODULE 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "draw/draw_vertex.h" 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nv50/nv50_debug.h" 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nvc0_winsys.h" 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nvc0_stateobj.h" 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nvc0_screen.h" 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nvc0_program.h" 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nvc0_resource.h" 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nv50/nv50_transfer.h" 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nouveau/nouveau_context.h" 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nvc0_3ddefs.xml.h" 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nvc0_3d.xml.h" 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nvc0_2d.xml.h" 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nvc0_m2mf.xml.h" 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nve4_p2mf.xml.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* NOTE: must keep NVC0_NEW_...PROG in consecutive bits in this order */ 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_BLEND (1 << 0) 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_RASTERIZER (1 << 1) 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_ZSA (1 << 2) 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_VERTPROG (1 << 3) 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_TCTLPROG (1 << 4) 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_TEVLPROG (1 << 5) 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_GMTYPROG (1 << 6) 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_FRAGPROG (1 << 7) 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_BLEND_COLOUR (1 << 8) 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_STENCIL_REF (1 << 9) 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_CLIP (1 << 10) 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_SAMPLE_MASK (1 << 11) 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_FRAMEBUFFER (1 << 12) 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_STIPPLE (1 << 13) 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_SCISSOR (1 << 14) 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_VIEWPORT (1 << 15) 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_ARRAYS (1 << 16) 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_VERTEX (1 << 17) 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_CONSTBUF (1 << 18) 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_TEXTURES (1 << 19) 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_SAMPLERS (1 << 20) 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_TFB_TARGETS (1 << 21) 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_NEW_IDXBUF (1 << 22) 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_BIND_FB 0 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_BIND_VTX 1 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_BIND_VTX_TMP 2 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_BIND_IDX 3 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_BIND_TEX(s, i) ( 4 + 32 * (s) + (i)) 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_BIND_CB(s, i) (164 + 16 * (s) + (i)) 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_BIND_TFB 244 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_BIND_SCREEN 245 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_BIND_TLS 246 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_BIND_COUNT 247 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_BIND_2D 0 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_BIND_M2MF 0 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_BIND_FENCE 1 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct nvc0_context { 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nouveau_context base; 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nouveau_bufctx *bufctx_3d; 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nouveau_bufctx *bufctx; 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nvc0_screen *screen; 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*m2mf_copy_rect)(struct nvc0_context *, 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct nv50_m2mf_rect *dst, 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct nv50_m2mf_rect *src, 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t nblocksx, uint32_t nblocksy); 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t dirty; 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean flushed; 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean rasterizer_discard; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean early_z_forced; 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean prim_restart; 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t instance_elts; /* bitmask of per-instance elements */ 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t instance_base; 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t constant_vbos; 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t constant_elts; 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int32_t index_bias; 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint16_t scissor; 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t vbo_mode; /* 0 = normal, 1 = translate, 3 = translate, forced */ 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t num_vtxbufs; 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t num_vtxelts; 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t num_textures[5]; 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t num_samplers[5]; 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t tls_required; /* bitmask of shader types using l[] */ 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t c14_bound; /* whether immediate array constbuf is bound */ 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t clip_enable; 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t clip_mode; 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t uniform_buffer_bound[5]; 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nvc0_transform_feedback_state *tfb; 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } state; 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nvc0_blend_stateobj *blend; 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nvc0_rasterizer_stateobj *rast; 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nvc0_zsa_stateobj *zsa; 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nvc0_vertex_stateobj *vertex; 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nvc0_program *vertprog; 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nvc0_program *tctlprog; 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nvc0_program *tevlprog; 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nvc0_program *gmtyprog; 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nvc0_program *fragprog; 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nvc0_constbuf constbuf[5][NVC0_MAX_PIPE_CONSTBUFS]; 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint16_t constbuf_dirty[5]; 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_vertex_buffer vtxbuf[PIPE_MAX_ATTRIBS]; 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_vtxbufs; 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_index_buffer idxbuf; 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t constant_vbos; 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t vbo_user; /* bitmask of vertex buffers pointing to user memory */ 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t vb_elt_first; /* from pipe_draw_info, for vertex upload */ 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t vb_elt_limit; /* max - min element (count - 1) */ 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t instance_off; /* current base vertex for instanced arrays */ 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t instance_max; /* last instance for current draw call */ 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view *textures[5][PIPE_MAX_SAMPLERS]; 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_textures[5]; 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t textures_dirty[5]; 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nv50_tsc_entry *samplers[5][PIPE_MAX_SAMPLERS]; 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_samplers[5]; 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint16_t samplers_dirty[5]; 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t tex_handles[5][PIPE_MAX_SAMPLERS]; /* for nve4 */ 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_framebuffer_state framebuffer; 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_blend_color blend_colour; 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_stencil_ref stencil_ref; 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_poly_stipple stipple; 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_scissor_state scissor; 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_viewport_state viewport; 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_clip_state clip; 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned sample_mask; 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean vbo_push_hint; 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t tfbbuf_dirty; 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_stream_output_target *tfbbuf[4]; 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_tfbbufs; 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef NVC0_WITH_DRAW_MODULE 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct draw_context *draw; 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct nvc0_context * 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_context(struct pipe_context *pipe) 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (struct nvc0_context *)pipe; 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE unsigned 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_shader_stage(unsigned pipe) 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (pipe) { 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_VERTEX: return 0; 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* case PIPE_SHADER_TESSELLATION_CONTROL: return 1; */ 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* case PIPE_SHADER_TESSELLATION_EVALUATION: return 2; */ 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_GEOMETRY: return 3; 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_FRAGMENT: return 4; 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_COMPUTE: return 5; 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(!"invalid PIPE_SHADER type"); 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* nvc0_context.c */ 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_context *nvc0_create(struct pipe_screen *, void *); 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_bufctx_fence(struct nvc0_context *, struct nouveau_bufctx *, 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean on_flush); 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_default_kick_notify(struct nouveau_pushbuf *); 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* nvc0_draw.c */ 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern struct draw_stage *nvc0_draw_render_stage(struct nvc0_context *); 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* nvc0_program.c */ 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgboolean nvc0_program_translate(struct nvc0_program *, uint16_t chipset); 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgboolean nvc0_program_upload_code(struct nvc0_context *, struct nvc0_program *); 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_program_destroy(struct nvc0_context *, struct nvc0_program *); 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_program_library_upload(struct nvc0_context *); 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* nvc0_query.c */ 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_init_query_functions(struct nvc0_context *); 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_query_pushbuf_submit(struct nouveau_pushbuf *, 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_query *, unsigned result_offset); 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_query_fifo_wait(struct nouveau_pushbuf *, struct pipe_query *); 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_so_target_save_offset(struct pipe_context *, 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_stream_output_target *, unsigned i, 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean *serialize); 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_QUERY_TFB_BUFFER_OFFSET (PIPE_QUERY_TYPES + 0) 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* nvc0_shader_state.c */ 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_vertprog_validate(struct nvc0_context *); 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_tctlprog_validate(struct nvc0_context *); 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_tevlprog_validate(struct nvc0_context *); 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_gmtyprog_validate(struct nvc0_context *); 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_fragprog_validate(struct nvc0_context *); 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_tfb_validate(struct nvc0_context *); 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* nvc0_state.c */ 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void nvc0_init_state_functions(struct nvc0_context *); 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* nvc0_state_validate.c */ 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern boolean nvc0_state_validate(struct nvc0_context *, uint32_t state_mask, 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned space_words); 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* nvc0_surface.c */ 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void nvc0_clear(struct pipe_context *, unsigned buffers, 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const union pipe_color_union *color, 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org double depth, unsigned stencil); 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void nvc0_init_surface_functions(struct nvc0_context *); 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* nvc0_tex.c */ 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_validate_textures(struct nvc0_context *); 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_validate_samplers(struct nvc0_context *); 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nve4_set_tex_handles(struct nvc0_context *); 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_sampler_view * 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_create_sampler_view(struct pipe_context *, 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *, 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_sampler_view *); 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* nvc0_transfer.c */ 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_init_transfer_functions(struct nvc0_context *); 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_m2mf_push_linear(struct nouveau_context *nv, 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nouveau_bo *dst, unsigned offset, unsigned domain, 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned size, const void *data); 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnve4_p2mf_push_linear(struct nouveau_context *nv, 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nouveau_bo *dst, unsigned offset, unsigned domain, 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned size, const void *data); 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_cb_push(struct nouveau_context *, 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nouveau_bo *bo, unsigned domain, 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned base, unsigned size, 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned offset, unsigned words, const uint32_t *data); 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* nvc0_vbo.c */ 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_draw_vbo(struct pipe_context *, const struct pipe_draw_info *); 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid * 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_vertex_state_create(struct pipe_context *pipe, 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_elements, 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_vertex_element *elements); 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_vertex_state_delete(struct pipe_context *pipe, void *hwcso); 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_vertex_arrays_validate(struct nvc0_context *); 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_idxbuf_validate(struct nvc0_context *); 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* nvc0_push.c */ 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid nvc0_push_vbo(struct nvc0_context *, const struct pipe_draw_info *); 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 284