summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/util/u_staging.h
diff options
context:
space:
mode:
authorLuca Barbieri <luca@luca-barbieri.com>2010-08-03 21:20:53 +0200
committerLuca Barbieri <luca@luca-barbieri.com>2010-08-11 13:03:00 +0200
commitb85c71d4e1e4ed788be834dff5b7b3c0cd0402ac (patch)
tree2e4cb857e9df4f0811dfc1d8c3022451f006c50d /src/gallium/auxiliary/util/u_staging.h
parent6f3c4819ecf397cf9efee0213e628e15c1bc704d (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.h29
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