Lines Matching +full:helper +full:- +full:function +full:- +full:name
4 * Use of this source code is governed by a BSD-style license that can be
105 return this->makeVertexBuffer(data.begin(), data.size()); in makeVertexBuffer()
108 return this->makeVertexBuffer(data.data(), data.size()); in makeVertexBuffer()
136 * This is a GPU-backend specific test. It tries to test all possible usecases of
148 std::function<void(DrawMeshHelper*)> prepareFn,
149 std::function<void(DrawMeshHelper*)> executeFn);
177 // ---- setup ----------
188 int rgb[3] = {-(c & 1) & 0xff, -((c >> 1) & 1) & 0xff, -((c >> 2) & 1) & 0xff};
210 // ---- tests ----------
221 [&](DrawMeshHelper* helper) { argument
230 helper->fVertBuffer = helper->makeVertexBuffer(expandedVertexData);
231 VALIDATE(helper->fVertBuffer);
233 [&](DrawMeshHelper* helper) { argument
235 auto pass = helper->bindPipeline(GrPrimitiveType::kTriangles, false, true);
236 pass->bindBuffers(nullptr, nullptr, helper->fVertBuffer);
237 pass->draw(kBoxCountX * 6, y * kBoxCountX * 6);
242 [&](DrawMeshHelper* helper) { argument
243 helper->fIndexBuffer = helper->getIndexBuffer();
244 VALIDATE(helper->fIndexBuffer);
245 helper->fVertBuffer = helper->makeVertexBuffer(vertexData);
246 VALIDATE(helper->fVertBuffer);
248 [&](DrawMeshHelper* helper) { argument
255 int repetitionCount = std::min(3 - baseRepetition, kBoxCount - i);
257 auto pass = helper->bindPipeline(GrPrimitiveType::kTriangles, false, true);
258 pass->bindBuffers(helper->fIndexBuffer, nullptr, helper->fVertBuffer);
259 pass->drawIndexed(repetitionCount * 6, baseRepetition * 6, baseRepetition * 4,
260 (baseRepetition + repetitionCount) * 4 - 1,
261 (i - baseRepetition) * 4);
269 [&](DrawMeshHelper* helper) { argument
270 helper->fIndexBuffer = helper->getIndexBuffer();
271 VALIDATE(helper->fIndexBuffer);
272 helper->fVertBuffer = helper->makeVertexBuffer(vertexData);
273 VALIDATE(helper->fVertBuffer);
275 [&](DrawMeshHelper* helper) { argument
279 auto pass = helper->bindPipeline(GrPrimitiveType::kTriangles, false, true);
280 pass->bindBuffers(helper->fIndexBuffer, nullptr, helper->fVertBuffer);
281 pass->drawIndexPattern(6, kBoxCountX, kIndexPatternRepeatCount, 4,
288 if (!dContext->priv().caps()->drawInstancedSupport()) {
294 [&](DrawMeshHelper* helper) { argument
295 helper->fIndexBuffer = indexed ? helper->getIndexBuffer() : nullptr;
301 helper->fIndexBuffer2 = helper->makeIndexBuffer(baseIndexData.begin(),
303 helper->fInstBuffer = helper->makeVertexBuffer(boxes);
304 VALIDATE(helper->fInstBuffer);
305 helper->fVertBuffer =
306 helper->makeVertexBuffer(std::vector<float>{0,0, 0,1, 1,0, 1,1});
307 VALIDATE(helper->fVertBuffer);
308 helper->fVertBuffer2 = helper->makeVertexBuffer( // for testing base vertex.
309 std::vector<float>{-1,-1, -1,-1, 0,0, 0,1, 1,0, 1,1});
310 VALIDATE(helper->fVertBuffer2);
312 [&](DrawMeshHelper* helper) { argument
320 if (dContext->priv().caps()->shaderCaps()->fVertexIDSupport) {
325 vertexBuffer = helper->fVertBuffer;
328 vertexBuffer = helper->fVertBuffer2;
335 auto pass = helper->bindPipeline(primitiveType, true,
339 helper->fIndexBuffer2 : helper->fIndexBuffer;
342 pass->bindBuffers(std::move(indexBuffer), helper->fInstBuffer,
344 pass->drawIndexedInstanced(6, baseIndex, kBoxCountX, y * kBoxCountX,
347 pass->bindBuffers(nullptr, helper->fInstBuffer,
349 pass->drawInstanced(kBoxCountX, y * kBoxCountY, 4, baseVertex);
356 if (!dContext->priv().caps()->drawInstancedSupport()) {
362 [&](DrawMeshHelper* helper) { argument
370 helper->fIndexBuffer2 = helper->makeIndexBuffer(baseIndexData.begin(),
372 VALIDATE(helper->fIndexBuffer2);
373 helper->fInstBuffer = helper->makeVertexBuffer(boxes);
374 VALIDATE(helper->fInstBuffer);
375 helper->fVertBuffer = helper->makeVertexBuffer(std::vector<float>{
376 -1,-1, 0,0, 0,1, 1,0, 1,1, -1,-1, 0,0, 1,0, 0,1, 1,1});
377 VALIDATE(helper->fVertBuffer);
382 // Make helper->fDrawIndirectBufferOffset nonzero.
387 helper->target()->makeDrawIndirectSpace(29, &ignoredBuff, &ignoredOffset);
388 indexedIndirectWriter = helper->target()->makeDrawIndexedIndirectSpace(
389 kBoxCountY, &helper->fDrawIndirectBuffer,
390 &helper->fDrawIndirectBufferOffset);
392 // Make helper->fDrawIndirectBufferOffset nonzero.
397 helper->target()->makeDrawIndexedIndirectSpace(7, &ignoredBuff,
399 indirectWriter = helper->target()->makeDrawIndirectSpace(
400 kBoxCountY, &helper->fDrawIndirectBuffer,
401 &helper->fDrawIndirectBufferOffset);
416 [&](DrawMeshHelper* helper) { argument
419 pass = helper->bindPipeline(GrPrimitiveType::kTriangles, true, true);
420 pass->bindBuffers(helper->fIndexBuffer2, helper->fInstBuffer,
421 helper->fVertBuffer);
425 size_t offset = helper->fDrawIndirectBufferOffset + start *
427 pass->drawIndexedIndirect(helper->fDrawIndirectBuffer.get(), offset,
428 end - start);
431 pass = helper->bindPipeline(GrPrimitiveType::kTriangleStrip, true, true);
432 pass->bindBuffers(nullptr, helper->fInstBuffer, helper->fVertBuffer);
436 size_t offset = helper->fDrawIndirectBufferOffset + start *
438 pass->drawIndirect(helper->fDrawIndirectBuffer.get(), offset,
439 end - start);
454 std::function<void(DrawMeshHelper*)> prepareFn,
455 std::function<void(DrawMeshHelper*)> executeFn) {
462 MeshTestOp(std::function<void(DrawMeshHelper*)> prepareFn,
463 std::function<void(DrawMeshHelper*)> executeFn)
465 this->setBounds(
469 const char* name() const override { return "GrMeshTestOp"; } function in __anon2d84f2950b11::MeshTestOp
490 std::function<void(DrawMeshHelper*)> fPrepareFn;
491 std::function<void(DrawMeshHelper*)> fExecuteFn;
499 return arena->make([&](void* ptr) {
504 const char* name() const override { return "GrMeshTestProcessor"; } function in __anon2d84f2950b11::MeshTestProcessor
507 b->add32(fInstanceLocation.isInitialized());
508 b->add32(fVertexPosition.isInitialized());
525 this->setInstanceAttributesWithImplicitOffsets(&fInstanceLocation, 2);
528 this->setVertexAttributesWithImplicitOffsets(&fVertexPosition, 1);
533 this->setVertexAttributesWithImplicitOffsets(&fVertexPosition, 2);
562 varyingHandler->emitAttributes(mp);
563 f->codeAppendf("half4 %s;", args.fOutputColor);
564 varyingHandler->addPassThroughAttribute(mp.inColor().asShaderVar(), args.fOutputColor);
567 v->codeAppendf("float2 vertex = %s;", mp.fVertexPosition.name());
570 v->codeAppendf("float2 offset = %s;", mp.fVertexPosition.name());
572 v->codeAppend("float2 offset = float2(sk_VertexID / 2, sk_VertexID % 2);");
574 v->codeAppendf("float2 vertex = %s + offset * %i;", mp.fInstanceLocation.name(),
577 gpArgs->fPositionVar.set(SkSLType::kFloat2, "vertex");
579 f->codeAppendf("const half4 %s = half4(1);", args.fOutputCoverage);
589 return fState->resourceProvider()->createBuffer(indices,
597 return fState->resourceProvider()->createBuffer(data,
605 return fState->resourceProvider()->findOrCreatePatternedIndexBuffer(
613 // TODO: add a GrProcessorSet testing helper to make this easier
617 fState->appliedClip(),
619 fState->caps(),
627 GrGeometryProcessor* mtp = MeshTestProcessor::Make(fState->allocator(), isInstanced,
630 GrProgramInfo programInfo(fState->caps(), fState->writeView(), fState->usesMSAASurface(),
632 fState->renderPassBarriers(), fState->colorLoadOp());
634 fState->opsRenderPass()->bindPipeline(programInfo, SkRect::MakeIWH(kImageWidth, kImageHeight));
635 return fState->opsRenderPass();
643 std::function<void(DrawMeshHelper*)> prepareFn,
644 std::function<void(DrawMeshHelper*)> executeFn) {
647 if (h != sdc->height() || w != sdc->width()) {
657 sdc->clear(SkPMColor4f::FromBytes_RGBA(0xbaaaaaad));
658 sdc->addDrawOp(MeshTestOp::Make(dContext, prepareFn, executeFn));
660 sdc->readPixels(dContext, resultPM, {0, 0});