Skip to content

Commit 0e7f471

Browse files
Fixed issue with _RETURN_() macro on arm compilers on Android
1 parent d237c90 commit 0e7f471

File tree

1 file changed

+33
-18
lines changed

1 file changed

+33
-18
lines changed

Graphics/HLSL2GLSLConverterLib/src/HLSL2GLSLConverterImpl.cpp

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3940,26 +3940,43 @@ void HLSL2GLSLConverterImpl::ConversionStream::ProcessReturnStatements( TokenLis
39403940
Token->Literal = MacroName;
39413941
//if( x < 0.5 ) _RETURN_ float4(0.0, 0.0, 0.0, 1.0);
39423942
// ^
3943-
3943+
39443944
++Token;
39453945
//if( x < 0.5 ) _RETURN_ float4(0.0, 0.0, 0.0, 1.0);
39463946
// ^
39473947

3948-
m_Tokens.insert( Token, TokenInfo(TokenType::OpenBracket, "("));
3949-
//if( x < 0.5 ) _RETURN_( float4(0.0, 0.0, 0.0, 1.0);
3950-
// ^
3948+
if(Token->Type != TokenType::Semicolon )
3949+
{
3950+
m_Tokens.insert( Token, TokenInfo(TokenType::OpenBracket, "("));
3951+
//if( x < 0.5 ) _RETURN_( float4(0.0, 0.0, 0.0, 1.0);
3952+
// ^
39513953

3952-
while( Token->Type != TokenType::Semicolon )
3954+
while( Token->Type != TokenType::Semicolon )
3955+
++Token;
3956+
VERIFY_PARSER_STATE( Token, Token != m_Tokens.end(), "Unexpected end of file while looking for the \';\'" );
3957+
//if( x < 0.5 ) _RETURN_( float4(0.0, 0.0, 0.0, 1.0);
3958+
// ^
3959+
3960+
// Replace semicolon with ):
3961+
Token->Type = TokenType::ClosingBracket;
3962+
Token->Literal = ")";
3963+
//if( x < 0.5 ) _RETURN_( float4(0.0, 0.0, 0.0, 1.0))
3964+
// ^
3965+
}
3966+
else
3967+
{
3968+
//if( x < 0.5 ) _RETURN_ ;
3969+
// ^
3970+
auto SemicolonToken = Token;
39533971
++Token;
3954-
VERIFY_PARSER_STATE( Token, Token != m_Tokens.end(), "Unexpected end of file while looking for the \';\'" );
3955-
//if( x < 0.5 ) _RETURN_( float4(0.0, 0.0, 0.0, 1.0);
3956-
// ^
3957-
3958-
// Replace semicolon with ):
3959-
Token->Type = TokenType::ClosingBracket;
3960-
Token->Literal = ")";
3961-
//if( x < 0.5 ) _RETURN_( float4(0.0, 0.0, 0.0, 1.0))
3962-
// ^
3972+
//if( x < 0.5 ) _RETURN_ ;
3973+
//int a;
3974+
//^
3975+
m_Tokens.erase(SemicolonToken);
3976+
//if( x < 0.5 ) _RETURN_
3977+
//int a;
3978+
//^
3979+
}
39633980

39643981
continue;
39653982
}
@@ -3978,9 +3995,7 @@ void HLSL2GLSLConverterImpl::ConversionStream::ProcessReturnStatements( TokenLis
39783995
if(IsVoid)
39793996
{
39803997
// Insert return handler before the closing brace
3981-
String NoArgMacro(MacroName);
3982-
NoArgMacro.append("()");
3983-
m_Tokens.insert(Token, TokenInfo(TokenType::TextBlock, NoArgMacro.c_str(), Token->Delimiter.c_str()));
3998+
m_Tokens.insert(Token, TokenInfo(TokenType::TextBlock, MacroName, Token->Delimiter.c_str()));
39843999
Token->Delimiter = "\n";
39854000
}
39864001
}
@@ -4048,7 +4063,7 @@ void HLSL2GLSLConverterImpl::ConversionStream::ProcessShaderDeclaration( TokenLi
40484063

40494064
std::stringstream ReturnHandlerSS;
40504065
const Char *ReturnMacroName = "_RETURN_";
4051-
ReturnHandlerSS << "#define " << ReturnMacroName << "(" << (bIsVoid ? "" : "_RET_VAL_") << "){\\\n";
4066+
ReturnHandlerSS << "#define " << ReturnMacroName << (bIsVoid ? "" : "(_RET_VAL_)") << "{\\\n";
40524067

40534068
String GlobalVariables, Prologue;
40544069
try

0 commit comments

Comments
 (0)