Skip to content

Commit

Permalink
Drop "in" qualifier from function parameters (#134)
Browse files Browse the repository at this point in the history
This is the default and so doesn't need to be specified.
  • Loading branch information
jwatzman authored May 7, 2022
1 parent 20607bc commit eee9187
Show file tree
Hide file tree
Showing 13 changed files with 160 additions and 114 deletions.
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

0 comments on commit eee9187

Please sign in to comment.