13#ifndef LUX_GPU_KERNEL_LOADER_H
14#define LUX_GPU_KERNEL_LOADER_H
138 void* device_context,
144 void* device_context,
147 const char* entry_point
161#define LUX_DECLARE_KERNEL(name, lang) \
162 extern const char lux_kernel_##name##_source[]; \
163 extern const size_t lux_kernel_##name##_source_len;
166#define LUX_DEFINE_KERNEL(name, source_str) \
167 const char lux_kernel_##name##_source[] = source_str; \
168 const size_t lux_kernel_##name##_source_len = sizeof(lux_kernel_##name##_source) - 1;
171#define LUX_KERNEL_ENTRY(name, entry, lang) \
172 { #name, entry, lang, lux_kernel_##name##_source, lux_kernel_##name##_source_len, NULL, 0 }
175#define LUX_KERNEL_ENTRY_BINARY(name, entry, lang, bin, bin_len) \
176 { #name, entry, lang, NULL, 0, bin, bin_len }
struct LuxKernelCache LuxKernelCache
const LuxEmbeddedKernel * lux_kernel_registry_find(const LuxKernelRegistry *registry, const char *name)
LuxKernel * lux_kernel_load_binary(void *device_context, const void *binary, size_t binary_len, const char *entry_point)
void lux_kernel_cache_clear(LuxKernelCache *cache)
void lux_kernel_cache_put(LuxKernelCache *cache, const LuxKernelVariant *variant, LuxKernel *kernel)
void lux_kernel_cache_stats(LuxKernelCache *cache, size_t *count, size_t *memory_bytes)
LuxKernelCache * lux_kernel_cache_create(void)
LuxKernel * lux_kernel_cache_get(LuxKernelCache *cache, const LuxKernelVariant *variant)
LuxKernel * lux_kernel_compile(void *device_context, const LuxKernelSource *source)
struct LuxKernel LuxKernel
void lux_kernel_cache_destroy(LuxKernelCache *cache)
void lux_kernel_destroy(LuxKernel *kernel)
const char * lux_kernel_entry_point(LuxKernel *kernel)
@ LUX_KERNEL_SOURCE_EMBEDDED
@ LUX_KERNEL_SOURCE_BINARY
const LuxKernelRegistry * lux_kernel_registry_get(const char *backend)
const LuxEmbeddedKernel * kernels
const char * compile_opts