diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index b0f60c1caed3666ac087fc4876cc01f3cf95318f..6b0ce5b7e9f0114530c0fea86cbeac12ef828b96 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -153,7 +153,7 @@ inline TTypeList* NewPoolTTypeList() } // -// TODO: TArraySizes memory: This could be replaced by something smaller. +// TODO: memory: TArraySizes can be replaced by something smaller. // Almost all arrays could be handled by two sizes each fitting // in 16 bits, needing a real vector only in the cases where there // are more than 3 sizes or a size needing more than 16 bits. diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index e5c77378c436936c42df02bedf4502528c71c095..72acc5ec83d4bab441bad7213e9fbe90715155b8 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -1064,12 +1064,12 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, TString& typeName, int versi builtInStrings[EShLangFragment].push_back(s); builtInStrings[EShLangVertex].push_back(s); - // TODO: Functionality: version 420 imaging functions + // TODO: 4.2 Functionality: imaging functions } void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int version, EProfile profile) { - // TODO: Functionality: version 420 imaging functions + // TODO: 4.2 Functionality: imaging functions } void TBuiltIns::addSamplingFunctions(TSampler sampler, TString& typeName, int version, EProfile profile) @@ -1462,7 +1462,7 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb case EShLangTessControl: case EShLangTessEvaluation: case EShLangGeometry: - // TODO: support these stages + // TODO: desktop functionality: support new stages default: assert(false && "Language not supported"); diff --git a/glslang/MachineIndependent/IntermTraverse.cpp b/glslang/MachineIndependent/IntermTraverse.cpp index 9b21538829c6c9637c04bf3e43c1b783c1045687..6c4adeb5bb535138a9b9799763cdaf5ed816c169 100644 --- a/glslang/MachineIndependent/IntermTraverse.cpp +++ b/glslang/MachineIndependent/IntermTraverse.cpp @@ -55,7 +55,7 @@ // void TIntermMethod::traverse(TIntermTraverser* it) { - // TODO: current tree should always resolve all methods as constants + // TODO: functionality: current tree should always resolve all methods as constants // 4.3 will leave some length methods as methods } diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 5e6bb03f4e0c044a7906ae56e97f29caf5c31efa..fe4d3a9a7fdeac0e2171578e643b726ac013e5f0 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -1268,7 +1268,7 @@ void TIntermTyped::propagatePrecision(TPrecisionQualifier newPrecision) } } - // TODO: propagate precision for + // TODO: functionality: propagate precision for // comma operator: just through the last operand // ":?" and ",": where is this triggered? // built-in function calls: how much to propagate to arguments? diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index c4078796425f2dcce698cdce739d49e161b9ef9a..737845387742af4fe416aaf48f65ed1339b3c4e4 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -64,7 +64,7 @@ TParseContext::TParseContext(TSymbolTable& symt, TIntermediate& interm, int v, E defaultPrecision[EbtInt] = EpqMedium; defaultPrecision[EbtUint] = EpqMedium; defaultPrecision[EbtSampler] = EpqLow; - // TODO: give error when using float in frag shader without default precision + // TODO: semantics: give error when using float in frag shader without default precision break; default: error(1, "INTERNAL ERROR", "unexpected language", ""); @@ -457,7 +457,7 @@ bool TParseContext::reservedErrorCheck(int line, const TString& identifier) if (identifier.find("__") != TString::npos) { //error(line, "Two consecutive underscores are reserved for future use.", identifier.c_str(), "", ""); //return true; - // TODO: make this an error + // TODO: semantics: make this an error infoSink.info.message(EPrefixWarning, "Two consecutive underscores are reserved for future use.", line); return false; } @@ -1151,9 +1151,9 @@ void TParseContext::setLayoutQualifier(int line, TPublicType& publicType, TStrin else error(line, "there is no such layout identifier taking an assigned value", id.c_str(), ""); - // TODO: error check: make sure locations are non-overlapping across the whole stage - // TODO: error check: if more than one fragment output, all must have a location - // TODO: error check: output arrays can only be indexed with a constant (es 300) + // TODO: semantics: error check: make sure locations are non-overlapping across the whole stage + // TODO: semantics: error check: if more than one fragment output, all must have a location + // TODO: semantics: error check: output arrays can only be indexed with a constant (es 300) } // Merge any layout qualifier information from src into dst, leaving everything else in dst alone @@ -1574,6 +1574,12 @@ void TParseContext::addBlock(int line, TPublicType& publicType, const TString& b } } +// +// Take the sequence of statements that has been built up since the last case/default, +// put it on the list of top-level nodes for the current (inner-most) switch statement, +// and follow that by the case/default we are on now. (See switch topology comment on +// TIntermSwitch.) +// void TParseContext::wrapupSwitchSubsequence(TIntermAggregate* statements, TIntermNode* branchNode) { TIntermSequence* switchSequence = switchSequenceStack.back(); @@ -1590,6 +1596,10 @@ void TParseContext::wrapupSwitchSubsequence(TIntermAggregate* statements, TInter switchSequence->push_back(branchNode); } +// +// Turn the top-level node sequence built up of wrapupSwitchSubsequence9) +// into a switch node. +// TIntermNode* TParseContext::addSwitch(int line, TIntermTyped* expression, TIntermAggregate* lastStatements) { profileRequires(line, EEsProfile, 300, 0, "switch statements"); diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index fb891729857bf3cb025f1f2a557f7d60b8c07740..8df3352f1c9b22c38550f2c61585bc32692cdef2 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -81,7 +81,7 @@ const int VersionCount = 12; // Each has a different set of built-ins, and we want to preserve that from // compile to compile. // -// TODO: thread safety: ensure the built-in symbol table levels are reado only. +// TODO: quality: thread safety: ensure the built-in symbol table levels are reado only. TSymbolTable* SharedSymbolTables[VersionCount][EProfileCount][EShLangCount] = {}; TPoolAllocator* PerProcessGPA = 0; @@ -278,7 +278,7 @@ void ScanVersion(const char* const shaderStrings[], int numStrings, int& version const char* s = &shaderStrings[0][0]; - // TODO: ES error check: #version must be on first line + // TODO: semantics: ES error check: #version must be on first line while (ConsumeWhitespaceComment(s)) ; @@ -390,7 +390,7 @@ int ShInitialize() if (! InitProcess()) return 0; - // TODO: Thread safety: + // TODO: Quality: Thread safety: // This method should be called once per process. If it's called by multiple threads, then // we need to have thread synchronization code around the initialization of per process // global pool allocator diff --git a/glslang/MachineIndependent/glslang.l b/glslang/MachineIndependent/glslang.l index bcb579bd94ca73bc664659b15315b567860308ef..862bad540d91daa02ed78018f79f7581deae1f87 100644 --- a/glslang/MachineIndependent/glslang.l +++ b/glslang/MachineIndependent/glslang.l @@ -59,9 +59,6 @@ U [uU] F [fF] LF [lL][fF] -/* TODO: double literals, which will likely require pre-processor rework */ -/* TODO: unsigned int literals, which will likely require pre-processor rework */ - %option nounput %{ #include <stdio.h> @@ -107,10 +104,10 @@ int yy_input(char* buf, int max_size); %% <*>"//"[^\n]*"\n" { /* CPP should have taken care of this */ }; -"attribute" { pyylval->lex.line = yylineno; return(ATTRIBUTE); } // TODO ES 30 reserved +"attribute" { pyylval->lex.line = yylineno; return(ATTRIBUTE); } // TODO: semantics: ES 30 reserved "const" { pyylval->lex.line = yylineno; return(CONST); } "uniform" { pyylval->lex.line = yylineno; return(UNIFORM); } -"varying" { pyylval->lex.line = yylineno; return(VARYING); } // TODO ES 30 reserved +"varying" { pyylval->lex.line = yylineno; return(VARYING); } // TODO: semantics: ES 30 reserved "buffer" { pyylval->lex.line = yylineno; return(BUFFER); } "shared" { pyylval->lex.line = yylineno; return(SHARED); } diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index 4a7f950e00ae23cf5286c46589f9156c5975ecdf..d4e85c7b583e88c5a6bf83fb5725fa5d33c26912 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -378,7 +378,7 @@ postfix_expression // we later see the function calling syntax. Save away the name for now. // - // TODO: if next token is not "(", then this is an error + // TODO: semantics: if next token is not "(", then this is an error if (*$3.string == "length") { parseContext.profileRequires($3.line, ENoProfile, 120, "GL_3DL_array_objects", ".length"); @@ -505,7 +505,7 @@ function_call TFunction* fnCall = $1.function; TOperator op = fnCall->getBuiltInOp(); if (op == EOpArrayLength) { - // TODO: check for no arguments to .length() + // TODO: semantics: check for no arguments to .length() int length; if ($1.intermNode->getAsTyped() == 0 || ! $1.intermNode->getAsTyped()->getType().isArray() || $1.intermNode->getAsTyped()->getType().getArraySize() == 0) { parseContext.error($1.line, "", fnCall->getName().c_str(), "array must be declared with a size before using this method"); @@ -596,7 +596,7 @@ function_call } ; -// TODO: can we eliminate function_call_or_method and function_call_generic? +// TODO: clean up: can we eliminate function_call_or_method and function_call_generic? function_call_or_method : function_call_generic { $$ = $1; @@ -1182,7 +1182,7 @@ constant_expression declaration : function_prototype SEMICOLON { $$ = 0; - // TODO: subroutines: make the identifier a user type for this signature + // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } | init_declarator_list SEMICOLON { if ($1.intermAggregate) @@ -1795,7 +1795,7 @@ storage_qualifier if (parseContext.globalErrorCheck($1.line, parseContext.symbolTable.atGlobalLevel(), "buffer")) parseContext.recover(); $$.init($1.line); - $$.qualifier.storage = EvqUniform; // TODO: functionality: implement BUFFER + $$.qualifier.storage = EvqUniform; // TODO: 4.0 functionality: implement BUFFER } | SHARED { $$.init($1.line); @@ -1832,7 +1832,7 @@ storage_qualifier parseContext.recover(); $$.init($1.line); $$.qualifier.storage = EvqUniform; - // TODO: subroutine semantics + // TODO: 4.0 semantics: subroutines // 1) make sure each identifier is a type declared earlier with SUBROUTINE // 2) save all of the identifiers for future comparison with the declared function } @@ -1840,10 +1840,9 @@ storage_qualifier type_name_list : TYPE_NAME { - // TODO: add subroutine type to list + // TODO: 4.0 functionality: subroutine type to list } | type_name_list COMMA TYPE_NAME { - // TODO: add subroutine type to list } ; @@ -2129,7 +2128,7 @@ type_specifier_nonarray $$.setMatrix(4, 4); } | ATOMIC_UINT { - // TODO: add type + // TODO: 4.2 functionality: add type $$.init($1.line, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtInt; } @@ -2678,7 +2677,7 @@ initializer_list $$ = $1; } | initializer_list COMMA initializer { - // TODO: implement the list + // TODO: 4.2 functionality: implement the initializer list $$ = $3; } ;