diff options
author | Luca Barbieri <luca@luca-barbieri.com> | 2010-08-03 21:20:53 +0200 |
---|---|---|
committer | Luca Barbieri <luca@luca-barbieri.com> | 2010-08-11 13:03:00 +0200 |
commit | b85c71d4e1e4ed788be834dff5b7b3c0cd0402ac (patch) | |
tree | 2e4cb857e9df4f0811dfc1d8c3022451f006c50d /src/gallium/auxiliary/util/u_staging.h | |
parent | 6f3c4819ecf397cf9efee0213e628e15c1bc704d (diff) |
auxiliary: support for transfers using staging resources
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.
Diffstat (limited to 'src/gallium/auxiliary/util/u_staging.h')
-rw-r--r-- | src/gallium/auxiliary/util/u_staging.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/util/u_staging.h b/src/gallium/auxiliary/util/u_staging.h new file mode 100644 index 0000000000..f5976dadb1 --- /dev/null +++ b/src/gallium/auxiliary/util/u_staging.h @@ -0,0 +1,29 @@ +/* Implement transfers using staging resources like in DirectX 10/11 */ + +#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 should be a good value to pass for direct */ +/* staging resource is currently created with PIPE_USAGE_DYNAMIC */ +struct util_staging_transfer * +util_staging_transfer_new(struct pipe_context *pipe, + struct pipe_resource *pt, + struct pipe_subresource sr, + unsigned usage, + const struct pipe_box *box, + bool direct); + +void +util_staging_transfer_destroy(struct pipe_context *pipe, struct pipe_transfer *ptx); + +#endif |