1 /*---------------------------------------------------------------------------* 2 3 Copyright 2010-2011 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 u32 (*PGSH2GetABIVersion)(void); 70 71 typedef struct 72 { 73 PGSH2Initialize Initialize; 74 PGSH2Destroy Destroy; 75 PGSH2CompileProgram3 CompileProgram3; 76 PGSH2DestroyGX2Program3 DestroyGX2Program3; 77 78 PGSH2CalcFetchShaderSizeEx CalcFetchShaderSizeEx; 79 PGSH2InitFetchShaderEx InitFetchShaderEx; 80 81 PGSH2GetVertexShaderGPRs GetVertexShaderGPRs; 82 PGSH2GetGeometryShaderGPRs GetGeometryShaderGPRs; 83 PGSH2GetPixelShaderGPRs GetPixelShaderGPRs; 84 85 PGSH2GetVertexShaderStackEntries GetVertexShaderStackEntries; 86 PGSH2GetGeometryShaderStackEntries GetGeometryShaderStackEntries; 87 PGSH2GetPixelShaderStackEntries GetPixelShaderStackEntries; 88 89 PGSH2GetABIVersion GetABIVersion; 90 } GSH2Func; 91 92 typedef struct 93 { 94 PGFDWriteFileShaderAsCode WriteFileShaderAsCode; 95 PGFDWriteFileShader WriteFileShader; 96 PGFDAppendWriteFileShader AppendWriteFileShader; 97 PGFDWriteFileShaderAsCode2 WriteFileShaderAsCode2; 98 PGFDWriteFileShader2 WriteFileShader2; 99 PGFDAppendWriteFileShader2 AppendWriteFileShader2; 100 PGFDWriteFileShaderAsCodeWithSource WriteFileShaderAsCodeWithSource; 101 } GFDFunc; 102 103 // Error codes 104 #define EC_SUCCESS 0 105 #define EC_UNSUPPORTEDGPU 1 106 #define EC_UNSUPPORTEDSHADERTYPE 2 107 #define EC_INPUTFILEERROR 3 108 #define EC_OUTPUTFILEERROR 4 109 #define EC_BADPARAM 5 110 #define EC_COMPILEFAILED 6 111 #define EC_GSH2INITFAILED 7 112 #define EC_LOADINGDLLFAILED 8 113 114 // App config defaults 115 #define DEFAULT_GPU GPU_VERSION_GPU7 116 #define DEFAULT_ENDIANBUGFIX false 117 #define DEFAULT_ALIGNMODE false 118 #define DEFAULT_APPENDMODE false 119 #define DEFAULT_OUTFILENAME "output.gsh" 120 #define DEFAULT_FORCEUNIFORMBLOCK false 121 #define DEFAULT_ASCODEMODE false 122 #define DEFAULT_SHADINGLANGUAGE SHADERLANG_GLSL 123 #define DEFAULT_NOSPARKINFO false 124 125 #define MAX_INPUTFILE_COUNT 64 126 127 // App config 128 typedef struct 129 { 130 char* vs_source; // VS shader source code 131 char* ps_source; // PS shader source code 132 char* gs_source; // GS shader source code 133 134 char* vs_source_filename; // VS shader source code file name 135 char* ps_source_filename; // PS shader source code file name 136 char* gs_source_filename; // GS shader source code file name 137 138 char** so_varyings; // stream out varyings 139 u32 numSOVaryings; // number of stream out varyings in so_varyings 140 141 GSH2GPUVersion gpu; // Target gpu 142 char* pOutFilename; // name of output file 143 GSH2ShaderLang lang; // shader language 144 u32 endianbugfix; // endian bug workaround for the prototype hardware 145 u32 outfilealign; // add alignment padding to output 146 u32 append; // append shaders to existing file 147 u32 forceUniformBlock; // force uniform block usage 148 u32 ascode; // append shaders to existing file 149 u32 dumpShaders; // dump pre/post optimized file 150 u64 optimizeFlags; // what kinds of extra optimization to do (bitmap) 151 u32 noSparkInfo; // suppress Spark debug output 152 153 char* pSparkDir; // override default output dir for Spark file 154 char* cs_source; // compute shader source code 155 char* cs_source_filename; // CS shader source code file name 156 157 u32 istats; // if nonzero, dump shader instruction statistics 158 u32 noArrayLimit; // if nonzero, do not limit number of symbols produced by uniform arrays 159 } ShaderSourceInfo; 160 161 #ifdef __cplusplus 162 } 163 #endif // __cplusplus 164 165 #endif // __GSH_COMPILE_H__ 166 167