Lines Matching refs:g
55 GrGLSLGeometryBuilder* g, const char* rtAdjust) const { in emitGeometryShader() argument
61 g->codeAppendf("float%ix2 pts = transpose(float2x%i(sk_in[0].%s, sk_in[1].%s));", in emitGeometryShader()
65 g->declareGlobal(wind); in emitGeometryShader()
66 Shader::CalcWind(proc, g, "pts", wind.c_str()); in emitGeometryShader()
70 g->codeAppendf("%s *= half(sk_in[0].sk_Position.w);", wind.c_str()); in emitGeometryShader()
85 g->emitFunction(kVoid_GrSLType, "emitVertex", emitArgs.count(), emitArgs.begin(), [&]() { in emitGeometryShader()
107 g->emitVertex(&fnBody, "vertexpos", rtAdjust); in emitGeometryShader()
117 g->defineConstant("bloat", bloat); in emitGeometryShader()
121 g->declareGlobal(fEdgeDistanceEquation); in emitGeometryShader()
122 g->codeAppendf("float2 p0 = pts[0], p1 = pts[%i];", numInputPoints - 1); in emitGeometryShader()
123 g->codeAppendf("float2 n = float2(p0.y - p1.y, p1.x - p0.x);"); in emitGeometryShader()
124 g->codeAppend ("float nwidth = bloat*2 * (abs(n.x) + abs(n.y));"); in emitGeometryShader()
127 g->codeAppend ("n /= (0 != nwidth) ? nwidth : 1;"); in emitGeometryShader()
128 g->codeAppendf("%s = float3(-n, dot(n, p0) - .5*sign(%s));", in emitGeometryShader()
132 this->onEmitGeometryShader(proc, g, wind, emitVertexFn.c_str()); in emitGeometryShader()
160 void onEmitGeometryShader(const GrGSCoverageProcessor&, GrGLSLGeometryBuilder* g, in onEmitGeometryShader() argument
162 fShader->emitSetupCode(g, "pts"); in onEmitGeometryShader()
169 g->codeAppendf("int i = (%s > 0 ? sk_InvocationID : 4 - sk_InvocationID) %% 3;", in onEmitGeometryShader()
171 g->codeAppend ("float2 top = pts[i];"); in onEmitGeometryShader()
172 g->codeAppendf("float2 right = pts[(i + (%s > 0 ? 1 : 2)) %% 3];", wind.c_str()); in onEmitGeometryShader()
173 g->codeAppendf("float2 left = pts[(i + (%s > 0 ? 2 : 1)) %% 3];", wind.c_str()); in onEmitGeometryShader()
176 g->codeAppend ("float2 leftbloat = sign(top - left);"); in onEmitGeometryShader()
177 g->codeAppend ("leftbloat = float2(0 != leftbloat.y ? leftbloat.y : leftbloat.x, " in onEmitGeometryShader()
180 g->codeAppend ("float2 rightbloat = sign(right - top);"); in onEmitGeometryShader()
181 g->codeAppend ("rightbloat = float2(0 != rightbloat.y ? rightbloat.y : rightbloat.x, " in onEmitGeometryShader()
184 g->codeAppend ("float2 downbloat = sign(left - right);"); in onEmitGeometryShader()
185 g->codeAppend ("downbloat = float2(0 != downbloat.y ? downbloat.y : downbloat.x, " in onEmitGeometryShader()
189 g->codeAppend ("half4 coverages = half4(+1);"); in onEmitGeometryShader()
192 g->codeAppend ("if (sk_InvocationID >= 2) {"); // Are we an edge? in onEmitGeometryShader()
193 Shader::CalcEdgeCoverageAtBloatVertex(g, "top", "right", in onEmitGeometryShader()
196 g->codeAppend ( "coverages.yzw = half3(-1, 0, -1 - coverages[0]);"); in onEmitGeometryShader()
199 g->codeAppend ( "leftbloat = downbloat = -rightbloat;"); in onEmitGeometryShader()
200 g->codeAppend ("}"); in onEmitGeometryShader()
209 g->codeAppendf("bool2 left_right_notequal = notEqual(leftbloat, rightbloat);"); in onEmitGeometryShader()
210 g->codeAppend ("if (all(left_right_notequal)) {"); in onEmitGeometryShader()
213 g->codeAppendf( "%s(top, float2(-leftbloat.y, +leftbloat.x), coverages[0]);", in onEmitGeometryShader()
215 g->codeAppend ("}"); in onEmitGeometryShader()
216 g->codeAppend ("if (any(left_right_notequal)) {"); in onEmitGeometryShader()
218 g->codeAppendf( "%s(top, rightbloat, coverages[1]);", emitVertexFn); in onEmitGeometryShader()
219 g->codeAppend ("}"); in onEmitGeometryShader()
222 g->codeAppendf("%s(top, leftbloat, coverages[2]);", emitVertexFn); in onEmitGeometryShader()
223 g->codeAppendf("%s(right, rightbloat, coverages[1]);", emitVertexFn); in onEmitGeometryShader()
231 g->codeAppendf("bool2 right_down_notequal = notEqual(rightbloat, downbloat);"); in onEmitGeometryShader()
232 g->codeAppend ("if (any(right_down_notequal) || 0 == sk_InvocationID) {"); in onEmitGeometryShader()
233 g->codeAppendf( "%s((0 == sk_InvocationID) ? left : right, " in onEmitGeometryShader()
236 g->codeAppend ("}"); in onEmitGeometryShader()
237 g->codeAppend ("if (all(right_down_notequal) && 0 != sk_InvocationID) {"); in onEmitGeometryShader()
238 g->codeAppendf( "%s(right, float2(-rightbloat.y, +rightbloat.x), coverages[3]);", in onEmitGeometryShader()
240 g->codeAppend ("}"); in onEmitGeometryShader()
243 g->configure(InputType::kLines, OutputType::kTriangleStrip, 6, 5); in onEmitGeometryShader()
254 void onEmitGeometryShader(const GrGSCoverageProcessor&, GrGLSLGeometryBuilder* g, in onEmitGeometryShader() argument
257 fShader->emitSetupCode(g, "pts", &hullPts); in onEmitGeometryShader()
265 g->codeAppend ("int i = sk_InvocationID * 2;"); in onEmitGeometryShader()
266 g->codeAppendf("float2 topleft = %s[i];", hullPts); in onEmitGeometryShader()
267 g->codeAppendf("float2 topright = %s[%s > 0 ? i + 1 : 3 - i];", hullPts, wind.c_str()); in onEmitGeometryShader()
268 g->codeAppendf("float2 bottomleft = %s[%s > 0 ? 3 - i : i + 1];", hullPts, wind.c_str()); in onEmitGeometryShader()
269 g->codeAppendf("float2 bottomright = %s[2 - i];", hullPts); in onEmitGeometryShader()
272 g->codeAppend ("float2 leftbloat = float2(topleft.y > bottomleft.y ? +1 : -1, " in onEmitGeometryShader()
274 g->codeAppend ("float2 upbloat = float2(topright.y > topleft.y ? +1 : -1, " in onEmitGeometryShader()
276 g->codeAppend ("float2 rightbloat = float2(bottomright.y > topright.y ? +1 : -1, " in onEmitGeometryShader()
284 g->codeAppendf("bool2 left_up_notequal = notEqual(leftbloat, upbloat);"); in onEmitGeometryShader()
285 g->codeAppend ("if (all(left_up_notequal)) {"); in onEmitGeometryShader()
288 g->codeAppendf( "%s(topleft, float2(-leftbloat.y, leftbloat.x));", emitVertexFn); in onEmitGeometryShader()
289 g->codeAppend ("}"); in onEmitGeometryShader()
290 g->codeAppend ("if (any(left_up_notequal)) {"); in onEmitGeometryShader()
292 g->codeAppendf( "%s(topleft, leftbloat);", emitVertexFn); in onEmitGeometryShader()
293 g->codeAppend ("}"); in onEmitGeometryShader()
296 g->codeAppendf("%s(topleft, upbloat);", emitVertexFn); in onEmitGeometryShader()
297 g->codeAppendf("%s(bottomleft, leftbloat);", emitVertexFn); in onEmitGeometryShader()
298 g->codeAppendf("%s(topright, upbloat);", emitVertexFn); in onEmitGeometryShader()
301 g->codeAppendf("bool2 up_right_notequal = notEqual(upbloat, rightbloat);"); in onEmitGeometryShader()
302 g->codeAppend ("if (any(up_right_notequal)) {"); in onEmitGeometryShader()
303 g->codeAppendf( "%s(topright, rightbloat);", emitVertexFn); in onEmitGeometryShader()
304 g->codeAppend ("}"); in onEmitGeometryShader()
305 g->codeAppend ("if (all(up_right_notequal)) {"); in onEmitGeometryShader()
306 g->codeAppendf( "%s(topright, float2(-upbloat.y, upbloat.x));", emitVertexFn); in onEmitGeometryShader()
307 g->codeAppend ("}"); in onEmitGeometryShader()
309 g->configure(InputType::kLines, OutputType::kTriangleStrip, 7, 2); in onEmitGeometryShader()
325 void onEmitGeometryShader(const GrGSCoverageProcessor& proc, GrGLSLGeometryBuilder* g, in onEmitGeometryShader() argument
327 fShader->emitSetupCode(g, "pts"); in onEmitGeometryShader()
329 g->codeAppendf("int corneridx = sk_InvocationID;"); in onEmitGeometryShader()
331 g->codeAppendf("corneridx *= %i;", proc.numInputPoints() - 1); in onEmitGeometryShader()
334 g->codeAppendf("float2 corner = pts[corneridx];"); in onEmitGeometryShader()
335 g->codeAppendf("float2 left = pts[(corneridx + (%s > 0 ? %i : 1)) %% %i];", in onEmitGeometryShader()
337 g->codeAppendf("float2 right = pts[(corneridx + (%s > 0 ? 1 : %i)) %% %i];", in onEmitGeometryShader()
340 g->codeAppend ("float2 leftdir = corner - left;"); in onEmitGeometryShader()
341 g->codeAppend ("leftdir = (float2(0) != leftdir) ? normalize(leftdir) : float2(1, 0);"); in onEmitGeometryShader()
343 g->codeAppend ("float2 rightdir = right - corner;"); in onEmitGeometryShader()
344 g->codeAppend ("rightdir = (float2(0) != rightdir) ? normalize(rightdir) : float2(1, 0);"); in onEmitGeometryShader()
349 g->codeAppend ("float2 outbloat = float2(leftdir.x > rightdir.x ? +1 : -1, " in onEmitGeometryShader()
351 g->codeAppend ("float2 crossbloat = float2(-outbloat.y, +outbloat.x);"); in onEmitGeometryShader()
353 g->codeAppend ("half attenuation; {"); in onEmitGeometryShader()
354 Shader::CalcCornerAttenuation(g, "leftdir", "rightdir", "attenuation"); in onEmitGeometryShader()
355 g->codeAppend ("}"); in onEmitGeometryShader()
358 g->codeAppend ("half2 left_coverages; {"); in onEmitGeometryShader()
359 Shader::CalcEdgeCoveragesAtBloatVertices(g, "left", "corner", "-outbloat", in onEmitGeometryShader()
361 g->codeAppend ("}"); in onEmitGeometryShader()
363 g->codeAppend ("half2 right_coverages; {"); in onEmitGeometryShader()
364 Shader::CalcEdgeCoveragesAtBloatVertices(g, "corner", "right", "-outbloat", in onEmitGeometryShader()
366 g->codeAppend ("}"); in onEmitGeometryShader()
376 g->codeAppendf("%s(corner, -crossbloat, right_coverages[1] - left_coverages[1]," in onEmitGeometryShader()
380 g->codeAppendf("%s(corner, outbloat, 1 + left_coverages[0] + right_coverages[0], " in onEmitGeometryShader()
384 g->codeAppendf("%s(corner, -outbloat, -1 - left_coverages[0] - right_coverages[0], " in onEmitGeometryShader()
388 g->codeAppendf("%s(corner, crossbloat, left_coverages[1] - right_coverages[1]," in onEmitGeometryShader()
396 g->codeAppendf("%s = -%s;", wind.c_str(), wind.c_str()); in onEmitGeometryShader()
398 g->codeAppendf("%s = -%s;", in onEmitGeometryShader()
401 g->codeAppendf("%s(corner, -crossbloat, half2(-1, 1));", emitVertexFn); in onEmitGeometryShader()
402 g->codeAppendf("%s(corner, outbloat, half2(0, attenuation));", in onEmitGeometryShader()
404 g->codeAppendf("%s(corner, -outbloat, half2(-1, 1));", emitVertexFn); in onEmitGeometryShader()
405 g->codeAppendf("%s(corner, crossbloat, half2(-1, 1));", emitVertexFn); in onEmitGeometryShader()
408 g->configure(InputType::kLines, OutputType::kTriangleStrip, 4, proc.isTriangles() ? 3 : 2); in onEmitGeometryShader()