summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/util/u_staging.h
blob: 3a9da9b40172a61c466400f820f23d88c346f88a (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
/* Direct3D 10/11 has no concept of transfers. Applications instead
 * create resources with a STAGING or DYNAMIC usage, copy between them
 * and the real resource and use Map to map the STAGING/DYNAMIC resource.
 *
 * This util module allows to implement Gallium drivers as a Direct3D
 * driver would be implemented: transfers allocate a resource with
 * PIPE_USAGE_STAGING, and copy the data between it and the real resource
 * with resource_copy_region.
 */

#ifndef U_STAGING_H
#define U_STAGING_H

#include "pipe/p_state.h"

struct util_staging_transfer {
   struct pipe_transfer base;

   /* if direct, same as base.resource, otherwise the temporary staging resource */
   struct pipe_resource *staging_resource;
};

/* user must be stride, slice_stride and offset */
/* pt->usage == PIPE_USAGE_DYNAMIC || pt->usage == PIPE_USAGE_STAGING should be a good value to pass for direct */
/* staging resource is currently created with PIPE_USAGE_STAGING */
struct util_staging_transfer *
util_staging_transfer_init(struct pipe_context *pipe,
           struct pipe_resource *pt,
           struct pipe_subresource sr,
           unsigned usage,
           const struct pipe_box *box,
           bool direct, struct util_staging_transfer *tx);

void
util_staging_transfer_destroy(struct pipe_context *pipe, struct pipe_transfer *ptx);

#endif