|
91 | 91 | {
|
92 | 92 | write_line_number_next=true;
|
93 | 93 | }
|
94 |
| - void WriteLineNumber(std::ostringstream &str,const std::string &filename,int lineno) |
| 94 | + bool WriteLineNumber(std::ostringstream &str,const std::string &filename,int lineno) |
95 | 95 | {
|
96 |
| - if(!lineno) |
97 |
| - return; |
| 96 | + if(lineno==0) |
| 97 | + { |
| 98 | + return true; |
| 99 | + } |
| 100 | + if(lineno<0) |
| 101 | + { |
| 102 | + std::cerr<<"line: "<<lineno<<" not valid for #line directive.\n"; |
| 103 | + return false; |
| 104 | + } |
98 | 105 | std::string f=filename;
|
99 | 106 | size_t p=f.find("\\");
|
100 | 107 | while(p<f.length())
|
|
105 | 112 | if (gEffect->GetOptions()->disableLineWrites)
|
106 | 113 | str<<"//";
|
107 | 114 | str<<"#line "<<lineno<<" "<<gEffect->GetFilenameOrNumber(f)<<endl;
|
| 115 | + return true; |
108 | 116 | }
|
109 |
| - void WriteLineNumber(std::ostringstream &str,int lineno) |
| 117 | + bool WriteLineNumber(std::ostringstream &str,int lineno) |
110 | 118 | {
|
111 |
| - WriteLineNumber(str,current_filename,lineno);//.c_str()<<"\""<<endl; |
| 119 | + return WriteLineNumber(str,current_filename,lineno);//.c_str()<<"\""<<endl; |
112 | 120 | }
|
113 | 121 | std::string CreateLineStatement(int lineno)
|
114 | 122 | {
|
115 | 123 | ostringstream ostr;
|
116 | 124 | ostr<<"\n";
|
117 |
| - WriteLineNumber(ostr,current_filename,lineno+last_linenumber-global_linenumber); |
| 125 | + if(!WriteLineNumber(ostr,current_filename,lineno+last_linenumber-global_linenumber)) |
| 126 | + { |
| 127 | + std::cerr<<"lineno: "<<lineno<<" last_linenumber: "<<last_linenumber<<", global_linenumber: "<<global_linenumber<<".\n"; |
| 128 | + } |
118 | 129 | return ostr.str();
|
119 | 130 | }
|
120 | 131 | void stringReplaceAll(std::string& str, const std::string& from, const std::string& to)
|
|
616 | 627 | %token SET_RAY_GENERATION SET_MISS SET_CALLABLE SET_HIT_GROUP SET_CLOSEST_HIT SET_ANY_HIT SET_INTERSECTION SET_MISS_SHADERS SET_CALLABLE_SHADERS SET_RAY_TRACING_SHADER_CONFIG SET_RAY_TRACING_PIPELINE_CONFIG SET_MAX_PAYLOAD_SIZE SET_MAX_ATTRIBUTE_SIZE SET_MAX_TRACE_RECURSION_DEPTH
|
617 | 628 | %token SFX_VARIANT SFX_VARIANT_IF SFX_VARIANT_ELSE SFX_VARIANT_END
|
618 | 629 |
|
| 630 | +%token UNROLL |
619 | 631 | %%
|
620 | 632 |
|
621 | 633 | prog : prog tok
|
@@ -1056,6 +1068,13 @@ gslayout : '[' MAX_VERTEX_COUNT '(' NUM ')' ']'
|
1056 | 1068 | $$.strs[0]=$1.strs[0]+$2.strs[0]+$3.strs[0]+$4.strs[0]+$5.strs[0]+$6.strs[0];
|
1057 | 1069 | }
|
1058 | 1070 |
|
| 1071 | +optional_unroll : '[' UNROLL ']' |
| 1072 | +{ |
| 1073 | + $$.strs[0]=$1.strs[0]+$2.strs[0]+$3.strs[0]+" "; |
| 1074 | +} | %empty |
| 1075 | +{ |
| 1076 | + $$.strs[0] = ""; |
| 1077 | +} |
1059 | 1078 | optional_expression : expression
|
1060 | 1079 | {
|
1061 | 1080 | $$.strs[0]=$1.strs[0];
|
@@ -2598,7 +2617,7 @@ statement : COMMENT
|
2598 | 2617 | $$.strs[0]=$1.strs[0]+$2.strs[0]+$3.strs[0]+$4.strs[0]+$5.strs[0]+$6.strs[0]+$7.strs[0];
|
2599 | 2618 | $$.strs[1]="";
|
2600 | 2619 | }
|
2601 |
| - | FOR '(' for_init_statement ';' optional_expression ';' optional_expression ')' statement |
| 2620 | + | for '(' for_init_statement ';' optional_expression ';' optional_expression ')' statement |
2602 | 2621 | {
|
2603 | 2622 | string statement=$9.strs[0];
|
2604 | 2623 | $$.strs[0]=$1.strs[0]+$2.strs[0]+$3.strs[0]+$4.strs[0]+$5.strs[0]+$6.strs[0]+$7.strs[0]+$8.strs[0]+statement;
|
@@ -2644,7 +2663,13 @@ statement : COMMENT
|
2644 | 2663 | $$.strs[1]="";
|
2645 | 2664 | $$.lineno=$1.lineno;
|
2646 | 2665 | }
|
2647 |
| - |
| 2666 | +for: optional_unroll FOR |
| 2667 | + { |
| 2668 | + int line=$2.lineno; |
| 2669 | + $$.lineno=line; |
| 2670 | + $$.strs[0] = $1.strs[0] + $2.strs[0] ; |
| 2671 | + $$.strs[1] = ""; |
| 2672 | + } |
2648 | 2673 | variant_conditional_expression: SFX_VARIANT_IF '(' conditional_exp ')'
|
2649 | 2674 | {
|
2650 | 2675 | // TODO: Properly change the identifiers, instead of this hack.
|
|
0 commit comments