| OLD | NEW |
| 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 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 SkRandom random; | 422 SkRandom random; |
| 423 static const int NUM_TESTS = 512; | 423 static const int NUM_TESTS = 512; |
| 424 for (int t = 0; t < NUM_TESTS;) { | 424 for (int t = 0; t < NUM_TESTS;) { |
| 425 // setup random render target(can fail) | 425 // setup random render target(can fail) |
| 426 SkAutoTUnref<GrRenderTarget> rt(random_render_target(fContext, glProgram
sCacheID, &random)); | 426 SkAutoTUnref<GrRenderTarget> rt(random_render_target(fContext, glProgram
sCacheID, &random)); |
| 427 if (!rt.get()) { | 427 if (!rt.get()) { |
| 428 SkDebugf("Could not allocate render target"); | 428 SkDebugf("Could not allocate render target"); |
| 429 return false; | 429 return false; |
| 430 } | 430 } |
| 431 | 431 |
| 432 GrDrawState* ds = this->drawState(); | 432 GrDrawState ds; |
| 433 ds->setRenderTarget(rt.get()); | 433 ds.setRenderTarget(rt.get()); |
| 434 | 434 |
| 435 // if path rendering we have to setup a couple of things like the draw t
ype | 435 // if path rendering we have to setup a couple of things like the draw t
ype |
| 436 bool usePathRendering = gpu->glCaps().pathRenderingSupport() && random.n
extBool(); | 436 bool usePathRendering = gpu->glCaps().pathRenderingSupport() && random.n
extBool(); |
| 437 | 437 |
| 438 GrGpu::DrawType drawType = usePathRendering ? GrGpu::kDrawPath_DrawType
: | 438 GrGpu::DrawType drawType = usePathRendering ? GrGpu::kDrawPath_DrawType
: |
| 439 GrGpu::kDrawPoints_DrawTyp
e; | 439 GrGpu::kDrawPoints_DrawTyp
e; |
| 440 | 440 |
| 441 // twiddle drawstate knobs randomly | 441 // twiddle drawstate knobs randomly |
| 442 bool hasGeometryProcessor = !usePathRendering; | 442 bool hasGeometryProcessor = !usePathRendering; |
| 443 if (hasGeometryProcessor) { | 443 if (hasGeometryProcessor) { |
| 444 set_random_gp(fContext, gpu->glCaps(), ds, &random, dummyTextures); | 444 set_random_gp(fContext, gpu->glCaps(), &ds, &random, dummyTextures); |
| 445 } | 445 } |
| 446 set_random_color_coverage_stages(gpu, | 446 set_random_color_coverage_stages(gpu, |
| 447 ds, | 447 &ds, |
| 448 maxStages - hasGeometryProcessor, | 448 maxStages - hasGeometryProcessor, |
| 449 usePathRendering, | 449 usePathRendering, |
| 450 &random, | 450 &random, |
| 451 dummyTextures); | 451 dummyTextures); |
| 452 set_random_color(ds, &random); | 452 set_random_color(&ds, &random); |
| 453 set_random_coverage(ds, &random); | 453 set_random_coverage(&ds, &random); |
| 454 set_random_hints(ds, &random); | 454 set_random_hints(&ds, &random); |
| 455 set_random_state(ds, &random); | 455 set_random_state(&ds, &random); |
| 456 set_random_blend_func(ds, &random); | 456 set_random_blend_func(&ds, &random); |
| 457 set_random_stencil(ds, &random); | 457 set_random_stencil(&ds, &random); |
| 458 | 458 |
| 459 GrDeviceCoordTexture dstCopy; | 459 GrDeviceCoordTexture dstCopy; |
| 460 | 460 |
| 461 if (!this->setupDstReadIfNecessary(&dstCopy, NULL)) { | 461 if (!this->setupDstReadIfNecessary(&ds, &dstCopy, NULL)) { |
| 462 SkDebugf("Couldn't setup dst read texture"); | 462 SkDebugf("Couldn't setup dst read texture"); |
| 463 return false; | 463 return false; |
| 464 } | 464 } |
| 465 | 465 |
| 466 // create optimized draw state, setup readDst texture if required, and b
uild a descriptor | 466 // create optimized draw state, setup readDst texture if required, and b
uild a descriptor |
| 467 // and program. ODS creation can fail, so we have to check | 467 // and program. ODS creation can fail, so we have to check |
| 468 SkAutoTUnref<GrOptDrawState> ods(GrOptDrawState::Create(this->getDrawSta
te(), | 468 SkAutoTUnref<GrOptDrawState> ods(GrOptDrawState::Create(ds, |
| 469 gpu, | 469 gpu, |
| 470 &dstCopy, | 470 &dstCopy, |
| 471 drawType)); | 471 drawType)); |
| 472 if (!ods.get()) { | 472 if (!ods.get()) { |
| 473 ds->reset(); | |
| 474 continue; | 473 continue; |
| 475 } | 474 } |
| 476 SkAutoTUnref<GrGLProgram> program(GrGLProgramBuilder::CreateProgram(*ods
, drawType, gpu)); | 475 SkAutoTUnref<GrGLProgram> program(GrGLProgramBuilder::CreateProgram(*ods
, drawType, gpu)); |
| 477 if (NULL == program.get()) { | 476 if (NULL == program.get()) { |
| 478 SkDebugf("Failed to create program!"); | 477 SkDebugf("Failed to create program!"); |
| 479 return false; | 478 return false; |
| 480 } | 479 } |
| 481 | 480 |
| 482 // We have to reset the drawstate because we might have added a gp | |
| 483 ds->reset(); | |
| 484 | |
| 485 // because occasionally optimized drawstate creation will fail for valid
reasons, we only | 481 // because occasionally optimized drawstate creation will fail for valid
reasons, we only |
| 486 // want to increment on success | 482 // want to increment on success |
| 487 ++t; | 483 ++t; |
| 488 } | 484 } |
| 489 return true; | 485 return true; |
| 490 } | 486 } |
| 491 | 487 |
| 492 DEF_GPUTEST(GLPrograms, reporter, factory) { | 488 DEF_GPUTEST(GLPrograms, reporter, factory) { |
| 493 for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) { | 489 for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) { |
| 494 GrContext* context = factory->get(static_cast<GrContextFactory::GLContex
tType>(type)); | 490 GrContext* context = factory->get(static_cast<GrContextFactory::GLContex
tType>(type)); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 517 } | 513 } |
| 518 #endif | 514 #endif |
| 519 GrTestTarget target; | 515 GrTestTarget target; |
| 520 context->getTestTarget(&target); | 516 context->getTestTarget(&target); |
| 521 REPORTER_ASSERT(reporter, target.target()->programUnitTest(maxStages
)); | 517 REPORTER_ASSERT(reporter, target.target()->programUnitTest(maxStages
)); |
| 522 } | 518 } |
| 523 } | 519 } |
| 524 } | 520 } |
| 525 | 521 |
| 526 #endif | 522 #endif |
| OLD | NEW |