@@ -8,7 +8,7 @@ extern crate webrender_build;
8
8
9
9
use std:: collections:: HashSet ;
10
10
use std:: fmt:: Write ;
11
- use webrender_build:: shader:: { ShaderFeatureFlags , get_shader_features } ;
11
+ use webrender_build:: shader:: { get_shader_features , ShaderFeatureFlags } ;
12
12
13
13
// Shader key is in "name feature,feature" format.
14
14
// File name needs to be formatted as "name_feature_feature".
@@ -23,22 +23,35 @@ fn write_load_shader(shader_keys: &[String]) {
23
23
}
24
24
load_shader. push_str ( "ProgramLoader load_shader(const char* name) {\n " ) ;
25
25
for s in shader_keys {
26
- let _ = write ! ( load_shader, " if (!strcmp(name, \" {}\" )) {{ return {}_program::loader; }}\n " ,
27
- s, shader_file( s) ) ;
26
+ let _ = write ! (
27
+ load_shader,
28
+ " if (!strcmp(name, \" {}\" )) {{ return {}_program::loader; }}\n " ,
29
+ s,
30
+ shader_file( s)
31
+ ) ;
28
32
}
29
33
load_shader. push_str ( " return nullptr;\n }\n " ) ;
30
- std:: fs:: write ( std:: env:: var ( "OUT_DIR" ) . unwrap ( ) + "/load_shader.h" , load_shader) . unwrap ( ) ;
34
+ std:: fs:: write (
35
+ std:: env:: var ( "OUT_DIR" ) . unwrap ( ) + "/load_shader.h" ,
36
+ load_shader,
37
+ )
38
+ . unwrap ( ) ;
31
39
}
32
40
33
- fn process_imports ( shader_dir : & str , shader : & str , included : & mut HashSet < String > , output : & mut String ) {
41
+ fn process_imports (
42
+ shader_dir : & str ,
43
+ shader : & str ,
44
+ included : & mut HashSet < String > ,
45
+ output : & mut String ,
46
+ ) {
34
47
if !included. insert ( shader. into ( ) ) {
35
48
return ;
36
49
}
37
50
println ! ( "cargo:rerun-if-changed={}/{}.glsl" , shader_dir, shader) ;
38
51
let source = std:: fs:: read_to_string ( format ! ( "{}/{}.glsl" , shader_dir, shader) ) . unwrap ( ) ;
39
52
for line in source. lines ( ) {
40
53
if line. starts_with ( "#include " ) {
41
- let imports = line[ "#include " . len ( ) ..] . split ( ',' ) ;
54
+ let imports = line[ "#include " . len ( ) ..] . split ( ',' ) ;
42
55
for import in imports {
43
56
process_imports ( shader_dir, import, included, output) ;
44
57
}
@@ -57,8 +70,11 @@ fn translate_shader(
57
70
suppressed_env_vars : & mut Option < Vec < EnvVarGuard > > ,
58
71
) {
59
72
let mut imported = String :: from ( "#define SWGL 1\n #define __VERSION__ 150\n " ) ;
60
- let _ = write ! ( imported, "#define WR_MAX_VERTEX_TEXTURE_WIDTH {}U\n " ,
61
- webrender_build:: MAX_VERTEX_TEXTURE_WIDTH ) ;
73
+ let _ = write ! (
74
+ imported,
75
+ "#define WR_MAX_VERTEX_TEXTURE_WIDTH {}U\n " ,
76
+ webrender_build:: MAX_VERTEX_TEXTURE_WIDTH
77
+ ) ;
62
78
63
79
let ( basename, features) =
64
80
shader_key. split_at ( shader_key. find ( ' ' ) . unwrap_or ( shader_key. len ( ) ) ) ;
@@ -112,38 +128,36 @@ fn translate_shader(
112
128
}
113
129
}
114
130
build. file ( & imp_name) ;
115
- let vs = build. clone ( )
116
- . define ( "WR_VERTEX_SHADER" , Some ( "1" ) )
117
- . expand ( ) ;
118
- let fs = build. clone ( )
131
+ let vs = build. clone ( ) . define ( "WR_VERTEX_SHADER" , Some ( "1" ) ) . expand ( ) ;
132
+ let fs = build
133
+ . clone ( )
119
134
. define ( "WR_FRAGMENT_SHADER" , Some ( "1" ) )
120
135
. expand ( ) ;
121
136
let vs_name = format ! ( "{}/{}.vert" , out_dir, shader) ;
122
137
let fs_name = format ! ( "{}/{}.frag" , out_dir, shader) ;
123
138
std:: fs:: write ( & vs_name, vs) . unwrap ( ) ;
124
139
std:: fs:: write ( & fs_name, fs) . unwrap ( ) ;
125
140
126
- let args = vec ! [
127
- "glsl_to_cxx" . to_string( ) ,
128
- vs_name,
129
- fs_name,
130
- ] ;
141
+ let args = vec ! [ "glsl_to_cxx" . to_string( ) , vs_name, fs_name] ;
131
142
let result = glsl_to_cxx:: translate ( & mut args. into_iter ( ) ) ;
132
143
std:: fs:: write ( format ! ( "{}/{}.h" , out_dir, shader) , result) . unwrap ( ) ;
133
144
}
134
145
135
146
fn main ( ) {
136
147
let shader_dir = std:: env:: var ( "CARGO_MANIFEST_DIR" ) . unwrap ( ) + "/../webrender/res" ;
137
148
138
- let shader_flags =
139
- ShaderFeatureFlags :: GL |
140
- ShaderFeatureFlags :: DUAL_SOURCE_BLENDING |
141
- ShaderFeatureFlags :: ADVANCED_BLEND_EQUATION |
142
- ShaderFeatureFlags :: DEBUG ;
149
+ let shader_flags = ShaderFeatureFlags :: GL
150
+ | ShaderFeatureFlags :: DUAL_SOURCE_BLENDING
151
+ | ShaderFeatureFlags :: ADVANCED_BLEND_EQUATION
152
+ | ShaderFeatureFlags :: DEBUG ;
143
153
let mut shaders: Vec < String > = Vec :: new ( ) ;
144
154
for ( name, features) in get_shader_features ( shader_flags) {
145
155
shaders. extend ( features. iter ( ) . map ( |f| {
146
- if f. is_empty ( ) { name. to_owned ( ) } else { format ! ( "{} {}" , name, f) }
156
+ if f. is_empty ( ) {
157
+ name. to_owned ( )
158
+ } else {
159
+ format ! ( "{} {}" , name, f)
160
+ }
147
161
} ) ) ;
148
162
}
149
163
@@ -172,16 +186,18 @@ fn main() {
172
186
173
187
if let Ok ( tool) = build. try_get_compiler ( ) {
174
188
if tool. is_like_msvc ( ) {
175
- build. flag ( "/std:c++17" )
176
- . flag ( "/EHs-" )
177
- . flag ( "/GR-" )
178
- . flag ( "/UMOZILLA_CONFIG_H" ) ;
189
+ build
190
+ . flag ( "/std:c++17" )
191
+ . flag ( "/EHs-" )
192
+ . flag ( "/GR-" )
193
+ . flag ( "/UMOZILLA_CONFIG_H" ) ;
179
194
} else {
180
- build. flag ( "-std=c++17" )
181
- . flag ( "-fno-exceptions" )
182
- . flag ( "-fno-rtti" )
183
- . flag ( "-fno-math-errno" )
184
- . flag ( "-UMOZILLA_CONFIG_H" ) ;
195
+ build
196
+ . flag ( "-std=c++17" )
197
+ . flag ( "-fno-exceptions" )
198
+ . flag ( "-fno-rtti" )
199
+ . flag ( "-fno-math-errno" )
200
+ . flag ( "-UMOZILLA_CONFIG_H" ) ;
185
201
}
186
202
// SWGL relies heavily on inlining for performance so override -Oz with -O2
187
203
if tool. args ( ) . contains ( & "-Oz" . into ( ) ) {
@@ -197,20 +213,23 @@ fn main() {
197
213
// probably explicitly use reciprocal instructions and avoid the refinement step.
198
214
// Also, allow checks for non-finite values which fast-math may disable.
199
215
if tool. is_like_msvc ( ) {
200
- build. flag ( "/fp:fast" )
201
- . flag ( "-Xclang" )
202
- . flag ( "-mrecip=none" )
203
- . flag ( "/clang:-fno-finite-math-only" ) ;
216
+ build
217
+ . flag ( "/fp:fast" )
218
+ . flag ( "-Xclang" )
219
+ . flag ( "-mrecip=none" )
220
+ . flag ( "/clang:-fno-finite-math-only" ) ;
204
221
} else if tool. is_like_clang ( ) {
205
222
// gcc only supports -mrecip=none on some targets so to keep
206
223
// things simple we don't use -ffast-math with gcc at all
207
- build. flag ( "-ffast-math" )
208
- . flag ( "-mrecip=none" )
209
- . flag ( "-fno-finite-math-only" ) ;
224
+ build
225
+ . flag ( "-ffast-math" )
226
+ . flag ( "-mrecip=none" )
227
+ . flag ( "-fno-finite-math-only" ) ;
210
228
}
211
229
}
212
230
213
- build. file ( "src/gl.cc" )
231
+ build
232
+ . file ( "src/gl.cc" )
214
233
. define ( "_GLIBCXX_USE_CXX11_ABI" , Some ( "0" ) )
215
234
. include ( shader_dir)
216
235
. include ( "src" )
0 commit comments