xref: /aosp_15_r20/external/mesa3d/src/gallium/drivers/svga/svga_swtnl_private.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright (c) 2008-2024 Broadcom. All Rights Reserved.
3  * The term “Broadcom” refers to Broadcom Inc.
4  * and/or its subsidiaries.
5  * SPDX-License-Identifier: MIT
6  */
7 
8 #ifndef SVGA_SWTNL_PRIVATE_H
9 #define SVGA_SWTNL_PRIVATE_H
10 
11 #include "svga_swtnl.h"
12 #include "draw/draw_vertex.h"
13 
14 #include "svga_types.h"
15 #include "svga3d_reg.h"
16 
17 /**
18  * Primitive renderer for svga.
19  */
20 struct svga_vbuf_render {
21    struct vbuf_render base;
22 
23    struct svga_context *svga;
24    struct vertex_info vertex_info;
25 
26    unsigned vertex_size;
27 
28    SVGA3dElementLayoutId layout_id; /**< current element layout id */
29 
30    enum mesa_prim prim;
31 
32    struct pipe_resource *vbuf;
33    struct pipe_resource *ibuf;
34    struct pipe_transfer *vbuf_transfer;
35    struct pipe_transfer *ibuf_transfer;
36 
37    void *vbuf_ptr;
38 
39    /* current size of buffer */
40    size_t vbuf_size;
41    size_t ibuf_size;
42 
43    /* size of that the buffer should be */
44    size_t vbuf_alloc_size;
45    size_t ibuf_alloc_size;
46 
47    /* current write place */
48    size_t vbuf_offset;
49    size_t ibuf_offset;
50 
51    /* currently used */
52    size_t vbuf_used;
53 
54    SVGA3dVertexDecl vdecl[PIPE_MAX_ATTRIBS];
55    unsigned vdecl_offset;
56    unsigned vdecl_count;
57 
58    uint16_t min_index;
59    uint16_t max_index;
60 };
61 
62 /**
63  * Basically a cast wrapper.
64  */
65 static inline struct svga_vbuf_render *
svga_vbuf_render(struct vbuf_render * render)66 svga_vbuf_render( struct vbuf_render *render )
67 {
68    assert(render);
69    return (struct svga_vbuf_render *)render;
70 }
71 
72 
73 struct vbuf_render *
74 svga_vbuf_render_create( struct svga_context *svga );
75 
76 
77 enum pipe_error
78 svga_swtnl_update_vdecl( struct svga_context *svga );
79 
80 
81 #endif
82