• Home
  • Raw
  • Download

Lines Matching refs:fsBuilder

17 static void hard_light(GrGLSLFragmentBuilder* fsBuilder,  in hard_light()  argument
24 fsBuilder->codeAppendf("if (2.0 * %s.%c <= %s.a) {", src, component, src); in hard_light()
25 fsBuilder->codeAppendf("%s.%c = 2.0 * %s.%c * %s.%c;", in hard_light()
27 fsBuilder->codeAppend("} else {"); in hard_light()
28 fsBuilder->codeAppendf("%s.%c = %s.a * %s.a - 2.0 * (%s.a - %s.%c) * (%s.a - %s.%c);", in hard_light()
31 fsBuilder->codeAppend("}"); in hard_light()
33 fsBuilder->codeAppendf("%s.rgb += %s.rgb * (1.0 - %s.a) + %s.rgb * (1.0 - %s.a);", in hard_light()
38 static void color_dodge_component(GrGLSLFragmentBuilder* fsBuilder, in color_dodge_component() argument
44 const GrShaderCaps* shaderCaps = fsBuilder->getProgramBuilder()->shaderCaps(); in color_dodge_component()
49 fsBuilder->codeAppendf("if (0.0 == %s.%c) {", dst, component); in color_dodge_component()
50 fsBuilder->codeAppendf("%s.%c = %s.%c * (1.0 - %s.a);", in color_dodge_component()
52 fsBuilder->codeAppend("} else {"); in color_dodge_component()
53 fsBuilder->codeAppendf("half d = %s.a - %s.%c;", src, src, component); in color_dodge_component()
54 fsBuilder->codeAppend("if (0.0 == d) {"); in color_dodge_component()
55 fsBuilder->codeAppendf("%s.%c = %s.a * %s.a + %s.%c * (1.0 - %s.a) + %s.%c * (1.0 - %s.a);", in color_dodge_component()
58 fsBuilder->codeAppend("} else {"); in color_dodge_component()
59 fsBuilder->codeAppendf("d = min(%s.a, %s.%c * %s.a / (d %s));", in color_dodge_component()
61 fsBuilder->codeAppendf("%s.%c = d * %s.a + %s.%c * (1.0 - %s.a) + %s.%c * (1.0 - %s.a);", in color_dodge_component()
63 fsBuilder->codeAppend("}"); in color_dodge_component()
64 fsBuilder->codeAppend("}"); in color_dodge_component()
68 static void color_burn_component(GrGLSLFragmentBuilder* fsBuilder, in color_burn_component() argument
74 const GrShaderCaps* shaderCaps = fsBuilder->getProgramBuilder()->shaderCaps(); in color_burn_component()
79 fsBuilder->codeAppendf("if (%s.a == %s.%c) {", dst, dst, component); in color_burn_component()
80 fsBuilder->codeAppendf("%s.%c = %s.a * %s.a + %s.%c * (1.0 - %s.a) + %s.%c * (1.0 - %s.a);", in color_burn_component()
83 fsBuilder->codeAppendf("} else if (0.0 == %s.%c) {", src, component); in color_burn_component()
84 fsBuilder->codeAppendf("%s.%c = %s.%c * (1.0 - %s.a);", in color_burn_component()
86 fsBuilder->codeAppend("} else {"); in color_burn_component()
87 fsBuilder->codeAppendf("half d = max(0.0, %s.a - (%s.a - %s.%c) * %s.a / (%s.%c %s));", in color_burn_component()
89 fsBuilder->codeAppendf("%s.%c = %s.a * d + %s.%c * (1.0 - %s.a) + %s.%c * (1.0 - %s.a);", in color_burn_component()
91 fsBuilder->codeAppend("}"); in color_burn_component()
95 static void soft_light_component_pos_dst_alpha(GrGLSLFragmentBuilder* fsBuilder, in soft_light_component_pos_dst_alpha() argument
101 const GrShaderCaps* shaderCaps = fsBuilder->getProgramBuilder()->shaderCaps(); in soft_light_component_pos_dst_alpha()
107 fsBuilder->codeAppendf("if (2.0 * %s.%c <= %s.a) {", src, component, src); in soft_light_component_pos_dst_alpha()
109 fsBuilder->codeAppendf("%s.%c = (%s.%c*%s.%c*(%s.a - 2.0*%s.%c)) / (%s.a %s) +" in soft_light_component_pos_dst_alpha()
115 fsBuilder->codeAppendf("} else if (4.0 * %s.%c <= %s.a) {", in soft_light_component_pos_dst_alpha()
117 fsBuilder->codeAppendf("half DSqd = %s.%c * %s.%c;", in soft_light_component_pos_dst_alpha()
119 fsBuilder->codeAppendf("half DCub = DSqd * %s.%c;", dst, component); in soft_light_component_pos_dst_alpha()
120 fsBuilder->codeAppendf("half DaSqd = %s.a * %s.a;", dst, dst); in soft_light_component_pos_dst_alpha()
121 fsBuilder->codeAppendf("half DaCub = DaSqd * %s.a;", dst); in soft_light_component_pos_dst_alpha()
123 fsBuilder->codeAppendf("%s.%c =" in soft_light_component_pos_dst_alpha()
130 fsBuilder->codeAppendf("} else {"); in soft_light_component_pos_dst_alpha()
132 fsBuilder->codeAppendf("%s.%c = %s.%c*(%s.a - 2.0*%s.%c + 1.0) + %s.%c -" in soft_light_component_pos_dst_alpha()
136 fsBuilder->codeAppendf("}"); in soft_light_component_pos_dst_alpha()
143 static void add_lum_function(GrGLSLFragmentBuilder* fsBuilder, SkString* setLumFunction) { in add_lum_function() argument
150 fsBuilder->emitFunction(kHalf_GrSLType, in add_lum_function()
178 fsBuilder->emitFunction(kHalf3_GrSLType, in add_lum_function()
188 static void add_sat_function(GrGLSLFragmentBuilder* fsBuilder, SkString* setSatFunction) { in add_sat_function() argument
195 fsBuilder->emitFunction(kHalf_GrSLType, in add_sat_function()
221 fsBuilder->emitFunction(kHalf3_GrSLType, in add_sat_function()
252 fsBuilder->emitFunction(kHalf3_GrSLType, in add_sat_function()
259 static void emit_advanced_xfermode_code(GrGLSLFragmentBuilder* fsBuilder, const char* srcColor, in emit_advanced_xfermode_code() argument
266 fsBuilder->codeAppendf("%s.a = %s.a + (1.0 - %s.a) * %s.a;", in emit_advanced_xfermode_code()
272 hard_light(fsBuilder, outputColor, dstColor, srcColor); in emit_advanced_xfermode_code()
275 fsBuilder->codeAppendf("%s.rgb = min((1.0 - %s.a) * %s.rgb + %s.rgb, " in emit_advanced_xfermode_code()
282 fsBuilder->codeAppendf("%s.rgb = max((1.0 - %s.a) * %s.rgb + %s.rgb, " in emit_advanced_xfermode_code()
289 color_dodge_component(fsBuilder, outputColor, srcColor, dstColor, 'r'); in emit_advanced_xfermode_code()
290 color_dodge_component(fsBuilder, outputColor, srcColor, dstColor, 'g'); in emit_advanced_xfermode_code()
291 color_dodge_component(fsBuilder, outputColor, srcColor, dstColor, 'b'); in emit_advanced_xfermode_code()
294 color_burn_component(fsBuilder, outputColor, srcColor, dstColor, 'r'); in emit_advanced_xfermode_code()
295 color_burn_component(fsBuilder, outputColor, srcColor, dstColor, 'g'); in emit_advanced_xfermode_code()
296 color_burn_component(fsBuilder, outputColor, srcColor, dstColor, 'b'); in emit_advanced_xfermode_code()
299 hard_light(fsBuilder, outputColor, srcColor, dstColor); in emit_advanced_xfermode_code()
302 fsBuilder->codeAppendf("if (0.0 == %s.a) {", dstColor); in emit_advanced_xfermode_code()
303 fsBuilder->codeAppendf("%s.rgba = %s;", outputColor, srcColor); in emit_advanced_xfermode_code()
304 fsBuilder->codeAppendf("} else {"); in emit_advanced_xfermode_code()
305 soft_light_component_pos_dst_alpha(fsBuilder, outputColor, srcColor, dstColor, 'r'); in emit_advanced_xfermode_code()
306 soft_light_component_pos_dst_alpha(fsBuilder, outputColor, srcColor, dstColor, 'g'); in emit_advanced_xfermode_code()
307 soft_light_component_pos_dst_alpha(fsBuilder, outputColor, srcColor, dstColor, 'b'); in emit_advanced_xfermode_code()
308 fsBuilder->codeAppendf("}"); in emit_advanced_xfermode_code()
311 fsBuilder->codeAppendf("%s.rgb = %s.rgb + %s.rgb -" in emit_advanced_xfermode_code()
317 fsBuilder->codeAppendf("%s.rgb = %s.rgb + %s.rgb - " in emit_advanced_xfermode_code()
322 fsBuilder->codeAppendf("%s.rgb = (1.0 - %s.a) * %s.rgb + " in emit_advanced_xfermode_code()
331 add_sat_function(fsBuilder, &setSat); in emit_advanced_xfermode_code()
332 add_lum_function(fsBuilder, &setLum); in emit_advanced_xfermode_code()
333 fsBuilder->codeAppendf("half4 dstSrcAlpha = %s * %s.a;", in emit_advanced_xfermode_code()
335 fsBuilder->codeAppendf("%s.rgb = %s(%s(%s.rgb * %s.a, dstSrcAlpha.rgb)," in emit_advanced_xfermode_code()
339 fsBuilder->codeAppendf("%s.rgb += (1.0 - %s.a) * %s.rgb + (1.0 - %s.a) * %s.rgb;", in emit_advanced_xfermode_code()
346 add_sat_function(fsBuilder, &setSat); in emit_advanced_xfermode_code()
347 add_lum_function(fsBuilder, &setLum); in emit_advanced_xfermode_code()
348 fsBuilder->codeAppendf("half4 dstSrcAlpha = %s * %s.a;", in emit_advanced_xfermode_code()
350 fsBuilder->codeAppendf("%s.rgb = %s(%s(dstSrcAlpha.rgb, %s.rgb * %s.a)," in emit_advanced_xfermode_code()
354 fsBuilder->codeAppendf("%s.rgb += (1.0 - %s.a) * %s.rgb + (1.0 - %s.a) * %s.rgb;", in emit_advanced_xfermode_code()
361 add_lum_function(fsBuilder, &setLum); in emit_advanced_xfermode_code()
362 fsBuilder->codeAppendf("half4 srcDstAlpha = %s * %s.a;", in emit_advanced_xfermode_code()
364 fsBuilder->codeAppendf("%s.rgb = %s(srcDstAlpha.rgb, srcDstAlpha.a, %s.rgb * %s.a);", in emit_advanced_xfermode_code()
366 fsBuilder->codeAppendf("%s.rgb += (1.0 - %s.a) * %s.rgb + (1.0 - %s.a) * %s.rgb;", in emit_advanced_xfermode_code()
373 add_lum_function(fsBuilder, &setLum); in emit_advanced_xfermode_code()
374 fsBuilder->codeAppendf("half4 srcDstAlpha = %s * %s.a;", in emit_advanced_xfermode_code()
376 fsBuilder->codeAppendf("%s.rgb = %s(%s.rgb * %s.a, srcDstAlpha.a, srcDstAlpha.rgb);", in emit_advanced_xfermode_code()
378 fsBuilder->codeAppendf("%s.rgb += (1.0 - %s.a) * %s.rgb + (1.0 - %s.a) * %s.rgb;", in emit_advanced_xfermode_code()
392 static bool append_porterduff_term(GrGLSLFragmentBuilder* fsBuilder, SkBlendModeCoeff coeff, in append_porterduff_term() argument
399 fsBuilder->codeAppend(" + "); in append_porterduff_term()
401 fsBuilder->codeAppendf("%s", colorName); in append_porterduff_term()
406 fsBuilder->codeAppendf(" * %s", srcColorName); in append_porterduff_term()
409 fsBuilder->codeAppendf(" * (half4(1.0) - %s)", srcColorName); in append_porterduff_term()
412 fsBuilder->codeAppendf(" * %s", dstColorName); in append_porterduff_term()
415 fsBuilder->codeAppendf(" * (half4(1.0) - %s)", dstColorName); in append_porterduff_term()
418 fsBuilder->codeAppendf(" * %s.a", srcColorName); in append_porterduff_term()
421 fsBuilder->codeAppendf(" * (1.0 - %s.a)", srcColorName); in append_porterduff_term()
424 fsBuilder->codeAppendf(" * %s.a", dstColorName); in append_porterduff_term()
427 fsBuilder->codeAppendf(" * (1.0 - %s.a)", dstColorName); in append_porterduff_term()
438 void GrGLSLBlend::AppendMode(GrGLSLFragmentBuilder* fsBuilder, const char* srcColor, in AppendMode() argument
447 fsBuilder->codeAppendf("%s = ", outColor); in AppendMode()
449 fsBuilder->codeAppend("clamp("); in AppendMode()
452 bool didAppend = append_porterduff_term(fsBuilder, srcCoeff, srcColor, srcColor, dstColor, in AppendMode()
455 if(!append_porterduff_term(fsBuilder, dstCoeff, dstColor, srcColor, dstColor, didAppend)) { in AppendMode()
456 fsBuilder->codeAppend("half4(0, 0, 0, 0)"); in AppendMode()
459 fsBuilder->codeAppend(", 0, 1);"); in AppendMode()
461 fsBuilder->codeAppend(";"); in AppendMode()
463 emit_advanced_xfermode_code(fsBuilder, srcColor, dstColor, outColor, mode); in AppendMode()
467 void GrGLSLBlend::AppendRegionOp(GrGLSLFragmentBuilder* fsBuilder, const char* srcColor, in AppendRegionOp() argument
502 fsBuilder->codeAppendf("%s = ", outColor); in AppendRegionOp()
504 bool didAppend = append_porterduff_term(fsBuilder, srcCoeff, srcColor, srcColor, dstColor, in AppendRegionOp()
507 if(!append_porterduff_term(fsBuilder, dstCoeff, dstColor, srcColor, dstColor, didAppend)) { in AppendRegionOp()
508 fsBuilder->codeAppend("half4(0, 0, 0, 0)"); in AppendRegionOp()
510 fsBuilder->codeAppend(";"); in AppendRegionOp()