| … | … | @@ -143,6 +143,19 @@ ShaderTypes::ShaderTypes() { |
| 143 | 143 | shader_modes[RSE::SHADER_SPATIAL].functions["fragment"].built_ins["TANGENT"] = ShaderLanguage::TYPE_VEC3; |
| 144 | 144 | shader_modes[RSE::SHADER_SPATIAL].functions["fragment"].built_ins["BINORMAL"] = ShaderLanguage::TYPE_VEC3; |
| 145 | 145 | shader_modes[RSE::SHADER_SPATIAL].functions["fragment"].built_ins["VIEW"] = constt(ShaderLanguage::TYPE_VEC3); |
| 146 | // Ray-tracing-only built-ins. They must be declared HERE as well as renamed in |
| 147 | // SceneShaderRaytracing: renames only translate a name during code generation, |
| 148 | // while ShaderLanguage rejects any identifier missing from this table before |
| 149 | // codegen is ever reached ("Unknown identifier in expression"). |
| 150 | // |
| 151 | // Declared on the shared spatial table, so the rasterizer will also PARSE them |
| 152 | // -- but it has no rename for them, so a shader must keep its uses inside |
| 153 | // #ifdef RT or raster codegen emits an undefined name. Under #ifdef RT the |
| 154 | // rasterizer never sees them at all. |
| 155 | shader_modes[RSE::SHADER_SPATIAL].functions["fragment"].built_ins["PRIMARY_HIT"] = constt(ShaderLanguage::TYPE_BOOL); |
| 156 | shader_modes[RSE::SHADER_SPATIAL].functions["fragment"].built_ins["BOUNCE_INDEX"] = constt(ShaderLanguage::TYPE_UINT); |
| 157 | shader_modes[RSE::SHADER_SPATIAL].functions["fragment"].built_ins["RAY_FOOTPRINT_X"] = constt(ShaderLanguage::TYPE_VEC3); |
| 158 | shader_modes[RSE::SHADER_SPATIAL].functions["fragment"].built_ins["RAY_FOOTPRINT_Y"] = constt(ShaderLanguage::TYPE_VEC3); |
| 146 | 159 | shader_modes[RSE::SHADER_SPATIAL].functions["fragment"].built_ins["NORMAL_MAP"] = ShaderLanguage::TYPE_VEC3; |
| 147 | 160 | shader_modes[RSE::SHADER_SPATIAL].functions["fragment"].built_ins["NORMAL_MAP_DEPTH"] = ShaderLanguage::TYPE_FLOAT; |
| 148 | 161 | shader_modes[RSE::SHADER_SPATIAL].functions["fragment"].built_ins["BENT_NORMAL_MAP"] = ShaderLanguage::TYPE_VEC3; |