spv.debugPrintf.frag
// Module Version 10000
// Generated by (magic number): 80008
-// Id's are bound by 13
+// Id's are bound by 17
Capability Shader
Extension "SPV_KHR_non_semantic_info"
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
6: String "ASDF \ ? \ %d %d %d"
+ 13: String "ABA\bZ"
+ 15: String "B#$\aB1Z"
Source GLSL 450
SourceExtension "GL_EXT_debug_printf"
Name 4 "main"
4(main): 2 Function None 3
5: Label
12: 2 ExtInst 11(NonSemantic.DebugPrintf) 1(DebugPrintf) 6 8 9 10
+ 14: 2 ExtInst 11(NonSemantic.DebugPrintf) 1(DebugPrintf) 13
+ 16: 2 ExtInst 11(NonSemantic.DebugPrintf) 1(DebugPrintf) 15
Return
FunctionEnd
case 't': ch = 0x09; break;
case 'v': ch = 0x0b; break;
case 'x':
- // two character hex value
- nextCh = getch();
- if (nextCh >= '0' && nextCh <= '9')
- nextCh -= '0';
- else if (nextCh >= 'A' && nextCh <= 'F')
- nextCh -= 'A' - 10;
- else if (nextCh >= 'a' && nextCh <= 'f')
- nextCh -= 'a' - 10;
- else
- pp->parseContext.ppError(ppToken->loc, "Expected hex value in escape sequence", "string", "");
- ch = nextCh * 0x10;
- nextCh = getch();
- if (nextCh >= '0' && nextCh <= '9')
- nextCh -= '0';
- else if (nextCh >= 'A' && nextCh <= 'F')
- nextCh -= 'A' - 10;
- else if (nextCh >= 'a' && nextCh <= 'f')
- nextCh -= 'a' - 10;
- else
- pp->parseContext.ppError(ppToken->loc, "Expected hex value in escape sequence", "string", "");
- ch += nextCh;
- break;
+ // Hex value, arbitrary number of characters. Terminated by the first
+ // non-hex digit
+ {
+ int numDigits = 0;
+ ch = 0;
+ while (true) {
+ nextCh = getch();
+ if (nextCh >= '0' && nextCh <= '9')
+ nextCh -= '0';
+ else if (nextCh >= 'A' && nextCh <= 'F')
+ nextCh -= 'A' - 10;
+ else if (nextCh >= 'a' && nextCh <= 'f')
+ nextCh -= 'a' - 10;
+ else {
+ ungetch();
+ break;
+ }
+ numDigits++;
+ ch = ch * 0x10 + nextCh;
+ }
+ if (numDigits == 0) {
+ pp->parseContext.ppError(ppToken->loc, "Expected hex value in escape sequence", "string", "");
+ }
+ break;
+ }
case '0':
case '1':
case '2':
case '5':
case '6':
case '7':
- // three character octal value
- nextCh = getch() - '0';
- if (nextCh > 3)
- pp->parseContext.ppError(ppToken->loc, "Expected octal value in escape sequence", "string", "");
- ch = nextCh * 8 * 8;
- nextCh = getch() - '0';
- if (nextCh > 7)
- pp->parseContext.ppError(ppToken->loc, "Expected octal value in escape sequence", "string", "");
- ch += nextCh * 8;
- nextCh = getch() - '0';
- if (nextCh > 7)
- pp->parseContext.ppError(ppToken->loc, "Expected octal value in escape sequence", "string", "");
- ch += nextCh;
- break;
+ // Octal value, up to three octal digits
+ {
+ int numDigits = 1;
+ ch = nextCh - '0';
+ while (numDigits < 3) {
+ nextCh = getch();
+ if (nextCh >= '0' && nextCh <= '7')
+ nextCh -= '0';
+ else {
+ ungetch();
+ break;
+ }
+ numDigits++;
+ ch = ch * 8 + nextCh;
+ }
+ break;
+ }
default:
pp->parseContext.ppError(ppToken->loc, "Invalid escape sequence", "string", "");
break;