@@ -28,7 +28,8 @@ def format_weights(weights, n, length=4):
2828
2929def base_header (file ):
3030 file .write ('//!HOOK LUMA\n ' )
31- file .write ('//!WHEN OUTPUT.w LUMA.w / {0}.400 > OUTPUT.h LUMA.h / {0}.400 > *\n ' .format (scale - 1 ))
31+ if scale > 1 :
32+ file .write ('//!WHEN OUTPUT.w LUMA.w / {0}.400 > OUTPUT.h LUMA.h / {0}.400 > *\n ' .format (scale - 1 ))
3233
3334def header1 (file , n , d ):
3435 base_header (file )
@@ -75,8 +76,9 @@ def header5(file, n, d, inp):
7576 file .write ('//!DESC sub-pixel convolution {}\n ' .format ((n // comps ) + 1 ))
7677 for i in range (d // 4 ):
7778 file .write ('//!BIND {}{}\n ' .format (inp , i + 1 ))
78- file .write ('//!SAVE SUBCONV{}\n ' .format ((n // comps ) + 1 ))
79- file .write ('//!COMPONENTS {}\n ' .format (comps ))
79+ if scale > 1 :
80+ file .write ('//!SAVE SUBCONV{}\n ' .format ((n // comps ) + 1 ))
81+ file .write ('//!COMPONENTS {}\n ' .format (comps ))
8082
8183def header6 (file ):
8284 base_header (file )
@@ -219,45 +221,47 @@ def main():
219221 ln = get_line_number ("deconv_b" , fname )
220222 biases = read_weights (fname , ln )
221223 inp = "EXPANDED" if shrinking else "RES"
222- comps = 3 if scale == 3 else 4
224+ comps = scale if scale % 2 == 1 else 4
223225 for n in range (0 , scale ** 2 , comps ):
224226 header5 (file , n , d , inp )
225227 file .write ('vec4 hook()\n ' )
226228 file .write ('{\n ' )
227- file .write ('vec{0} res = vec{0}({1});\n ' .format (comps , format_weights (biases [0 ], n , length = comps )))
229+ if scale == 1 :
230+ file .write ('float res = {};\n ' .format (format_weights (biases [0 ], n , length = comps )))
231+ else :
232+ file .write ('vec{0} res = vec{0}({1});\n ' .format (comps , format_weights (biases [0 ], n , length = comps )))
228233 p = 0
229234 for l in range (0 , len (weights ), 4 ):
230235 if l % d == 0 :
231236 y , x = p % (radius * 2 + 1 )- radius , p // (radius * 2 + 1 )- radius
232237 p += 1
233238 idx = (l // 4 )% (d // 4 )
234- file .write ('res += mat4x{}({},{},{},{}) * {}{}_texOff(vec2({},{}));\n ' .format (
235- comps , format_weights (weights [l ], n , length = comps ), format_weights (weights [l + 1 ], n , length = comps ),
239+ file .write ('res += {}{}({},{},{},{}){} {}{}_texOff(vec2({},{})){};\n ' .format (
240+ "mat4x" if scale > 1 else "dot(" , comps if scale > 1 else "vec4" ,
241+ format_weights (weights [l ], n , length = comps ), format_weights (weights [l + 1 ], n , length = comps ),
236242 format_weights (weights [l + 2 ], n , length = comps ), format_weights (weights [l + 3 ], n , length = comps ),
237- inp , idx + 1 , x , y ))
238- if comps == 4 :
239- file .write ('return res;\n ' )
240- else :
241- file .write ('return vec4(res, 0);\n ' )
243+ " *" if scale > 1 else "," , inp , idx + 1 , x , y , "" if scale > 1 else ")" ))
244+ file .write ('return vec4(res{});\n ' .format (", 0" * (4 - comps )))
242245 file .write ('}\n \n ' )
243246
244- # Aggregation
245- header6 (file )
246- file .write ('vec4 hook()\n ' )
247- file .write ('{\n ' )
248- file .write ('vec2 fcoord = fract(SUBCONV1_pos * SUBCONV1_size);\n ' )
249- file .write ('vec2 base = SUBCONV1_pos + (vec2(0.5) - fcoord) * SUBCONV1_pt;\n ' )
250- file .write ('ivec2 index = ivec2(fcoord * vec2({}));\n ' .format (scale ))
251- if scale > 2 :
252- file .write ('mat{0} res = mat{0}(SUBCONV1_tex(base).{1}' .format (scale , "rgba" [:comps ]))
253- for i in range (scale - 1 ):
254- file .write (',SUBCONV{}_tex(base).{}' .format (i + 2 , "rgba" [:comps ]))
255- file .write (');\n ' )
256- file .write ('return vec4(res[index.x][index.y], 0, 0, 1);\n ' )
257- else :
258- file .write ('vec4 res = SUBCONV1_tex(base);\n ' )
259- file .write ('return vec4(res[index.x * {} + index.y], 0, 0, 1);\n ' .format (scale ))
260- file .write ('}\n ' )
247+ if scale > 1 :
248+ # Aggregation
249+ header6 (file )
250+ file .write ('vec4 hook()\n ' )
251+ file .write ('{\n ' )
252+ file .write ('vec2 fcoord = fract(SUBCONV1_pos * SUBCONV1_size);\n ' )
253+ file .write ('vec2 base = SUBCONV1_pos + (vec2(0.5) - fcoord) * SUBCONV1_pt;\n ' )
254+ file .write ('ivec2 index = ivec2(fcoord * vec2({}));\n ' .format (scale ))
255+ if scale > 2 :
256+ file .write ('mat{0} res = mat{0}(SUBCONV1_tex(base).{1}' .format (scale , "rgba" [:comps ]))
257+ for i in range (scale - 1 ):
258+ file .write (',SUBCONV{}_tex(base).{}' .format (i + 2 , "rgba" [:comps ]))
259+ file .write (');\n ' )
260+ file .write ('return vec4(res[index.x][index.y], 0, 0, 1);\n ' )
261+ else :
262+ file .write ('vec4 res = SUBCONV1_tex(base);\n ' )
263+ file .write ('return vec4(res[index.x * {} + index.y], 0, 0, 1);\n ' .format (scale ))
264+ file .write ('}\n ' )
261265
262266 else :
263267 print ("Missing argument: You must specify a file name" )
0 commit comments