| /* |
| * GLSLConversion.h |
| * |
| * Copyright (c) 2015-2021 The Brenwill Workshop Ltd. (http://www.brenwill.com) |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef __GLSLConversion_h_ |
| #define __GLSLConversion_h_ 1 |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif // __cplusplus |
| |
| |
| #include <stdlib.h> |
| |
| |
| /** This file contains convenience functions for converting GLSL to SPIR-V, callable from standard C code. */ |
| |
| |
| /** Enumeration of the pipeline stages for which a shader can be compiled. */ |
| typedef enum { |
| kMVKGLSLConversionShaderStageAuto, |
| kMVKGLSLConversionShaderStageVertex, |
| kMVKGLSLConversionShaderStageTessControl, |
| kMVKGLSLConversionShaderStageTessEval, |
| kMVKGLSLConversionShaderStageGeometry, |
| kMVKGLSLConversionShaderStageFragment, |
| kMVKGLSLConversionShaderStageCompute, |
| } MVKGLSLConversionShaderStage; |
| |
| |
| /** |
| * Convenience function that converts the specified GLSL code to SPIR-V code, |
| * and returns whether the conversion was successful. |
| * |
| * If the pSPIRVCode parameter is not NULL, this function allocates space for the |
| * converted SPIR-V code, and returns a pointer to that SPIR-V code in the location |
| * indicated by this parameter. It is the responsibility of the caller to free() |
| * the memory returned in this parameter. |
| * |
| * If the pSPIRVLength parameter is not NULL, the length of the SPIR-V code (as |
| * returned in the pSPIRVCode parameter) is returned in the value pointed to by |
| * the pSPIRVLength parameter. |
| * |
| * If the pResultLog parameter is not NULL, a pointer to the contents of the converter |
| * results log will be set at the location pointed to by the pResultLog parameter. |
| * It is the responsibility of the caller to free() the memory returned in this parameter. |
| * |
| * The boolean flags indicate whether the original GLSL code and resulting SPIR-V code |
| * should be logged to the converter results log. This can be useful during shader debugging. |
| */ |
| bool mvkConvertGLSLToSPIRV(const char* glslSource, |
| MVKGLSLConversionShaderStage shaderStage, |
| uint32_t** pSPIRVCode, |
| size_t *pSPIRVLength, |
| char** pResultLog, |
| bool shouldLogGLSL, |
| bool shouldLogSPIRV); |
| /** |
| * Convenience function that converts GLSL code in the specified file to SPIR-V code. |
| * The file path should either be absolute or relative to the resource directory. |
| * |
| * If the pSPIRVCode parameter is not NULL, this function allocates space for the |
| * converted SPIR-V code, and returns a pointer to that SPIR-V code in the location |
| * indicated by this parameter. It is the responsibility of the caller to free() |
| * the memory returned in this parameter. |
| * |
| * If the pSPIRVLength parameter is not NULL, the length of the SPIR-V code (as |
| * returned in the pSPIRVCode parameter) is returned in the value pointed to by |
| * the pSPIRVLength parameter. |
| * |
| * If the pResultLog parameter is not NULL, a pointer to the contents of the converter |
| * results log will be set at the location pointed to by the pResultLog parameter. |
| * It is the responsibility of the caller to free() the memory returned in this parameter. |
| * |
| * The boolean flags indicate whether the original GLSL code and resulting SPIR-V code |
| * should be logged to the converter results log. This can be useful during shader debugging. |
| */ |
| bool mvkConvertGLSLFileToSPIRV(const char* glslFilepath, |
| MVKGLSLConversionShaderStage shaderStage, |
| uint32_t** pSPIRVCode, |
| size_t *pSPIRVLength, |
| char** pResultLog, |
| bool shouldLogGLSL, |
| bool shouldLogSPIRV); |
| |
| |
| #ifdef __cplusplus |
| } |
| #endif // __cplusplus |
| |
| #endif |