1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright © Microsoft Corporation 3*61046927SAndroid Build Coastguard Worker * 4*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a 5*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"), 6*61046927SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation 7*61046927SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8*61046927SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the 9*61046927SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions: 10*61046927SAndroid Build Coastguard Worker * 11*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next 12*61046927SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the 13*61046927SAndroid Build Coastguard Worker * Software. 14*61046927SAndroid Build Coastguard Worker * 15*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18*61046927SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20*61046927SAndroid Build Coastguard Worker * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21*61046927SAndroid Build Coastguard Worker * IN THE SOFTWARE. 22*61046927SAndroid Build Coastguard Worker */ 23*61046927SAndroid Build Coastguard Worker 24*61046927SAndroid Build Coastguard Worker #ifndef MESA_CLC_HELPERS_H 25*61046927SAndroid Build Coastguard Worker #define MESA_CLC_HELPERS_H 26*61046927SAndroid Build Coastguard Worker 27*61046927SAndroid Build Coastguard Worker #include "glsl_types.h" 28*61046927SAndroid Build Coastguard Worker 29*61046927SAndroid Build Coastguard Worker #include "clc.h" 30*61046927SAndroid Build Coastguard Worker #include "util/u_string.h" 31*61046927SAndroid Build Coastguard Worker 32*61046927SAndroid Build Coastguard Worker #include <assert.h> 33*61046927SAndroid Build Coastguard Worker #include <stddef.h> 34*61046927SAndroid Build Coastguard Worker #include <stdio.h> 35*61046927SAndroid Build Coastguard Worker #include <stdint.h> 36*61046927SAndroid Build Coastguard Worker 37*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 38*61046927SAndroid Build Coastguard Worker extern "C" { 39*61046927SAndroid Build Coastguard Worker #endif 40*61046927SAndroid Build Coastguard Worker 41*61046927SAndroid Build Coastguard Worker void 42*61046927SAndroid Build Coastguard Worker clc_initialize_llvm(void); 43*61046927SAndroid Build Coastguard Worker 44*61046927SAndroid Build Coastguard Worker bool 45*61046927SAndroid Build Coastguard Worker clc_spirv_get_kernels_info(const struct clc_binary *spvbin, 46*61046927SAndroid Build Coastguard Worker const struct clc_kernel_info **kernels, 47*61046927SAndroid Build Coastguard Worker unsigned *num_kernels, 48*61046927SAndroid Build Coastguard Worker const struct clc_parsed_spec_constant **spec_constants, 49*61046927SAndroid Build Coastguard Worker unsigned *num_spec_constants, 50*61046927SAndroid Build Coastguard Worker const struct clc_logger *logger); 51*61046927SAndroid Build Coastguard Worker 52*61046927SAndroid Build Coastguard Worker void 53*61046927SAndroid Build Coastguard Worker clc_free_kernels_info(const struct clc_kernel_info *kernels, 54*61046927SAndroid Build Coastguard Worker unsigned num_kernels); 55*61046927SAndroid Build Coastguard Worker 56*61046927SAndroid Build Coastguard Worker int 57*61046927SAndroid Build Coastguard Worker clc_c_to_spir(const struct clc_compile_args *args, 58*61046927SAndroid Build Coastguard Worker const struct clc_logger *logger, 59*61046927SAndroid Build Coastguard Worker struct clc_binary *out_spir); 60*61046927SAndroid Build Coastguard Worker 61*61046927SAndroid Build Coastguard Worker int 62*61046927SAndroid Build Coastguard Worker clc_spir_to_spirv(const struct clc_binary *in_spir, 63*61046927SAndroid Build Coastguard Worker const struct clc_logger *logger, 64*61046927SAndroid Build Coastguard Worker struct clc_binary *out_spirv); 65*61046927SAndroid Build Coastguard Worker 66*61046927SAndroid Build Coastguard Worker int 67*61046927SAndroid Build Coastguard Worker clc_c_to_spirv(const struct clc_compile_args *args, 68*61046927SAndroid Build Coastguard Worker const struct clc_logger *logger, 69*61046927SAndroid Build Coastguard Worker struct clc_binary *out_spirv); 70*61046927SAndroid Build Coastguard Worker 71*61046927SAndroid Build Coastguard Worker int 72*61046927SAndroid Build Coastguard Worker clc_link_spirv_binaries(const struct clc_linker_args *args, 73*61046927SAndroid Build Coastguard Worker const struct clc_logger *logger, 74*61046927SAndroid Build Coastguard Worker struct clc_binary *out_spirv); 75*61046927SAndroid Build Coastguard Worker 76*61046927SAndroid Build Coastguard Worker bool 77*61046927SAndroid Build Coastguard Worker clc_validate_spirv(const struct clc_binary *spirv, 78*61046927SAndroid Build Coastguard Worker const struct clc_logger *logger, 79*61046927SAndroid Build Coastguard Worker const struct clc_validator_options *options); 80*61046927SAndroid Build Coastguard Worker 81*61046927SAndroid Build Coastguard Worker int 82*61046927SAndroid Build Coastguard Worker clc_spirv_specialize(const struct clc_binary *in_spirv, 83*61046927SAndroid Build Coastguard Worker const struct clc_parsed_spirv *parsed_data, 84*61046927SAndroid Build Coastguard Worker const struct clc_spirv_specialization_consts *consts, 85*61046927SAndroid Build Coastguard Worker struct clc_binary *out_spirv); 86*61046927SAndroid Build Coastguard Worker 87*61046927SAndroid Build Coastguard Worker void 88*61046927SAndroid Build Coastguard Worker clc_dump_spirv(const struct clc_binary *spvbin, FILE *f); 89*61046927SAndroid Build Coastguard Worker 90*61046927SAndroid Build Coastguard Worker void 91*61046927SAndroid Build Coastguard Worker clc_free_spir_binary(struct clc_binary *spir); 92*61046927SAndroid Build Coastguard Worker 93*61046927SAndroid Build Coastguard Worker void 94*61046927SAndroid Build Coastguard Worker clc_free_spirv_binary(struct clc_binary *spvbin); 95*61046927SAndroid Build Coastguard Worker 96*61046927SAndroid Build Coastguard Worker #define clc_log(logger, level, fmt, ...) do { \ 97*61046927SAndroid Build Coastguard Worker if (!logger || !logger->level) break; \ 98*61046927SAndroid Build Coastguard Worker char *_msg = NULL; \ 99*61046927SAndroid Build Coastguard Worker int r = asprintf(&_msg, fmt, ##__VA_ARGS__); \ 100*61046927SAndroid Build Coastguard Worker if (r < 0) break; \ 101*61046927SAndroid Build Coastguard Worker assert(_msg); \ 102*61046927SAndroid Build Coastguard Worker logger->level(logger->priv, _msg); \ 103*61046927SAndroid Build Coastguard Worker free(_msg); \ 104*61046927SAndroid Build Coastguard Worker } while (0) 105*61046927SAndroid Build Coastguard Worker 106*61046927SAndroid Build Coastguard Worker #define clc_error(logger, fmt, ...) clc_log(logger, error, fmt, ##__VA_ARGS__) 107*61046927SAndroid Build Coastguard Worker #define clc_warning(logger, fmt, ...) clc_log(logger, warning, fmt, ##__VA_ARGS__) 108*61046927SAndroid Build Coastguard Worker 109*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 110*61046927SAndroid Build Coastguard Worker } 111*61046927SAndroid Build Coastguard Worker #endif 112*61046927SAndroid Build Coastguard Worker 113*61046927SAndroid Build Coastguard Worker #endif /* MESA_CLC_HELPERS_H */ 114