From 12f7237e4060388494c549623f4a640327b7ca08 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 14 Nov 2023 17:46:05 -0800 Subject: Add GLSL Compatibility. (#3321) * Parse glsl buffer blocks to GLSLInterfaceBlockDecl * Parse glsl local size layout declarations * Parse (and ignore) glsl version directives * spelling * Better l-value interpretation for glsl interface blocks * Better l-value interpretation for glsl interface blocks * Add compile flag for enabling glsl * Parse and ignore precision modifiers. * Automatically import `glsl` module for compatiblity. * Complete vector and matrix types for glsl * Remove generated file from repo * Bump .gitignore * do not mark out globals as params * Synthesize entrypoint layout from global inout vars. * update test result. * Allow HLSL semantic on global variables. * Fix. * Fix test. * Fix win32 compile error. * Add more builtin input/output and texture intrinsics. * Add struct/array constructor syntax. * Skip `#extension` lines. * overide operator * for matrix/vector multiplication. * Add `matrixCompMult`. * Parse modifiers in for loop init var declr. * Add more glsl intrinsics, add stage into to var layout. * Allow `int[3] x` syntax. * Fix array type syntax. --------- Co-authored-by: Ellie Hermaszewska Co-authored-by: Yong He --- source/slang/slang-preprocessor.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'source/slang/slang-preprocessor.cpp') diff --git a/source/slang/slang-preprocessor.cpp b/source/slang/slang-preprocessor.cpp index aefbf7619..02f46103b 100644 --- a/source/slang/slang-preprocessor.cpp +++ b/source/slang/slang-preprocessor.cpp @@ -3635,6 +3635,29 @@ static void HandlePragmaDirective(PreprocessorDirectiveContext* context) (subDirective->callback)(context, subDirectiveToken); } +static void HandleExtensionDirective(PreprocessorDirectiveContext* context) +{ + SkipToEndOfLine(context); +} + +static void HandleVersionDirective(PreprocessorDirectiveContext* context) +{ + [[maybe_unused]] + int version; + switch(PeekTokenType(context)) + { + case TokenType::IntegerLiteral: + version = stringToInt(AdvanceToken(context).getContent()); + break; + default: + GetSink(context)->diagnose(GetDirectiveLoc(context), Diagnostics::expectedIntegralVersionNumber); + break; + } + + SkipToEndOfLine(context); + // TODO, just skip the version for now +} + // Handle an invalid directive static void HandleInvalidDirective(PreprocessorDirectiveContext* context) { @@ -3689,6 +3712,11 @@ static const PreprocessorDirective kDirectives[] = { "line", &HandleLineDirective, 0 }, { "pragma", &HandlePragmaDirective, 0 }, + // GLSL + { "version", &HandleVersionDirective, 0 }, + { "extension", &HandleExtensionDirective, 0 }, + + { nullptr, nullptr, 0 }, }; -- cgit v1.2.3