Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(514)

Side by Side Diff: tests/GLProgramsTest.cpp

Issue 685883003: Clip in grdrawtarget (Closed) Base URL: https://skia.googlesource.com/skia.git@drawtarget_on_clip_manager
Patch Set: dm cleaned up Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 // This is a GPU-backend specific test. It relies on static intializers to work 9 // This is a GPU-backend specific test. It relies on static intializers to work
10 10
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 0xffff, 366 0xffff,
367 0xffff); 367 0xffff);
368 368
369 if (random->nextBool()) { 369 if (random->nextBool()) {
370 gpu->drawState()->setStencil(kDoesWriteStencil); 370 gpu->drawState()->setStencil(kDoesWriteStencil);
371 } else { 371 } else {
372 gpu->drawState()->setStencil(kDoesNotWriteStencil); 372 gpu->drawState()->setStencil(kDoesNotWriteStencil);
373 } 373 }
374 } 374 }
375 375
376 bool GrGpuGL::programUnitTest(int maxStages) { 376 bool GrDrawTarget::programUnitTest(int maxStages) {
377 GrGpuGL* gpu = static_cast<GrGpuGL*>(fContext->getGpu());
bsalomon 2014/11/05 19:13:43 Does this have to be the GL subclass?
joshualitt 2014/11/05 19:55:47 Otherwise we can't build the GL program and we nee
bsalomon 2014/11/05 20:00:22 Gotcha, seems like we're pretty close to making th
377 // setup dummy textures 378 // setup dummy textures
378 GrSurfaceDesc dummyDesc; 379 GrSurfaceDesc dummyDesc;
379 dummyDesc.fFlags = kRenderTarget_GrSurfaceFlag; 380 dummyDesc.fFlags = kRenderTarget_GrSurfaceFlag;
380 dummyDesc.fConfig = kSkia8888_GrPixelConfig; 381 dummyDesc.fConfig = kSkia8888_GrPixelConfig;
381 dummyDesc.fWidth = 34; 382 dummyDesc.fWidth = 34;
382 dummyDesc.fHeight = 18; 383 dummyDesc.fHeight = 18;
383 SkAutoTUnref<GrTexture> dummyTexture1(this->createTexture(dummyDesc, NULL, 0 )); 384 SkAutoTUnref<GrTexture> dummyTexture1(gpu->createTexture(dummyDesc, NULL, 0) );
384 dummyDesc.fFlags = kNone_GrSurfaceFlags; 385 dummyDesc.fFlags = kNone_GrSurfaceFlags;
385 dummyDesc.fConfig = kAlpha_8_GrPixelConfig; 386 dummyDesc.fConfig = kAlpha_8_GrPixelConfig;
386 dummyDesc.fWidth = 16; 387 dummyDesc.fWidth = 16;
387 dummyDesc.fHeight = 22; 388 dummyDesc.fHeight = 22;
388 SkAutoTUnref<GrTexture> dummyTexture2(this->createTexture(dummyDesc, NULL, 0 )); 389 SkAutoTUnref<GrTexture> dummyTexture2(gpu->createTexture(dummyDesc, NULL, 0) );
389 390
390 if (!dummyTexture1 || ! dummyTexture2) { 391 if (!dummyTexture1 || ! dummyTexture2) {
391 SkDebugf("Could not allocate dummy textures"); 392 SkDebugf("Could not allocate dummy textures");
392 return false; 393 return false;
393 } 394 }
394 395
395 GrTexture* dummyTextures[] = {dummyTexture1.get(), dummyTexture2.get()}; 396 GrTexture* dummyTextures[] = {dummyTexture1.get(), dummyTexture2.get()};
396 397
397 // Setup texture cache id key 398 // Setup texture cache id key
398 const GrCacheID::Domain glProgramsDomain = GrCacheID::GenerateDomain(); 399 const GrCacheID::Domain glProgramsDomain = GrCacheID::GenerateDomain();
(...skipping 12 matching lines...) Expand all
411 412
412 // wrap the SkClipStack in a GrClipData 413 // wrap the SkClipStack in a GrClipData
413 GrClipData clipData; 414 GrClipData clipData;
414 clipData.fClipStack = &stack; 415 clipData.fClipStack = &stack;
415 this->setClip(&clipData); 416 this->setClip(&clipData);
416 417
417 SkRandom random; 418 SkRandom random;
418 static const int NUM_TESTS = 512; 419 static const int NUM_TESTS = 512;
419 for (int t = 0; t < NUM_TESTS;) { 420 for (int t = 0; t < NUM_TESTS;) {
420 // setup random render target(can fail) 421 // setup random render target(can fail)
421 SkAutoTUnref<GrRenderTarget> rt(random_render_target(this, glProgramsCac heID, &random)); 422 SkAutoTUnref<GrRenderTarget> rt(random_render_target(gpu, glProgramsCach eID, &random));
422 if (!rt) { 423 if (!rt) {
423 SkDebugf("Could not allocate render target"); 424 SkDebugf("Could not allocate render target");
424 return false; 425 return false;
425 } 426 }
426 427
427 GrDrawState* ds = this->drawState(); 428 GrDrawState* ds = this->drawState();
428 ds->setRenderTarget(rt.get()); 429 ds->setRenderTarget(rt.get());
429 430
430 // if path rendering we have to setup a couple of things like the draw t ype 431 // if path rendering we have to setup a couple of things like the draw t ype
431 bool usePathRendering = this->glCaps().pathRenderingSupport() && random. nextBool(); 432 bool usePathRendering = gpu->glCaps().pathRenderingSupport() && random.n extBool();
432 433
433 GrGpu::DrawType drawType = usePathRendering ? GrGpu::kDrawPath_DrawType : 434 GrGpu::DrawType drawType = usePathRendering ? GrGpu::kDrawPath_DrawType :
434 GrGpu::kDrawPoints_DrawTyp e; 435 GrGpu::kDrawPoints_DrawTyp e;
435 436
436 // twiddle drawstate knobs randomly 437 // twiddle drawstate knobs randomly
437 bool hasGeometryProcessor = usePathRendering ? false : random.nextBool() ; 438 bool hasGeometryProcessor = usePathRendering ? false : random.nextBool() ;
438 if (hasGeometryProcessor) { 439 if (hasGeometryProcessor) {
439 set_random_gp(this, &random, dummyTextures); 440 set_random_gp(gpu, &random, dummyTextures);
440 } 441 }
441 set_random_color_coverage_stages(this, maxStages - hasGeometryProcessor, usePathRendering, 442 set_random_color_coverage_stages(gpu, maxStages - hasGeometryProcessor, usePathRendering,
442 &random, dummyTextures); 443 &random, dummyTextures);
443 set_random_color(this, &random); 444 set_random_color(gpu, &random);
444 set_random_coverage(this, &random); 445 set_random_coverage(gpu, &random);
445 set_random_hints(this, &random); 446 set_random_hints(gpu, &random);
446 set_random_state(this, &random); 447 set_random_state(gpu, &random);
447 set_random_blend_func(this, &random); 448 set_random_blend_func(gpu, &random);
448 set_random_stencil(this, &random); 449 set_random_stencil(gpu, &random);
449 450
450 GrDeviceCoordTexture dstCopy; 451 GrDeviceCoordTexture dstCopy;
451 452
452 if (!this->setupDstReadIfNecessary(&dstCopy, NULL)) { 453 if (!this->setupDstReadIfNecessary(&dstCopy, NULL)) {
453 SkDebugf("Couldn't setup dst read texture"); 454 SkDebugf("Couldn't setup dst read texture");
454 return false; 455 return false;
455 } 456 }
456 457
457 // create optimized draw state, setup readDst texture if required, and b uild a descriptor 458 // create optimized draw state, setup readDst texture if required, and b uild a descriptor
458 // and program. ODS creation can fail, so we have to check 459 // and program. ODS creation can fail, so we have to check
459 SkAutoTUnref<GrOptDrawState> ods(GrOptDrawState::Create(this->getDrawSta te(), 460 SkAutoTUnref<GrOptDrawState> ods(GrOptDrawState::Create(gpu->getDrawStat e(),
460 this, 461 gpu,
461 &dstCopy, 462 &dstCopy,
462 drawType)); 463 drawType));
463 if (!ods.get()) { 464 if (!ods.get()) {
464 ds->reset(); 465 ds->reset();
465 continue; 466 continue;
466 } 467 }
467 SkAutoTUnref<GrGLProgram> program(GrGLProgramBuilder::CreateProgram(*ods , drawType, this)); 468 SkAutoTUnref<GrGLProgram> program(GrGLProgramBuilder::CreateProgram(*ods , drawType, gpu));
468 if (NULL == program.get()) { 469 if (NULL == program.get()) {
469 SkDebugf("Failed to create program!"); 470 SkDebugf("Failed to create program!");
470 return false; 471 return false;
471 } 472 }
472 473
473 // We have to reset the drawstate because we might have added a gp 474 // We have to reset the drawstate because we might have added a gp
474 ds->reset(); 475 ds->reset();
475 476
476 // because occasionally optimized drawstate creation will fail for valid reasons, we only 477 // because occasionally optimized drawstate creation will fail for valid reasons, we only
477 // want to increment on success 478 // want to increment on success
(...skipping 22 matching lines...) Expand all
500 maxStages = 1; 501 maxStages = 1;
501 } else { 502 } else {
502 return; 503 return;
503 } 504 }
504 #if SK_ANGLE 505 #if SK_ANGLE
505 // Some long shaders run out of temporary registers in the D3D compi ler on ANGLE. 506 // Some long shaders run out of temporary registers in the D3D compi ler on ANGLE.
506 if (type == GrContextFactory::kANGLE_GLContextType) { 507 if (type == GrContextFactory::kANGLE_GLContextType) {
507 maxStages = 3; 508 maxStages = 3;
508 } 509 }
509 #endif 510 #endif
510 REPORTER_ASSERT(reporter, gpu->programUnitTest(maxStages)); 511 GrDrawTarget* dt = static_cast<GrDrawTarget*>(context->getDrawTarget ());
512 REPORTER_ASSERT(reporter, dt->programUnitTest(maxStages));
511 } 513 }
512 } 514 }
513 } 515 }
514 516
515 #endif 517 #endif
OLDNEW
« src/gpu/GrInOrderDrawBuffer.cpp ('K') | « src/gpu/gl/GrGpuGL_program.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698