OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "gpu/command_buffer/service/program_manager.h" | 5 #include "gpu/command_buffer/service/program_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 std::string info_log = "Name conflicts between an uniform and an " | 546 std::string info_log = "Name conflicts between an uniform and an " |
547 "attribute: " + conflicting_name; | 547 "attribute: " + conflicting_name; |
548 set_log_info(ProcessLogInfo(info_log).c_str()); | 548 set_log_info(ProcessLogInfo(info_log).c_str()); |
549 return false; | 549 return false; |
550 } | 550 } |
551 if (!CheckVaryingsPacking(varyings_packing_option)) { | 551 if (!CheckVaryingsPacking(varyings_packing_option)) { |
552 set_log_info("Varyings over maximum register limit"); | 552 set_log_info("Varyings over maximum register limit"); |
553 return false; | 553 return false; |
554 } | 554 } |
555 | 555 |
556 TimeTicks before_time = TimeTicks::HighResNow(); | 556 TimeTicks before_time = TimeTicks::Now(); |
557 bool link = true; | 557 bool link = true; |
558 ProgramCache* cache = manager_->program_cache_; | 558 ProgramCache* cache = manager_->program_cache_; |
559 if (cache) { | 559 if (cache) { |
560 DCHECK(!attached_shaders_[0]->signature_source().empty() && | 560 DCHECK(!attached_shaders_[0]->signature_source().empty() && |
561 !attached_shaders_[1]->signature_source().empty()); | 561 !attached_shaders_[1]->signature_source().empty()); |
562 ProgramCache::LinkedProgramStatus status = cache->GetLinkedProgramStatus( | 562 ProgramCache::LinkedProgramStatus status = cache->GetLinkedProgramStatus( |
563 attached_shaders_[0]->signature_source(), | 563 attached_shaders_[0]->signature_source(), |
564 vertex_translator, | 564 vertex_translator, |
565 attached_shaders_[1]->signature_source(), | 565 attached_shaders_[1]->signature_source(), |
566 fragment_translator, | 566 fragment_translator, |
567 &bind_attrib_location_map_); | 567 &bind_attrib_location_map_); |
568 | 568 |
569 if (status == ProgramCache::LINK_SUCCEEDED) { | 569 if (status == ProgramCache::LINK_SUCCEEDED) { |
570 ProgramCache::ProgramLoadResult success = | 570 ProgramCache::ProgramLoadResult success = |
571 cache->LoadLinkedProgram(service_id(), | 571 cache->LoadLinkedProgram(service_id(), |
572 attached_shaders_[0].get(), | 572 attached_shaders_[0].get(), |
573 vertex_translator, | 573 vertex_translator, |
574 attached_shaders_[1].get(), | 574 attached_shaders_[1].get(), |
575 fragment_translator, | 575 fragment_translator, |
576 &bind_attrib_location_map_, | 576 &bind_attrib_location_map_, |
577 shader_callback); | 577 shader_callback); |
578 link = success != ProgramCache::PROGRAM_LOAD_SUCCESS; | 578 link = success != ProgramCache::PROGRAM_LOAD_SUCCESS; |
579 UMA_HISTOGRAM_BOOLEAN("GPU.ProgramCache.LoadBinarySuccess", !link); | 579 UMA_HISTOGRAM_BOOLEAN("GPU.ProgramCache.LoadBinarySuccess", !link); |
580 } | 580 } |
581 } | 581 } |
582 | 582 |
583 if (link) { | 583 if (link) { |
584 ExecuteBindAttribLocationCalls(); | 584 ExecuteBindAttribLocationCalls(); |
585 before_time = TimeTicks::HighResNow(); | 585 before_time = TimeTicks::Now(); |
586 if (cache && gfx::g_driver_gl.ext.b_GL_ARB_get_program_binary) { | 586 if (cache && gfx::g_driver_gl.ext.b_GL_ARB_get_program_binary) { |
587 glProgramParameteri(service_id(), | 587 glProgramParameteri(service_id(), |
588 PROGRAM_BINARY_RETRIEVABLE_HINT, | 588 PROGRAM_BINARY_RETRIEVABLE_HINT, |
589 GL_TRUE); | 589 GL_TRUE); |
590 } | 590 } |
591 glLinkProgram(service_id()); | 591 glLinkProgram(service_id()); |
592 } | 592 } |
593 | 593 |
594 GLint success = 0; | 594 GLint success = 0; |
595 glGetProgramiv(service_id(), GL_LINK_STATUS, &success); | 595 glGetProgramiv(service_id(), GL_LINK_STATUS, &success); |
596 if (success == GL_TRUE) { | 596 if (success == GL_TRUE) { |
597 Update(); | 597 Update(); |
598 if (link) { | 598 if (link) { |
599 if (cache) { | 599 if (cache) { |
600 cache->SaveLinkedProgram(service_id(), | 600 cache->SaveLinkedProgram(service_id(), |
601 attached_shaders_[0].get(), | 601 attached_shaders_[0].get(), |
602 vertex_translator, | 602 vertex_translator, |
603 attached_shaders_[1].get(), | 603 attached_shaders_[1].get(), |
604 fragment_translator, | 604 fragment_translator, |
605 &bind_attrib_location_map_, | 605 &bind_attrib_location_map_, |
606 shader_callback); | 606 shader_callback); |
607 } | 607 } |
608 UMA_HISTOGRAM_CUSTOM_COUNTS( | 608 UMA_HISTOGRAM_CUSTOM_COUNTS( |
609 "GPU.ProgramCache.BinaryCacheMissTime", | 609 "GPU.ProgramCache.BinaryCacheMissTime", |
610 static_cast<base::HistogramBase::Sample>( | 610 static_cast<base::HistogramBase::Sample>( |
611 (TimeTicks::HighResNow() - before_time).InMicroseconds()), | 611 (TimeTicks::Now() - before_time).InMicroseconds()), |
612 0, | 612 0, |
613 static_cast<base::HistogramBase::Sample>( | 613 static_cast<base::HistogramBase::Sample>( |
614 TimeDelta::FromSeconds(10).InMicroseconds()), | 614 TimeDelta::FromSeconds(10).InMicroseconds()), |
615 50); | 615 50); |
616 } else { | 616 } else { |
617 UMA_HISTOGRAM_CUSTOM_COUNTS( | 617 UMA_HISTOGRAM_CUSTOM_COUNTS( |
618 "GPU.ProgramCache.BinaryCacheHitTime", | 618 "GPU.ProgramCache.BinaryCacheHitTime", |
619 static_cast<base::HistogramBase::Sample>( | 619 static_cast<base::HistogramBase::Sample>( |
620 (TimeTicks::HighResNow() - before_time).InMicroseconds()), | 620 (TimeTicks::Now() - before_time).InMicroseconds()), |
621 0, | 621 0, |
622 static_cast<base::HistogramBase::Sample>( | 622 static_cast<base::HistogramBase::Sample>( |
623 TimeDelta::FromSeconds(1).InMicroseconds()), | 623 TimeDelta::FromSeconds(1).InMicroseconds()), |
624 50); | 624 50); |
625 } | 625 } |
626 } else { | 626 } else { |
627 UpdateLogInfo(); | 627 UpdateLogInfo(); |
628 } | 628 } |
629 return success == GL_TRUE; | 629 return success == GL_TRUE; |
630 } | 630 } |
(...skipping 784 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1415 DCHECK(program); | 1415 DCHECK(program); |
1416 program->ClearUniforms(&zero_); | 1416 program->ClearUniforms(&zero_); |
1417 } | 1417 } |
1418 | 1418 |
1419 int32 ProgramManager::MakeFakeLocation(int32 index, int32 element) { | 1419 int32 ProgramManager::MakeFakeLocation(int32 index, int32 element) { |
1420 return index + element * 0x10000; | 1420 return index + element * 0x10000; |
1421 } | 1421 } |
1422 | 1422 |
1423 } // namespace gles2 | 1423 } // namespace gles2 |
1424 } // namespace gpu | 1424 } // namespace gpu |
OLD | NEW |