"Fossies" - the Fresh Open Source Software Archive

Member "mesa-20.1.8/src/gallium/drivers/nouveau/nv30/nv30_context.h" (16 Sep 2020, 5849 Bytes) of package /linux/misc/mesa-20.1.8.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "nv30_context.h" see the Fossies "Dox" file reference documentation.

    1 #ifndef __NV30_CONTEXT_H__
    2 #define __NV30_CONTEXT_H__
    3 
    4 #include "pipe/p_format.h"
    5 #include "util/u_blitter.h"
    6 
    7 #include "nv30/nv30_screen.h"
    8 #include "nv30/nv30_state.h"
    9 
   10 #include "nouveau_context.h"
   11 
   12 #define BUFCTX_FB          0
   13 #define BUFCTX_VTXTMP      1
   14 #define BUFCTX_VTXBUF      2
   15 #define BUFCTX_IDXBUF      3
   16 #define BUFCTX_VERTTEX(n) (4 + (n))
   17 #define BUFCTX_FRAGPROG    8
   18 #define BUFCTX_FRAGTEX(n) (9 + (n))
   19 
   20 #define NV30_NEW_BLEND        (1 << 0)
   21 #define NV30_NEW_RASTERIZER   (1 << 1)
   22 #define NV30_NEW_ZSA          (1 << 2)
   23 #define NV30_NEW_VERTPROG     (1 << 3)
   24 #define NV30_NEW_VERTCONST    (1 << 4)
   25 #define NV30_NEW_FRAGPROG     (1 << 5)
   26 #define NV30_NEW_FRAGCONST    (1 << 6)
   27 #define NV30_NEW_BLEND_COLOUR (1 << 7)
   28 #define NV30_NEW_STENCIL_REF  (1 << 8)
   29 #define NV30_NEW_CLIP         (1 << 9)
   30 #define NV30_NEW_SAMPLE_MASK  (1 << 10)
   31 #define NV30_NEW_FRAMEBUFFER  (1 << 11)
   32 #define NV30_NEW_STIPPLE      (1 << 12)
   33 #define NV30_NEW_SCISSOR      (1 << 13)
   34 #define NV30_NEW_VIEWPORT     (1 << 14)
   35 #define NV30_NEW_ARRAYS       (1 << 15)
   36 #define NV30_NEW_VERTEX       (1 << 16)
   37 #define NV30_NEW_CONSTBUF     (1 << 17)
   38 #define NV30_NEW_FRAGTEX      (1 << 18)
   39 #define NV30_NEW_VERTTEX      (1 << 19)
   40 #define NV30_NEW_SWTNL        (1 << 31)
   41 #define NV30_NEW_ALL          0x000fffff
   42 
   43 struct nv30_context {
   44    struct nouveau_context base;
   45    struct nv30_screen *screen;
   46    struct blitter_context *blitter;
   47 
   48    struct nouveau_bufctx *bufctx;
   49 
   50    struct {
   51       unsigned rt_enable;
   52       unsigned scissor_off;
   53       unsigned num_vtxelts;
   54       int index_bias;
   55       bool prim_restart;
   56       struct nv30_fragprog *fragprog;
   57    } state;
   58 
   59    uint32_t dirty;
   60 
   61    struct draw_context *draw;
   62    uint32_t draw_flags;
   63    uint32_t draw_dirty;
   64 
   65    struct nv30_blend_stateobj *blend;
   66    struct nv30_rasterizer_stateobj *rast;
   67    struct nv30_zsa_stateobj *zsa;
   68    struct nv30_vertex_stateobj *vertex;
   69 
   70    struct {
   71       unsigned filter;
   72       unsigned aniso;
   73    } config;
   74 
   75    struct {
   76       struct nv30_vertprog *program;
   77 
   78       struct pipe_resource *constbuf;
   79       unsigned constbuf_nr;
   80 
   81       struct pipe_sampler_view *textures[PIPE_MAX_SAMPLERS];
   82       unsigned num_textures;
   83       struct nv30_sampler_state *samplers[PIPE_MAX_SAMPLERS];
   84       unsigned num_samplers;
   85       unsigned dirty_samplers;
   86    } vertprog;
   87 
   88    struct {
   89       struct nv30_fragprog *program;
   90 
   91       struct pipe_resource *constbuf;
   92       unsigned constbuf_nr;
   93 
   94       struct pipe_sampler_view *textures[PIPE_MAX_SAMPLERS];
   95       unsigned num_textures;
   96       struct nv30_sampler_state *samplers[PIPE_MAX_SAMPLERS];
   97       unsigned num_samplers;
   98       unsigned dirty_samplers;
   99    } fragprog;
  100 
  101    struct pipe_framebuffer_state framebuffer;
  102    struct pipe_blend_color blend_colour;
  103    struct pipe_stencil_ref stencil_ref;
  104    struct pipe_poly_stipple stipple;
  105    struct pipe_scissor_state scissor;
  106    struct pipe_viewport_state viewport;
  107    struct pipe_clip_state clip;
  108 
  109    unsigned sample_mask;
  110 
  111    struct pipe_vertex_buffer vtxbuf[PIPE_MAX_ATTRIBS];
  112    unsigned num_vtxbufs;
  113    uint32_t vbo_fifo;
  114    uint32_t vbo_user;
  115    unsigned vbo_min_index;
  116    unsigned vbo_max_index;
  117    bool vbo_push_hint;
  118 
  119    struct nouveau_heap  *blit_vp;
  120    struct pipe_resource *blit_fp;
  121 
  122    struct pipe_query *render_cond_query;
  123    unsigned render_cond_mode;
  124    bool render_cond_cond;
  125 };
  126 
  127 static inline struct nv30_context *
  128 nv30_context(struct pipe_context *pipe)
  129 {
  130    return (struct nv30_context *)pipe;
  131 }
  132 
  133 struct pipe_context *
  134 nv30_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags);
  135 
  136 void
  137 nv30_vbo_init(struct pipe_context *pipe);
  138 
  139 void
  140 nv30_vbo_validate(struct nv30_context *nv30);
  141 
  142 void
  143 nv30_query_init(struct pipe_context *pipe);
  144 
  145 void
  146 nv30_state_init(struct pipe_context *pipe);
  147 
  148 void
  149 nv30_clear_init(struct pipe_context *pipe);
  150 
  151 void
  152 nv30_vertprog_init(struct pipe_context *pipe);
  153 
  154 void
  155 nv30_vertprog_validate(struct nv30_context *nv30);
  156 
  157 void
  158 nv30_fragprog_init(struct pipe_context *pipe);
  159 
  160 void
  161 nv30_fragprog_validate(struct nv30_context *nv30);
  162 
  163 void
  164 nv30_texture_init(struct pipe_context *pipe);
  165 
  166 void
  167 nv30_texture_validate(struct nv30_context *nv30);
  168 
  169 void
  170 nv30_fragtex_init(struct pipe_context *pipe);
  171 
  172 void
  173 nv30_fragtex_validate(struct nv30_context *nv30);
  174 
  175 void
  176 nv40_verttex_init(struct pipe_context *pipe);
  177 
  178 void
  179 nv40_verttex_validate(struct nv30_context *nv30);
  180 
  181 void
  182 nv30_fragtex_sampler_states_bind(struct pipe_context *pipe,
  183                                  unsigned nr, void **hwcso);
  184 
  185 void
  186 nv40_verttex_sampler_states_bind(struct pipe_context *pipe,
  187                                  unsigned nr, void **hwcso);
  188 
  189 void
  190 nv40_verttex_set_sampler_views(struct pipe_context *pipe, unsigned nr,
  191                                struct pipe_sampler_view **views);
  192 
  193 void
  194 nv30_fragtex_set_sampler_views(struct pipe_context *pipe,
  195                                unsigned nr, struct pipe_sampler_view **views);
  196 
  197 void
  198 nv30_push_vbo(struct nv30_context *nv30, const struct pipe_draw_info *info);
  199 
  200 void
  201 nv30_draw_init(struct pipe_context *pipe);
  202 
  203 void
  204 nv30_render_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info);
  205 
  206 bool
  207 nv30_state_validate(struct nv30_context *nv30, uint32_t mask, bool hwtnl);
  208 
  209 void
  210 nv30_state_release(struct nv30_context *nv30);
  211 
  212 #ifdef NV30_3D_VERTEX_BEGIN_END
  213 #define NV30_PRIM_GL_CASE(n) \
  214    case PIPE_PRIM_##n: return NV30_3D_VERTEX_BEGIN_END_##n
  215 
  216 static inline unsigned
  217 nv30_prim_gl(unsigned prim)
  218 {
  219    switch (prim) {
  220    NV30_PRIM_GL_CASE(POINTS);
  221    NV30_PRIM_GL_CASE(LINES);
  222    NV30_PRIM_GL_CASE(LINE_LOOP);
  223    NV30_PRIM_GL_CASE(LINE_STRIP);
  224    NV30_PRIM_GL_CASE(TRIANGLES);
  225    NV30_PRIM_GL_CASE(TRIANGLE_STRIP);
  226    NV30_PRIM_GL_CASE(TRIANGLE_FAN);
  227    NV30_PRIM_GL_CASE(QUADS);
  228    NV30_PRIM_GL_CASE(QUAD_STRIP);
  229    NV30_PRIM_GL_CASE(POLYGON);
  230    default:
  231       return NV30_3D_VERTEX_BEGIN_END_POINTS;
  232       break;
  233    }
  234 }
  235 #endif
  236 
  237 #endif