1/**************************************************************************** 2 * Copyright (C) 2014-2015 Intel Corporation. All Rights Reserved. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 * IN THE SOFTWARE. 22 * 23 * @file jit_api.h 24 * 25 * @brief Platform independent JIT interface 26 * 27 * Notes: 28 * 29 ******************************************************************************/ 30#pragma once 31#include "common/os.h" 32#include "core/utils.h" 33 34#include "fetch_jit.h" 35#include "streamout_jit.h" 36#include "blend_jit.h" 37 38#include <stdlib.h> 39 40#if defined(_WIN32) 41#define EXCEPTION_PRINT_STACK(ret) ret 42#endif // _WIN32 43 44#if defined(_WIN32) 45#define JITCALL __stdcall 46#else 47#define JITCALL 48#endif 49 50 51struct ShaderInfo; 52 53////////////////////////////////////////////////////////////////////////// 54/// Jit Compile Info Input 55////////////////////////////////////////////////////////////////////////// 56struct JIT_COMPILE_INPUT 57{ 58 SWR_SHADER_TYPE type; 59 uint32_t crc; 60 61 const void* pIR; ///< Pointer to LLVM IR text. 62 size_t irLength; 63 64 bool enableJitSampler; 65 66}; 67 68 69extern "C" { 70 71////////////////////////////////////////////////////////////////////////// 72/// @brief Create JIT context. 73HANDLE JITCALL JitCreateContext(uint32_t targetSimdWidth, const char* arch, const char* core); 74 75////////////////////////////////////////////////////////////////////////// 76/// @brief Destroy JIT context. 77void JITCALL JitDestroyContext(HANDLE hJitContext); 78 79////////////////////////////////////////////////////////////////////////// 80/// @brief JIT compile shader. 81/// @param hJitContext - Jit Context 82/// @param input - Input containing LLVM IR and other information 83/// @param output - Output containing information about JIT shader 84ShaderInfo* JITCALL JitCompileShader(HANDLE hJitContext, const JIT_COMPILE_INPUT& input); 85 86////////////////////////////////////////////////////////////////////////// 87/// @brief JIT destroy shader. 88/// @param hJitContext - Jit Context 89/// @param pShaderInfo - pointer to shader object. 90void JITCALL JitDestroyShader(HANDLE hJitContext, ShaderInfo*& pShaderInfo); 91 92////////////////////////////////////////////////////////////////////////// 93/// @brief JIT compiles fetch shader 94/// @param hJitContext - Jit Context 95/// @param state - Fetch state to build function from 96PFN_FETCH_FUNC JITCALL JitCompileFetch(HANDLE hJitContext, const FETCH_COMPILE_STATE& state); 97 98////////////////////////////////////////////////////////////////////////// 99/// @brief JIT compiles streamout shader 100/// @param hJitContext - Jit Context 101/// @param state - SO state to build function from 102PFN_SO_FUNC JITCALL JitCompileStreamout(HANDLE hJitContext, const STREAMOUT_COMPILE_STATE& state); 103 104////////////////////////////////////////////////////////////////////////// 105/// @brief JIT compiles blend shader 106/// @param hJitContext - Jit Context 107/// @param state - blend state to build function from 108PFN_BLEND_JIT_FUNC JITCALL JitCompileBlend(HANDLE hJitContext, const BLEND_COMPILE_STATE& state); 109 110} 111 112