summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/nouveau/nouveau_bufferobj.h
blob: 3439a35e7c85c551b012e55b41a13379768bb4a3 (plain)
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_buffers.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);

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