gallium: unify transfer functions
[mesa.git] / src / gallium / auxiliary / util / u_resource.c
1
2
3 #include "util/u_inlines.h"
4 #include "util/u_transfer.h"
5
6 static INLINE struct u_resource *
7 u_resource( struct pipe_resource *res )
8 {
9 return (struct u_resource *)res;
10 }
11
12 boolean u_resource_get_handle_vtbl(struct pipe_screen *screen,
13 struct pipe_resource *resource,
14 struct winsys_handle *handle)
15 {
16 struct u_resource *ur = u_resource(resource);
17 return ur->vtbl->resource_get_handle(screen, resource, handle);
18 }
19
20 void u_resource_destroy_vtbl(struct pipe_screen *screen,
21 struct pipe_resource *resource)
22 {
23 struct u_resource *ur = u_resource(resource);
24 ur->vtbl->resource_destroy(screen, resource);
25 }
26
27 void *u_transfer_map_vtbl(struct pipe_context *context,
28 struct pipe_resource *resource,
29 unsigned level,
30 unsigned usage,
31 const struct pipe_box *box,
32 struct pipe_transfer **transfer)
33 {
34 struct u_resource *ur = u_resource(resource);
35 return ur->vtbl->transfer_map(context, resource, level, usage, box,
36 transfer);
37 }
38
39 void u_transfer_flush_region_vtbl( struct pipe_context *pipe,
40 struct pipe_transfer *transfer,
41 const struct pipe_box *box)
42 {
43 struct u_resource *ur = u_resource(transfer->resource);
44 ur->vtbl->transfer_flush_region(pipe, transfer, box);
45 }
46
47 void u_transfer_unmap_vtbl( struct pipe_context *pipe,
48 struct pipe_transfer *transfer )
49 {
50 struct u_resource *ur = u_resource(transfer->resource);
51 ur->vtbl->transfer_unmap(pipe, transfer);
52 }
53
54 void u_transfer_inline_write_vtbl( struct pipe_context *pipe,
55 struct pipe_resource *resource,
56 unsigned level,
57 unsigned usage,
58 const struct pipe_box *box,
59 const void *data,
60 unsigned stride,
61 unsigned layer_stride)
62 {
63 struct u_resource *ur = u_resource(resource);
64 ur->vtbl->transfer_inline_write(pipe,
65 resource,
66 level,
67 usage,
68 box,
69 data,
70 stride,
71 layer_stride);
72 }
73
74
75
76