Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Drop "in" qualifier from function parameters #134

Merged
merged 1 commit into from
May 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/ast.fs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ and TypeSpec =

and Type = {
name: TypeSpec // e.g. int
typeQ: string option // e.g. const, uniform
typeQ: string list // e.g. const, uniform
}

and DeclElt = {
Expand Down
3 changes: 1 addition & 2 deletions src/parse.fs
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,6 @@ module private ParseImpl =
let layout = keyword "layout" >>. ch '(' >>. manyCharsTill anyChar (ch ')')
|>> (function s -> "layout(" + s + ")")
let qualifier = many (storage <|> layout)
|>> (function [] -> None | li -> Some (String.concat " " li))
let typeSpec = structSpecifier <|> (ident |>> (fun id -> Ast.TypeName id.Name))
pipe2 qualifier typeSpec (fun tyQ name -> Ast.makeType name tyQ)

Expand All @@ -212,7 +211,7 @@ module private ParseImpl =
"point"; "line"; "triangle"; "lineadj"; "triangleadj"
]
|> List.map keyword |> choice <?> "Type qualifier"
let qualifier = many storage |>> (function [] -> None | li -> Some (String.concat " " li))
let qualifier = many storage
let generic = ch '<' >>. manyCharsTill anyChar (ch '>')
|> opt
|>> (function Some s -> "<" + s + ">" | None -> "")
Expand Down
4 changes: 3 additions & 1 deletion src/printer.fs
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,9 @@ module private PrinterImpl =
| TypeStruct(prefix, id, decls) -> structToS prefix id decls

and typeToS (ty: Type) =
let get = Option.fold (fun _ s -> s + " ") ""
let get = function
| [] -> ""
| li -> (String.concat " " li) + " "
let typeSpec = typeSpecToS ty.name
out "%s%s" (get ty.typeQ) typeSpec

Expand Down
7 changes: 3 additions & 4 deletions src/renamer.fs
Original file line number Diff line number Diff line change
Expand Up @@ -228,10 +228,9 @@ module private RenamerImpl =
Option.iter (renExpr env) decl.init
Option.iter (renExpr env) decl.size
let ext =
match ty.typeQ with
| Some tyQ -> ["in"; "out"; "attribute"; "varying"; "uniform"]
|> List.exists (fun s -> tyQ.Contains(s))
| None -> false
let tyQSet = Set.ofList ty.typeQ
let extQ = ["in"; "out"; "attribute"; "varying"; "uniform"]
List.exists (fun s -> Set.contains s tyQSet) extQ
let isExternal = isTopLevel && (ext || options.hlsl)

if isTopLevel && options.preserveAllGlobals then
Expand Down
9 changes: 8 additions & 1 deletion src/rewriter.fs
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,13 @@ let private rwTypeSpec = function
| x -> x // structs

let rwType (ty: Type) =
makeType (rwTypeSpec ty.name) (Option.map stripSpaces ty.typeQ)
makeType (rwTypeSpec ty.name) (List.map stripSpaces ty.typeQ)

let rwFType fct =
// The default for function parameters is "in", we don't need it.
let rwFTypeType ty = {ty with typeQ = List.except ["in"] ty.typeQ}
let rwFDecl (ty, elts) = (rwFTypeType ty, elts)
{fct with args = List.map rwFDecl fct.args}

// Return the list of variables used in the statements, with the number of references.
let collectReferences stmtList =
Expand Down Expand Up @@ -286,6 +292,7 @@ let simplify li =
|> List.map (function
| TLDecl (ty, li) -> TLDecl (rwType ty, declsNotToInline li)
| TLVerbatim s -> TLVerbatim (stripSpaces s)
| Function (fct, body) -> Function (rwFType fct, body)
| e -> e
)
|> squeezeTLDeclarations
Expand Down
1 change: 1 addition & 0 deletions tests/commands.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
-o tests/real/the_real_party_is_in_your_pocket.frag.expected tests/real/the_real_party_is_in_your_pocket.frag
-o tests/unit/function_overload.expected tests/unit/function_overload.frag
-o tests/unit/externals.expected tests/unit/externals.frag
-o tests/unit/qualifiers.expected tests/unit/qualifiers.frag
-o tests/unit/macros.expected --no-inlining tests/unit/macros.frag
--format indented -o tests/unit/switch.expected tests/unit/switch.frag

Expand Down
25 changes: 13 additions & 12 deletions tests/real/kinder_painter.expected
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"uniform vec4 mouse;"
"uniform sampler2D tex0,tex1,tex2,tex3;"
"vec4 fpar00[6],fpar01[6];"
"float cylinder(in vec4 sph,in vec3 ro,in vec3 rd)"
"float cylinder(vec4 sph,vec3 ro,vec3 rd)"
"{"
"vec3 d=ro-sph.xyz;"
"float a=dot(rd.xz,rd.xz),b=dot(rd.xz,d.xz),c=dot(d.xz,d.xz)-sph.w*sph.w,t;"
Expand All @@ -17,15 +17,15 @@
"t=-(b+sqrt(t))/a;"
"return t-.001;"
"}"
"float esfera(in vec4 sph,in vec3 ro,in vec3 rd)"
"float esfera(vec4 sph,vec3 ro,vec3 rd)"
"{"
"vec3 d=ro-sph.xyz;"
"float b=dot(rd,d),c=dot(d,d)-sph.w*sph.w,t=b*b-c;"
"if(t>0.)"
"t=-b-sqrt(t);"
"return t-.001;"
"}"
"bool esfera2(in vec4 sph,in vec3 ro,in vec3 rd,in float tmin)"
"bool esfera2(vec4 sph,vec3 ro,vec3 rd,float tmin)"
"{"
"vec3 d=ro-sph.xyz;"
"float b=dot(rd,d),c=dot(d,d)-sph.w*sph.w,t=b*b-c;"
Expand All @@ -34,7 +34,7 @@
"t=-b-sqrt(t),r=t>0.&&t<tmin;"
"return r;"
"}"
"bool cylinder2(in vec4 sph,in vec3 ro,in vec3 rd,in float tmin)"
"bool cylinder2(vec4 sph,vec3 ro,vec3 rd,float tmin)"
"{"
"vec3 d=ro-sph.xyz;"
"float a=dot(rd.xz,rd.xz),b=dot(rd.xz,d.xz),c=dot(d.xz,d.xz)-sph.w*sph.w,t=b*b-a*c;"
Expand All @@ -43,14 +43,14 @@
"t=-(b+sqrt(t)),r=t>0.&&t<tmin*a;"
"return r;"
"}"
"float plane(in vec4 pla,in vec3 ro,in vec3 rd)"
"float plane(vec4 pla,vec3 ro,vec3 rd)"
"{"
"float de=dot(pla.xyz,rd);"
"de=sign(de)*max(abs(de),.001);"
"float t=-(dot(pla.xyz,ro)+pla.w)/de;"
"return t-.001;"
"}"
"vec3 calcnor(in vec4 obj,in vec4 col,in vec3 inter,out vec2 uv)"
"vec3 calcnor(vec4 obj,vec4 col,vec3 inter,out vec2 uv)"
"{"
"vec3 nor;"
"if(col.w>2.5)"
Expand All @@ -62,19 +62,19 @@
" nor=inter-obj.xyz,nor=nor/obj.w,uv=nor.xy;"
"return nor;"
"}"
"vec4 cmov(in vec4 a,in vec4 b,in bool cond)"
"vec4 cmov(vec4 a,vec4 b,bool cond)"
"{"
"return cond?b:a;"
"}"
"float cmov(in float a,in float b,in bool cond)"
"float cmov(float a,float b,bool cond)"
"{"
"return cond?b:a;"
"}"
"int cmov(in int a,in int b,in bool cond)"
"int cmov(int a,int b,bool cond)"
"{"
"return cond?b:a;"
"}"
"float intersect(in vec3 ro,in vec3 rd,out vec4 obj,out vec4 col)"
"float intersect(vec3 ro,vec3 rd,out vec4 obj,out vec4 col)"
"{"
"float tmin=1e4,t;"
"col.w=-1.;"
Expand Down Expand Up @@ -111,7 +111,7 @@
"tmin=cmov(tmin,t,isok);"
"return tmin;"
"}"
"bool intersectShadow(in vec3 ro,in vec3 rd,in float l)"
"bool intersectShadow(vec3 ro,vec3 rd,float l)"
"{"
"float t;"
"bvec4 sss;"
Expand All @@ -121,7 +121,7 @@
"sss.w=cylinder2(fpar00[3],ro,rd,l);"
"return any(sss);"
"}"
"vec4 basicShade(in vec3 inter,in vec4 obj,in vec4 col,in vec3 rd,in vec4 luz,out vec4 ref)"
"vec4 basicShade(vec3 inter,vec4 obj,vec4 col,vec3 rd,vec4 luz,out vec4 ref)"
"{"
"vec3 nor;"
"float dif,spe;"
Expand Down Expand Up @@ -183,3 +183,4 @@
"col=mix(col,col2,.5-.5*ref.w);"
"gl_FragColor=col;"
"}",

15 changes: 8 additions & 7 deletions tests/real/leizex.expected
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ _leizex_frag:
db '{'
db 'return n=n<<13^n,n=n*(n*n*15731+789221)+1376312589&2147483647,float(n);'
db '}'
db 'float noise3f(in vec3 x,int sem)'
db 'float noise3f(vec3 x,int sem)'
db '{'
db 'ivec3 ip=ivec3(floor(x));'
db 'vec3 f=fract(x);'
Expand All @@ -19,7 +19,7 @@ _leizex_frag:
db 'float res=mix(mix(mix(coolfFunc3d2(n+0),coolfFunc3d2(n+1),f.x),mix(coolfFunc3d2(n+57),coolfFunc3d2(n+58),f.x),f.y),mix(mix(coolfFunc3d2(n+113),coolfFunc3d2(n+114),f.x),mix(coolfFunc3d2(n+170),coolfFunc3d2(n+171),f.x),f.y),f.z);'
db 'return 1.-res*(1./1073741824.);'
db '}'
db 'vec2 celular(in vec3 x)'
db 'vec2 celular(vec3 x)'
db '{'
db 'ivec3 ip=ivec3(floor(x));'
db 'vec3 f=fract(x);'
Expand All @@ -39,11 +39,11 @@ _leizex_frag:
db '}'
db 'return.25*sqrt(dmin);'
db '}'
db 'float fbm(in vec3 x)'
db 'float fbm(vec3 x)'
db '{'
db 'return.5*noise3f(x,0)+.25*noise3f(x*2.,0)+.125*noise3f(x*4.,0)+.0625*noise3f(x*8.,0);'
db '}'
db 'float map(in vec3 x,out float ao)'
db 'float map(vec3 x,out float ao)'
db '{'
db 'vec3 d=mod(vec3(1024.)+x,1.)-.5;'
db 'float dis=sqrt(dot(d,d))-.09,disp=noise3f(4.*x,0);'
Expand All @@ -55,13 +55,13 @@ _leizex_frag:
db 'ao*=clamp(disp2*12.,0.,1.);'
db 'return dis;'
db '}'
db 'vec3 calcNormal(in vec3 pos)'
db 'vec3 calcNormal(vec3 pos)'
db '{'
db 'float kk,eps=2e-4;'
db 'vec3 nor=vec3(map(pos+vec3(eps,0.,0.),kk)-map(pos-vec3(eps,0.,0.),kk),map(pos+vec3(0.,eps,0.),kk)-map(pos-vec3(0.,eps,0.),kk),map(pos+vec3(0.,0.,eps),kk)-map(pos-vec3(0.,0.,eps),kk));'
db 'return normalize(nor);'
db '}'
db 'void generateRay(out vec3 rayDir,out vec3 rayPos,in vec2 p,float ftime)'
db 'void generateRay(out vec3 rayDir,out vec3 rayPos,vec2 p,float ftime)'
db '{'
db 'vec2 s=p;'
db 'float r2=s.x*s.x*.32+s.y*s.y;'
Expand All @@ -73,7 +73,7 @@ _leizex_frag:
db 'vec3 up=vec3(0.,cos(roll),sin(roll)),dd=normalize(rayTar-rayPos),rr=normalize(cross(dd,up)),uu=normalize(cross(rr,dd));'
db 'rayDir=normalize(d.x*rr+d.y*uu+dd);'
db '}'
db 'vec3 addbump(in vec3 nor,float bumpa,in vec3 x)'
db 'vec3 addbump(vec3 nor,float bumpa,vec3 x)'
db '{'
db 'float ke=5e-4,kk=fbm(256.*x);'
db 'vec3 xnor=vec3(fbm(256.*(x+vec3(ke,0.,0.)))-kk,fbm(256.*(x+vec3(0.,ke,0.)))-kk,fbm(256.*(x+vec3(0.,0.,ke)))-kk);'
Expand Down Expand Up @@ -105,3 +105,4 @@ _leizex_frag:
db 'col*=.5+.5*(1.-p.x)*(1.+p.x);'
db 'gl_FragColor=vec4(col,1.);'
db '}', 0

Loading