1 /*---------------------------------------------------------------------------* 2 3 Copyright (C) Nintendo. All rights reserved. 4 5 These coded instructions, statements, and computer programs contain 6 proprietary information of Nintendo of America Inc. and/or Nintendo 7 Company Ltd., and are protected by Federal copyright law. They may 8 not be disclosed to third parties or copied or duplicated in any form, 9 in whole or in part, without the prior written consent of Nintendo. 10 11 *---------------------------------------------------------------------------*/ 12 13 #pragma once 14 #ifndef __GSH_COMPILE_H__ 15 #define __GSH_COMPILE_H__ 16 17 #ifdef __cplusplus 18 extern "C" 19 { 20 #endif // __cplusplus 21 22 #include "shaderUtils.h" 23 #include "windows/gx2.h" 24 #include "cafe/gfd.h" 25 #include "gfdFile.h" 26 27 #ifdef _DEBUG 28 #define _CRTDBG_MAP_ALLOC 29 #include <stdlib.h> 30 #include <crtdbg.h> 31 #endif 32 33 // Input DLLs 34 #ifdef _DEBUG 35 #define LIB_DLL_SHADERUTILS TEXT("shaderUtilsD.dll") 36 #define LIB_DLL_GFD TEXT("gfdD.dll") 37 #else 38 #define LIB_DLL_SHADERUTILS TEXT("shaderUtils.dll") 39 #define LIB_DLL_GFD TEXT("gfd.dll") 40 #endif 41 42 // Functions 43 typedef GSH2Handle (*PGSH2Initialize)(GSH2Setup * pSetup); 44 typedef GX2Boolean (*PGSH2Destroy)(GSH2Handle h); 45 typedef GX2Boolean (*PGSH2CompileProgram)(GSH2Handle h, GSH2CompileSetup *pSetup, GSH2CompileOutput* pOutput); 46 typedef GX2Boolean (*PGSH2CompileProgram3)(GSH2Handle h, GSH2CompileSetup3 *pSetup, GSH2CompileOutput3* pOutput); 47 typedef GX2Boolean (*PGSH2DestroyGX2Program3)(GSH2Handle h, GSH2GX2Program3* pGx2Program); 48 49 typedef u32 (*PGSH2CalcFetchShaderSizeEx)(u32 num_attrib, GX2FetchShaderType fsType, GX2TessellationMode tessMode); 50 typedef void (*PGSH2InitFetchShaderEx)(GX2FetchShader* fs, void* fs_buffer, u32 num, const GX2AttribStream* attribs, GX2FetchShaderType type, GX2TessellationMode tessMode); 51 52 typedef u32 (*PGSH2GetVertexShaderGPRs)(const GX2VertexShader * pShader); 53 typedef u32 (*PGSH2GetGeometryShaderGPRs)(const GX2GeometryShader * pShader); 54 typedef u32 (*PGSH2GetPixelShaderGPRs)(const GX2PixelShader * pShader); 55 56 typedef u32 (*PGSH2GetVertexShaderStackEntries)(const GX2VertexShader * pShader); 57 typedef u32 (*PGSH2GetGeometryShaderStackEntries)(const GX2GeometryShader * pShader); 58 typedef u32 (*PGSH2GetPixelShaderStackEntries)(const GX2PixelShader * pShader); 59 60 typedef GX2Boolean (*PGFDWriteFileShader)(char* pFilename, GFDGPUVersion gpuVer, GFDEndianSwapMode swapMode, GFDAlignMode alignMode, u32 numShader, GFDShaders *pShaders); 61 typedef GX2Boolean (*PGFDAppendWriteFileShader)(char* pFilename, GFDGPUVersion gpuVer, GFDEndianSwapMode swapMode, GFDAlignMode alignMode, u32 numShader, GFDShaders *pShaders); 62 typedef GX2Boolean (*PGFDWriteFileShaderAsCode)(char* pFilename, GFDEndianSwapMode swapMode, GFDShaders *pShaders); 63 64 typedef GX2Boolean (*PGFDWriteFileShader2)(char* pFilename, GFDGPUVersion gpuVer, GFDEndianSwapMode swapMode, GFDAlignMode alignMode, u32 numShader, GFDShaders2 *pShaders); 65 typedef GX2Boolean (*PGFDAppendWriteFileShader2)(char* pFilename, GFDGPUVersion gpuVer, GFDEndianSwapMode swapMode, GFDAlignMode alignMode, u32 numShader, GFDShaders2 *pShaders); 66 typedef GX2Boolean (*PGFDWriteFileShaderAsCode2)(char* pFilename, GFDEndianSwapMode swapMode, GFDShaders2 *pShaders); 67 typedef GX2Boolean (*PGFDWriteFileShaderAsCodeWithSource)(char* pFilename, GFDEndianSwapMode swapMode, const GFDShaders2 *pShaders, const GFDShadersSrc *pShadersSrc); 68 69 typedef GX2Boolean (*PGSH2PrintBuildTimeStats)(const char *pFilename, GSH2BuildTimeStats *pStats, GX2Boolean bAppend); 70 71 typedef u32 (*PGSH2GetABIVersion)(void); 72 73 typedef struct 74 { 75 PGSH2Initialize Initialize; 76 PGSH2Destroy Destroy; 77 PGSH2CompileProgram3 CompileProgram3; 78 PGSH2DestroyGX2Program3 DestroyGX2Program3; 79 80 PGSH2CalcFetchShaderSizeEx CalcFetchShaderSizeEx; 81 PGSH2InitFetchShaderEx InitFetchShaderEx; 82 83 PGSH2GetVertexShaderGPRs GetVertexShaderGPRs; 84 PGSH2GetGeometryShaderGPRs GetGeometryShaderGPRs; 85 PGSH2GetPixelShaderGPRs GetPixelShaderGPRs; 86 87 PGSH2GetVertexShaderStackEntries GetVertexShaderStackEntries; 88 PGSH2GetGeometryShaderStackEntries GetGeometryShaderStackEntries; 89 PGSH2GetPixelShaderStackEntries GetPixelShaderStackEntries; 90 91 PGSH2GetABIVersion GetABIVersion; 92 PGSH2PrintBuildTimeStats PrintBuildTimeStats; 93 94 } GSH2Func; 95 96 typedef struct 97 { 98 PGFDWriteFileShaderAsCode WriteFileShaderAsCode; 99 PGFDWriteFileShader WriteFileShader; 100 PGFDAppendWriteFileShader AppendWriteFileShader; 101 PGFDWriteFileShaderAsCode2 WriteFileShaderAsCode2; 102 PGFDWriteFileShader2 WriteFileShader2; 103 PGFDAppendWriteFileShader2 AppendWriteFileShader2; 104 PGFDWriteFileShaderAsCodeWithSource WriteFileShaderAsCodeWithSource; 105 } GFDFunc; 106 107 // Error codes 108 #define EC_SUCCESS 0 109 #define EC_UNSUPPORTEDGPU 1 110 #define EC_UNSUPPORTEDSHADERTYPE 2 111 #define EC_INPUTFILEERROR 3 112 #define EC_OUTPUTFILEERROR 4 113 #define EC_BADPARAM 5 114 #define EC_COMPILEFAILED 6 115 #define EC_GSH2INITFAILED 7 116 #define EC_LOADINGDLLFAILED 8 117 118 // App config defaults 119 #define DEFAULT_GPU GPU_VERSION_GPU7 120 #define DEFAULT_ENDIANBUGFIX false 121 #define DEFAULT_ALIGNMODE false 122 #define DEFAULT_APPENDMODE false 123 #define DEFAULT_OUTFILENAME "output.gsh" 124 #define DEFAULT_FORCEUNIFORMBLOCK false 125 #define DEFAULT_ASCODEMODE false 126 #define DEFAULT_SHADINGLANGUAGE SHADERLANG_GLSL 127 #define DEFAULT_NOSPARKINFO false 128 129 #define MAX_INPUTFILE_COUNT 64 130 131 // App config 132 typedef struct 133 { 134 char* vs_source; // VS shader source code 135 char* ps_source; // PS shader source code 136 char* gs_source; // GS shader source code 137 138 char* vs_source_filename; // VS shader source code file name 139 char* ps_source_filename; // PS shader source code file name 140 char* gs_source_filename; // GS shader source code file name 141 142 char** so_varyings; // stream out varyings 143 u32 numSOVaryings; // number of stream out varyings in so_varyings 144 145 GSH2GPUVersion gpu; // Target gpu 146 char* pOutFilename; // name of output file 147 GSH2ShaderLang lang; // shader language 148 u32 endianbugfix; // endian bug workaround for the prototype hardware 149 u32 outfilealign; // add alignment padding to output 150 u32 append; // append shaders to existing file 151 u32 forceUniformBlock; // force uniform block usage 152 u32 ascode; // append shaders to existing file 153 u32 dumpShaders; // dump pre/post optimized file 154 u64 optimizeFlags; // what kinds of extra optimization to do (bitmap) 155 u32 noSparkInfo; // suppress Spark debug output 156 157 char* pSparkDir; // override default output dir for Spark file 158 char* cs_source; // compute shader source code 159 char* cs_source_filename; // CS shader source code file name 160 161 u32 istats; // if nonzero, dump shader instruction statistics 162 u32 noArrayLimit; // if nonzero, do not limit number of symbols produced by uniform arrays 163 u32 btstats; // 1 = output build time statistics, 2 = accumulate statistics 164 } ShaderSourceInfo; 165 166 #ifdef __cplusplus 167 } 168 #endif // __cplusplus 169 170 #endif // __GSH_COMPILE_H__ 171 172