1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
#ifndef __NOUVEAU_BUFFEROBJ_H__
#define __NOUVEAU_BUFFEROBJ_H__
#include "mtypes.h"
#include "nouveau_mem.h"
#define NOUVEAU_BO_VRAM_OK (NOUVEAU_MEM_FB | NOUVEAU_MEM_FB_ACCEPTABLE)
#define NOUVEAU_BO_GART_OK (NOUVEAU_MEM_AGP | NOUVEAU_MEM_AGP_ACCEPTABLE)
typedef struct nouveau_bufferobj_region_t {
uint32_t start;
uint32_t end;
} nouveau_bufferobj_region;
typedef struct nouveau_bufferobj_dirty_t {
nouveau_bufferobj_region *dirty;
int nr_dirty;
} nouveau_bufferobj_dirty;
typedef struct nouveau_buffer_object_t {
/* Base class, must be first */
struct gl_buffer_object mesa;
GLboolean mapped;
GLenum usage;
/* Memory used for GPU access to the buffer*/
GLuint gpu_mem_flags;
nouveau_mem * gpu_mem;
nouveau_bufferobj_dirty gpu_dirty;
/* Memory used for CPU access to the buffer */
GLuint cpu_mem_flags;
nouveau_mem * cpu_mem;
GLvoid * cpu_mem_sys;
nouveau_bufferobj_dirty cpu_dirty;
} nouveau_buffer_object;
extern void
nouveau_bo_init_storage(GLcontext *ctx, GLuint valid_gpu_access,
GLsizeiptrARB size, const GLvoid *data, GLenum usage,
struct gl_buffer_object *bo, int flags);
extern GLboolean
nouveau_bo_move_in(GLcontext *ctx, struct gl_buffer_object *bo);
extern GLboolean
nouveau_bo_move_out(GLcontext *ctx, struct gl_buffer_object *bo);
extern void *
nouveau_bo_map(GLcontext *ctx, GLenum usage, struct gl_buffer_object *bo);
extern void
nouveau_bo_unmap(GLcontext *ctx, struct gl_buffer_object *bo);
extern uint32_t
nouveau_bo_gpu_ref(GLcontext *ctx, struct gl_buffer_object *bo);
extern void
nouveau_bo_dirty_linear(GLcontext *ctx, GLboolean on_card,
uint32_t offset, uint32_t size,
struct gl_buffer_object *bo);
extern void
nouveau_bo_dirty_all(GLcontext *ctx, GLboolean on_card,
struct gl_buffer_object *bo);
extern GLuint
nouveau_bo_upload_dirty(GLcontext *ctx, struct gl_buffer_object *bo);
extern GLuint
nouveau_bo_download_dirty(GLcontext *ctx, struct gl_buffer_object *bo);
extern void
nouveauInitBufferObjects(GLcontext *ctx);
#endif
|