| 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 |