gallium/u_vbuf: simplify the first if statement in u_vbuf_upload_buffers
[mesa.git] / src / gallium / auxiliary / util / u_transfer.h
1
2 #ifndef U_TRANSFER_H
3 #define U_TRANSFER_H
4
5 /* Fallback implementations for inline read/writes which just go back
6 * to the regular transfer behaviour.
7 */
8 #include "pipe/p_state.h"
9
10 struct pipe_context;
11 struct winsys_handle;
12
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16
17 bool u_default_resource_get_handle(struct pipe_screen *screen,
18 struct pipe_resource *resource,
19 struct winsys_handle *handle);
20
21 void u_default_buffer_subdata(struct pipe_context *pipe,
22 struct pipe_resource *resource,
23 unsigned usage, unsigned offset,
24 unsigned size, const void *data);
25
26 void u_default_texture_subdata(struct pipe_context *pipe,
27 struct pipe_resource *resource,
28 unsigned level,
29 unsigned usage,
30 const struct pipe_box *box,
31 const void *data,
32 unsigned stride,
33 unsigned layer_stride);
34
35 void u_default_transfer_flush_region( struct pipe_context *pipe,
36 struct pipe_transfer *transfer,
37 const struct pipe_box *box);
38
39 void u_default_transfer_unmap( struct pipe_context *pipe,
40 struct pipe_transfer *transfer );
41
42
43
44 /* Useful helper to allow >1 implementation of resource functionality
45 * to exist in a single driver. This is intended to be transitionary!
46 */
47 struct u_resource_vtbl {
48
49 bool (*resource_get_handle)(struct pipe_screen *,
50 struct pipe_resource *tex,
51 struct winsys_handle *handle);
52
53 void (*resource_destroy)(struct pipe_screen *,
54 struct pipe_resource *pt);
55
56 void *(*transfer_map)(struct pipe_context *,
57 struct pipe_resource *resource,
58 unsigned level,
59 unsigned usage,
60 const struct pipe_box *,
61 struct pipe_transfer **);
62
63
64 void (*transfer_flush_region)( struct pipe_context *,
65 struct pipe_transfer *transfer,
66 const struct pipe_box *);
67
68 void (*transfer_unmap)( struct pipe_context *,
69 struct pipe_transfer *transfer );
70 };
71
72
73 struct u_resource {
74 struct pipe_resource b;
75 const struct u_resource_vtbl *vtbl;
76 };
77
78
79 bool u_resource_get_handle_vtbl(struct pipe_screen *screen,
80 struct pipe_context *ctx,
81 struct pipe_resource *resource,
82 struct winsys_handle *handle,
83 unsigned usage);
84
85 void u_resource_destroy_vtbl(struct pipe_screen *screen,
86 struct pipe_resource *resource);
87
88 void *u_transfer_map_vtbl(struct pipe_context *context,
89 struct pipe_resource *resource,
90 unsigned level,
91 unsigned usage,
92 const struct pipe_box *box,
93 struct pipe_transfer **transfer);
94
95 void u_transfer_flush_region_vtbl( struct pipe_context *pipe,
96 struct pipe_transfer *transfer,
97 const struct pipe_box *box);
98
99 void u_transfer_unmap_vtbl( struct pipe_context *rm_ctx,
100 struct pipe_transfer *transfer );
101
102 #ifdef __cplusplus
103 } // extern "C" {
104 #endif
105
106 #endif