Halide
HalideRuntimeD3D12Compute.h
Go to the documentation of this file.
1 #ifndef HALIDE_HALIDERUNTIMED3D12COMPUTE_H
2 #define HALIDE_HALIDERUNTIMED3D12COMPUTE_H
3 
4 // Don't include HalideRuntime.h if the contents of it were already pasted into a generated header above this one
5 #ifndef HALIDE_HALIDERUNTIME_H
6 
7 #include "HalideRuntime.h"
8 
9 #endif
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 /** \file
16  * Routines specific to the Halide Direct3D 12 Compute runtime.
17  */
18 
20 
21 /** These are forward declared here to allow clients to override the
22  * Halide Direct3D 12 Compute runtime. Do not call them. */
23 // @{
24 extern int halide_d3d12compute_initialize_kernels(void *user_context, void **state_ptr,
25  const char *src, int size);
26 
27 extern int halide_d3d12compute_run(void *user_context,
28  void *state_ptr,
29  const char *entry_name,
30  int blocksX, int blocksY, int blocksZ,
31  int threadsX, int threadsY, int threadsZ,
32  int shared_mem_bytes,
33  size_t arg_sizes[],
34  void *args[],
35  int8_t arg_is_buffer[],
36  int num_attributes,
37  float *vertex_buffer,
38  int num_coords_dim0,
39  int num_coords_dim1);
40 // @}
41 
42 /** Set the underlying ID3D12Resource for a halide_buffer_t. The memory backing
43  * the resource should be managed by the caller (via a default/device heap) and
44  * must be large enough to cover the extent of the halide_buffer_t. The device
45  * field of the halide_buffer_t must be NULL when this routine is called. This
46  * call can fail due to running out of memory or if an invalid D3D12 resource is
47  * passed. The device and host dirty bits are left unmodified. */
48 extern int halide_d3d12compute_wrap_buffer(void *user_context, struct halide_buffer_t *buf, uint64_t d3d12_resource);
49 
50 /** Disconnect a halide_buffer_t from the ID3D12Resource it was previously
51  * wrapped around. Should only be called for a halide_buffer_t that
52  * halide_d3d12compute_wrap_buffer was previously called on. Frees any
53  * storage associated with the binding of the halide_buffer_t and the
54  * buffer, but does not free the ID3D12Resource. The dev field of the
55  * halide_buffer_t will be NULL on return.
56  */
58 
59 /** Return the underlying ID3D12Resource for a halide_buffer_t. This resource
60  * must be valid on an D3D12 device, unless halide_buffer_t has no associated
61  * resource. If there is no device memory (device field is NULL), returns 0.
62  */
63 extern uintptr_t halide_d3d12compute_get_buffer(void *user_context, struct halide_buffer_t *buf);
64 
65 struct halide_d3d12compute_device;
66 struct halide_d3d12compute_command_queue;
67 
68 /** This prototype is exported as applications will typically need to
69  * replace it to get Halide filters to execute on the same device and
70  * command queue used for other purposes. The halide_d3d12compute_device is an
71  * ID3D12Device and halide_d3d12compute_command_queue is an ID3D12CommandQueue.
72  * No reference counting is done by Halide on these objects. They must remain
73  * valid until all off the following are true:
74  * - A balancing halide_d3d12compute_release_context has occurred for each
75  * halide_d3d12compute_acquire_context which returned the device/queue
76  * - All Halide filters using the context information have completed
77  * - All halide_buffer_t objects on the device have had
78  * halide_device_free called or have been detached via
79  * halide_d3d12compute_detach_buffer.
80  * - halide_device_release has been called on the interface returned from
81  * halide_d3d12compute_device_interface(). (This releases the programs on the context.)
82  */
83 extern int halide_d3d12compute_acquire_context(void *user_context, struct halide_d3d12compute_device **device_ret,
84  struct halide_d3d12compute_command_queue **queue_ret, bool create);
85 
86 /** This call balances each successfull halide_d3d12compute_acquire_context call.
87  * If halide_d3d12compute_acquire_context is replaced, this routine must be replaced
88  * as well.
89  */
91 
92 #ifdef __cplusplus
93 } // End extern "C"
94 #endif
95 
96 #endif // HALIDE_HALIDERUNTIMED3D12COMPUTE_H
int8_t
signed __INT8_TYPE__ int8_t
Definition: runtime_internal.h:24
halide_d3d12compute_detach_buffer
int halide_d3d12compute_detach_buffer(void *user_context, struct halide_buffer_t *buf)
Disconnect a halide_buffer_t from the ID3D12Resource it was previously wrapped around.
uint64_t
unsigned __INT64_TYPE__ uint64_t
Definition: runtime_internal.h:19
halide_d3d12compute_initialize_kernels
int halide_d3d12compute_initialize_kernels(void *user_context, void **state_ptr, const char *src, int size)
These are forward declared here to allow clients to override the Halide Direct3D 12 Compute runtime.
halide_d3d12compute_get_buffer
uintptr_t halide_d3d12compute_get_buffer(void *user_context, struct halide_buffer_t *buf)
Return the underlying ID3D12Resource for a halide_buffer_t.
halide_d3d12compute_acquire_context
int halide_d3d12compute_acquire_context(void *user_context, struct halide_d3d12compute_device **device_ret, struct halide_d3d12compute_command_queue **queue_ret, bool create)
This prototype is exported as applications will typically need to replace it to get Halide filters to...
HalideRuntime.h
halide_buffer_t
The raw representation of an image passed around by generated Halide code.
Definition: HalideRuntime.h:1404
halide_d3d12compute_run
int halide_d3d12compute_run(void *user_context, void *state_ptr, const char *entry_name, int blocksX, int blocksY, int blocksZ, int threadsX, int threadsY, int threadsZ, int shared_mem_bytes, size_t arg_sizes[], void *args[], int8_t arg_is_buffer[], int num_attributes, float *vertex_buffer, int num_coords_dim0, int num_coords_dim1)
buf
char * buf
Definition: printer.h:32
halide_device_interface_t
Each GPU API provides a halide_device_interface_t struct pointing to the code that manages device all...
Definition: HalideRuntime.h:721
halide_d3d12compute_release_context
int halide_d3d12compute_release_context(void *user_context)
This call balances each successfull halide_d3d12compute_acquire_context call.
user_context
void * user_context
Definition: printer.h:33
halide_d3d12compute_wrap_buffer
int halide_d3d12compute_wrap_buffer(void *user_context, struct halide_buffer_t *buf, uint64_t d3d12_resource)
Set the underlying ID3D12Resource for a halide_buffer_t.
halide_d3d12compute_device_interface
const struct halide_device_interface_t * halide_d3d12compute_device_interface()