Lines Matching refs:g
54 GrGLSLGeometryBuilder* g, const char* rtAdjust) const { in emitGeometryShader() argument
60 g->codeAppendf("float%ix2 pts = transpose(float2x%i(sk_in[0].%s, sk_in[1].%s));", in emitGeometryShader()
64 g->declareGlobal(wind); in emitGeometryShader()
65 Shader::CalcWind(proc, g, "pts", wind.c_str()); in emitGeometryShader()
69 g->codeAppendf("%s *= half(sk_in[0].sk_Position.w);", wind.c_str()); in emitGeometryShader()
84 g->emitFunction(kVoid_GrSLType, "emitVertex", emitArgs.count(), emitArgs.begin(), [&]() { in emitGeometryShader()
106 g->emitVertex(&fnBody, "vertexpos", rtAdjust); in emitGeometryShader()
116 g->defineConstant("bloat", bloat); in emitGeometryShader()
120 g->declareGlobal(fEdgeDistanceEquation); in emitGeometryShader()
121 g->codeAppendf("float2 p0 = pts[0], p1 = pts[%i];", numInputPoints - 1); in emitGeometryShader()
122 g->codeAppendf("float2 n = float2(p0.y - p1.y, p1.x - p0.x);"); in emitGeometryShader()
123 g->codeAppend ("float nwidth = bloat*2 * (abs(n.x) + abs(n.y));"); in emitGeometryShader()
126 g->codeAppend ("n /= (0 != nwidth) ? nwidth : 1;"); in emitGeometryShader()
127 g->codeAppendf("%s = float3(-n, dot(n, p0) - .5*sign(%s));", in emitGeometryShader()
131 this->onEmitGeometryShader(proc, g, wind, emitVertexFn.c_str()); in emitGeometryShader()
159 void onEmitGeometryShader(const GrGSCoverageProcessor&, GrGLSLGeometryBuilder* g, in onEmitGeometryShader() argument
161 fShader->emitSetupCode(g, "pts"); in onEmitGeometryShader()
168 g->codeAppendf("int i = (%s > 0 ? sk_InvocationID : 4 - sk_InvocationID) %% 3;", in onEmitGeometryShader()
170 g->codeAppend ("float2 top = pts[i];"); in onEmitGeometryShader()
171 g->codeAppendf("float2 right = pts[(i + (%s > 0 ? 1 : 2)) %% 3];", wind.c_str()); in onEmitGeometryShader()
172 g->codeAppendf("float2 left = pts[(i + (%s > 0 ? 2 : 1)) %% 3];", wind.c_str()); in onEmitGeometryShader()
175 g->codeAppend ("float2 leftbloat = sign(top - left);"); in onEmitGeometryShader()
176 g->codeAppend ("leftbloat = float2(0 != leftbloat.y ? leftbloat.y : leftbloat.x, " in onEmitGeometryShader()
179 g->codeAppend ("float2 rightbloat = sign(right - top);"); in onEmitGeometryShader()
180 g->codeAppend ("rightbloat = float2(0 != rightbloat.y ? rightbloat.y : rightbloat.x, " in onEmitGeometryShader()
183 g->codeAppend ("float2 downbloat = sign(left - right);"); in onEmitGeometryShader()
184 g->codeAppend ("downbloat = float2(0 != downbloat.y ? downbloat.y : downbloat.x, " in onEmitGeometryShader()
188 g->codeAppend ("half4 coverages = half4(+1);"); in onEmitGeometryShader()
191 g->codeAppend ("if (sk_InvocationID >= 2) {"); // Are we an edge? in onEmitGeometryShader()
192 Shader::CalcEdgeCoverageAtBloatVertex(g, "top", "right", in onEmitGeometryShader()
195 g->codeAppend ( "coverages.yzw = half3(-1, 0, -1 - coverages[0]);"); in onEmitGeometryShader()
198 g->codeAppend ( "leftbloat = downbloat = -rightbloat;"); in onEmitGeometryShader()
199 g->codeAppend ("}"); in onEmitGeometryShader()
208 g->codeAppendf("bool2 left_right_notequal = notEqual(leftbloat, rightbloat);"); in onEmitGeometryShader()
209 g->codeAppend ("if (all(left_right_notequal)) {"); in onEmitGeometryShader()
212 g->codeAppendf( "%s(top, float2(-leftbloat.y, +leftbloat.x), coverages[0]);", in onEmitGeometryShader()
214 g->codeAppend ("}"); in onEmitGeometryShader()
215 g->codeAppend ("if (any(left_right_notequal)) {"); in onEmitGeometryShader()
217 g->codeAppendf( "%s(top, rightbloat, coverages[1]);", emitVertexFn); in onEmitGeometryShader()
218 g->codeAppend ("}"); in onEmitGeometryShader()
221 g->codeAppendf("%s(top, leftbloat, coverages[2]);", emitVertexFn); in onEmitGeometryShader()
222 g->codeAppendf("%s(right, rightbloat, coverages[1]);", emitVertexFn); in onEmitGeometryShader()
230 g->codeAppendf("bool2 right_down_notequal = notEqual(rightbloat, downbloat);"); in onEmitGeometryShader()
231 g->codeAppend ("if (any(right_down_notequal) || 0 == sk_InvocationID) {"); in onEmitGeometryShader()
232 g->codeAppendf( "%s((0 == sk_InvocationID) ? left : right, " in onEmitGeometryShader()
235 g->codeAppend ("}"); in onEmitGeometryShader()
236 g->codeAppend ("if (all(right_down_notequal) && 0 != sk_InvocationID) {"); in onEmitGeometryShader()
237 g->codeAppendf( "%s(right, float2(-rightbloat.y, +rightbloat.x), coverages[3]);", in onEmitGeometryShader()
239 g->codeAppend ("}"); in onEmitGeometryShader()
242 g->configure(InputType::kLines, OutputType::kTriangleStrip, 6, 5); in onEmitGeometryShader()
253 void onEmitGeometryShader(const GrGSCoverageProcessor&, GrGLSLGeometryBuilder* g, in onEmitGeometryShader() argument
256 fShader->emitSetupCode(g, "pts", &hullPts); in onEmitGeometryShader()
264 g->codeAppend ("int i = sk_InvocationID * 2;"); in onEmitGeometryShader()
265 g->codeAppendf("float2 topleft = %s[i];", hullPts); in onEmitGeometryShader()
266 g->codeAppendf("float2 topright = %s[%s > 0 ? i + 1 : 3 - i];", hullPts, wind.c_str()); in onEmitGeometryShader()
267 g->codeAppendf("float2 bottomleft = %s[%s > 0 ? 3 - i : i + 1];", hullPts, wind.c_str()); in onEmitGeometryShader()
268 g->codeAppendf("float2 bottomright = %s[2 - i];", hullPts); in onEmitGeometryShader()
271 g->codeAppend ("float2 leftbloat = float2(topleft.y > bottomleft.y ? +1 : -1, " in onEmitGeometryShader()
273 g->codeAppend ("float2 upbloat = float2(topright.y > topleft.y ? +1 : -1, " in onEmitGeometryShader()
275 g->codeAppend ("float2 rightbloat = float2(bottomright.y > topright.y ? +1 : -1, " in onEmitGeometryShader()
283 g->codeAppendf("bool2 left_up_notequal = notEqual(leftbloat, upbloat);"); in onEmitGeometryShader()
284 g->codeAppend ("if (all(left_up_notequal)) {"); in onEmitGeometryShader()
287 g->codeAppendf( "%s(topleft, float2(-leftbloat.y, leftbloat.x));", emitVertexFn); in onEmitGeometryShader()
288 g->codeAppend ("}"); in onEmitGeometryShader()
289 g->codeAppend ("if (any(left_up_notequal)) {"); in onEmitGeometryShader()
291 g->codeAppendf( "%s(topleft, leftbloat);", emitVertexFn); in onEmitGeometryShader()
292 g->codeAppend ("}"); in onEmitGeometryShader()
295 g->codeAppendf("%s(topleft, upbloat);", emitVertexFn); in onEmitGeometryShader()
296 g->codeAppendf("%s(bottomleft, leftbloat);", emitVertexFn); in onEmitGeometryShader()
297 g->codeAppendf("%s(topright, upbloat);", emitVertexFn); in onEmitGeometryShader()
300 g->codeAppendf("bool2 up_right_notequal = notEqual(upbloat, rightbloat);"); in onEmitGeometryShader()
301 g->codeAppend ("if (any(up_right_notequal)) {"); in onEmitGeometryShader()
302 g->codeAppendf( "%s(topright, rightbloat);", emitVertexFn); in onEmitGeometryShader()
303 g->codeAppend ("}"); in onEmitGeometryShader()
304 g->codeAppend ("if (all(up_right_notequal)) {"); in onEmitGeometryShader()
305 g->codeAppendf( "%s(topright, float2(-upbloat.y, upbloat.x));", emitVertexFn); in onEmitGeometryShader()
306 g->codeAppend ("}"); in onEmitGeometryShader()
308 g->configure(InputType::kLines, OutputType::kTriangleStrip, 7, 2); in onEmitGeometryShader()
324 void onEmitGeometryShader(const GrGSCoverageProcessor& proc, GrGLSLGeometryBuilder* g, in onEmitGeometryShader() argument
326 fShader->emitSetupCode(g, "pts"); in onEmitGeometryShader()
328 g->codeAppendf("int corneridx = sk_InvocationID;"); in onEmitGeometryShader()
330 g->codeAppendf("corneridx *= %i;", proc.numInputPoints() - 1); in onEmitGeometryShader()
333 g->codeAppendf("float2 corner = pts[corneridx];"); in onEmitGeometryShader()
334 g->codeAppendf("float2 left = pts[(corneridx + (%s > 0 ? %i : 1)) %% %i];", in onEmitGeometryShader()
336 g->codeAppendf("float2 right = pts[(corneridx + (%s > 0 ? 1 : %i)) %% %i];", in onEmitGeometryShader()
339 g->codeAppend ("float2 leftdir = corner - left;"); in onEmitGeometryShader()
340 g->codeAppend ("leftdir = (float2(0) != leftdir) ? normalize(leftdir) : float2(1, 0);"); in onEmitGeometryShader()
342 g->codeAppend ("float2 rightdir = right - corner;"); in onEmitGeometryShader()
343 g->codeAppend ("rightdir = (float2(0) != rightdir) ? normalize(rightdir) : float2(1, 0);"); in onEmitGeometryShader()
348 g->codeAppend ("float2 outbloat = float2(leftdir.x > rightdir.x ? +1 : -1, " in onEmitGeometryShader()
350 g->codeAppend ("float2 crossbloat = float2(-outbloat.y, +outbloat.x);"); in onEmitGeometryShader()
352 g->codeAppend ("half attenuation; {"); in onEmitGeometryShader()
353 Shader::CalcCornerAttenuation(g, "leftdir", "rightdir", "attenuation"); in onEmitGeometryShader()
354 g->codeAppend ("}"); in onEmitGeometryShader()
357 g->codeAppend ("half2 left_coverages; {"); in onEmitGeometryShader()
358 Shader::CalcEdgeCoveragesAtBloatVertices(g, "left", "corner", "-outbloat", in onEmitGeometryShader()
360 g->codeAppend ("}"); in onEmitGeometryShader()
362 g->codeAppend ("half2 right_coverages; {"); in onEmitGeometryShader()
363 Shader::CalcEdgeCoveragesAtBloatVertices(g, "corner", "right", "-outbloat", in onEmitGeometryShader()
365 g->codeAppend ("}"); in onEmitGeometryShader()
375 g->codeAppendf("%s(corner, -crossbloat, right_coverages[1] - left_coverages[1]," in onEmitGeometryShader()
379 g->codeAppendf("%s(corner, outbloat, 1 + left_coverages[0] + right_coverages[0], " in onEmitGeometryShader()
383 g->codeAppendf("%s(corner, -outbloat, -1 - left_coverages[0] - right_coverages[0], " in onEmitGeometryShader()
387 g->codeAppendf("%s(corner, crossbloat, left_coverages[1] - right_coverages[1]," in onEmitGeometryShader()
395 g->codeAppendf("%s = -%s;", wind.c_str(), wind.c_str()); in onEmitGeometryShader()
397 g->codeAppendf("%s = -%s;", in onEmitGeometryShader()
400 g->codeAppendf("%s(corner, -crossbloat, half2(-1, 1));", emitVertexFn); in onEmitGeometryShader()
401 g->codeAppendf("%s(corner, outbloat, half2(0, attenuation));", in onEmitGeometryShader()
403 g->codeAppendf("%s(corner, -outbloat, half2(-1, 1));", emitVertexFn); in onEmitGeometryShader()
404 g->codeAppendf("%s(corner, crossbloat, half2(-1, 1));", emitVertexFn); in onEmitGeometryShader()
407 g->configure(InputType::kLines, OutputType::kTriangleStrip, 4, proc.isTriangles() ? 3 : 2); in onEmitGeometryShader()