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

Side by Side Diff: cc/resources/resource_provider.cc

Issue 1425533006: cc: Add flag to specify to ResourceProvider to always use GMBs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Incorporate review feedback Created 5 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 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "cc/resources/resource_provider.h" 5 #include "cc/resources/resource_provider.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/atomic_sequence_num.h" 10 #include "base/atomic_sequence_num.h"
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 317
318 ResourceProvider::Child::~Child() {} 318 ResourceProvider::Child::~Child() {}
319 319
320 scoped_ptr<ResourceProvider> ResourceProvider::Create( 320 scoped_ptr<ResourceProvider> ResourceProvider::Create(
321 OutputSurface* output_surface, 321 OutputSurface* output_surface,
322 SharedBitmapManager* shared_bitmap_manager, 322 SharedBitmapManager* shared_bitmap_manager,
323 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 323 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
324 BlockingTaskRunner* blocking_main_thread_task_runner, 324 BlockingTaskRunner* blocking_main_thread_task_runner,
325 int highp_threshold_min, 325 int highp_threshold_min,
326 size_t id_allocation_chunk_size, 326 size_t id_allocation_chunk_size,
327 bool use_gpu_memory_buffer_resources,
327 const std::vector<unsigned>& use_image_texture_targets) { 328 const std::vector<unsigned>& use_image_texture_targets) {
328 scoped_ptr<ResourceProvider> resource_provider(new ResourceProvider( 329 scoped_ptr<ResourceProvider> resource_provider(new ResourceProvider(
329 output_surface, shared_bitmap_manager, gpu_memory_buffer_manager, 330 output_surface, shared_bitmap_manager, gpu_memory_buffer_manager,
330 blocking_main_thread_task_runner, highp_threshold_min, 331 blocking_main_thread_task_runner, highp_threshold_min,
331 id_allocation_chunk_size, use_image_texture_targets)); 332 id_allocation_chunk_size, use_gpu_memory_buffer_resources,
333 use_image_texture_targets));
332 resource_provider->Initialize(); 334 resource_provider->Initialize();
333 return resource_provider; 335 return resource_provider;
334 } 336 }
335 337
336 ResourceProvider::~ResourceProvider() { 338 ResourceProvider::~ResourceProvider() {
337 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( 339 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider(
338 this); 340 this);
339 341
340 while (!children_.empty()) 342 while (!children_.empty())
341 DestroyChildInternal(children_.begin(), FOR_SHUTDOWN); 343 DestroyChildInternal(children_.begin(), FOR_SHUTDOWN);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 DCHECK(resource); 381 DCHECK(resource);
380 resource->lost = true; 382 resource->lost = true;
381 } 383 }
382 384
383 ResourceId ResourceProvider::CreateResource(const gfx::Size& size, 385 ResourceId ResourceProvider::CreateResource(const gfx::Size& size,
384 TextureHint hint, 386 TextureHint hint,
385 ResourceFormat format) { 387 ResourceFormat format) {
386 DCHECK(!size.IsEmpty()); 388 DCHECK(!size.IsEmpty());
387 switch (default_resource_type_) { 389 switch (default_resource_type_) {
388 case RESOURCE_TYPE_GL_TEXTURE: 390 case RESOURCE_TYPE_GL_TEXTURE:
389 return CreateGLTexture(size, 391 return CreateGLTexture(size, use_gpu_memory_buffer_resources_
390 GL_TEXTURE_2D, 392 ? GetImageTextureTarget(format)
391 hint, 393 : GL_TEXTURE_2D,
392 format); 394 hint, format);
393 case RESOURCE_TYPE_BITMAP: 395 case RESOURCE_TYPE_BITMAP:
394 DCHECK_EQ(RGBA_8888, format); 396 DCHECK_EQ(RGBA_8888, format);
395 return CreateBitmap(size); 397 return CreateBitmap(size);
396 } 398 }
397 399
398 LOG(FATAL) << "Invalid default resource type."; 400 LOG(FATAL) << "Invalid default resource type.";
399 return 0; 401 return 0;
400 } 402 }
401 403
402 ResourceId ResourceProvider::CreateResourceWithImageTextureTarget( 404 ResourceId ResourceProvider::CreateResourceWithImageTextureTarget(
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 } 811 }
810 812
811 ResourceProvider::ScopedWriteLockGL::ScopedWriteLockGL( 813 ResourceProvider::ScopedWriteLockGL::ScopedWriteLockGL(
812 ResourceProvider* resource_provider, 814 ResourceProvider* resource_provider,
813 ResourceId resource_id) 815 ResourceId resource_id)
814 : resource_provider_(resource_provider), 816 : resource_provider_(resource_provider),
815 resource_(resource_provider->LockForWrite(resource_id)) { 817 resource_(resource_provider->LockForWrite(resource_id)) {
816 resource_provider_->LazyAllocate(resource_); 818 resource_provider_->LazyAllocate(resource_);
817 texture_id_ = resource_->gl_id; 819 texture_id_ = resource_->gl_id;
818 DCHECK(texture_id_); 820 DCHECK(texture_id_);
821 if (resource_->dirty_image)
822 resource_provider_->BindImageForSampling(resource_);
819 } 823 }
820 824
821 ResourceProvider::ScopedWriteLockGL::~ScopedWriteLockGL() { 825 ResourceProvider::ScopedWriteLockGL::~ScopedWriteLockGL() {
822 resource_provider_->UnlockForWrite(resource_); 826 resource_provider_->UnlockForWrite(resource_);
823 } 827 }
824 828
825 void ResourceProvider::PopulateSkBitmapWithResource( 829 void ResourceProvider::PopulateSkBitmapWithResource(
826 SkBitmap* sk_bitmap, const Resource* resource) { 830 SkBitmap* sk_bitmap, const Resource* resource) {
827 DCHECK_EQ(RGBA_8888, resource->format); 831 DCHECK_EQ(RGBA_8888, resource->format);
828 SkImageInfo info = SkImageInfo::MakeN32Premul(resource->size.width(), 832 SkImageInfo info = SkImageInfo::MakeN32Premul(resource->size.width(),
(...skipping 24 matching lines...) Expand all
853 857
854 ResourceProvider::ScopedWriteLockSoftware::~ScopedWriteLockSoftware() { 858 ResourceProvider::ScopedWriteLockSoftware::~ScopedWriteLockSoftware() {
855 DCHECK(thread_checker_.CalledOnValidThread()); 859 DCHECK(thread_checker_.CalledOnValidThread());
856 resource_provider_->UnlockForWrite(resource_); 860 resource_provider_->UnlockForWrite(resource_);
857 } 861 }
858 862
859 ResourceProvider::ScopedWriteLockGpuMemoryBuffer:: 863 ResourceProvider::ScopedWriteLockGpuMemoryBuffer::
860 ScopedWriteLockGpuMemoryBuffer(ResourceProvider* resource_provider, 864 ScopedWriteLockGpuMemoryBuffer(ResourceProvider* resource_provider,
861 ResourceId resource_id) 865 ResourceId resource_id)
862 : resource_provider_(resource_provider), 866 : resource_provider_(resource_provider),
863 resource_(resource_provider->LockForWrite(resource_id)), 867 resource_(resource_provider->LockForWrite(resource_id)) {
864 gpu_memory_buffer_manager_(resource_provider->gpu_memory_buffer_manager_),
865 gpu_memory_buffer_(nullptr),
866 size_(resource_->size),
867 format_(resource_->format) {
868 DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource_->type); 868 DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource_->type);
869 std::swap(gpu_memory_buffer_, resource_->gpu_memory_buffer); 869 gpu_memory_buffer_.reset(resource_->gpu_memory_buffer);
870 resource_->gpu_memory_buffer = nullptr;
870 } 871 }
871 872
872 ResourceProvider::ScopedWriteLockGpuMemoryBuffer:: 873 ResourceProvider::ScopedWriteLockGpuMemoryBuffer::
873 ~ScopedWriteLockGpuMemoryBuffer() { 874 ~ScopedWriteLockGpuMemoryBuffer() {
874 DCHECK(thread_checker_.CalledOnValidThread()); 875 DCHECK(thread_checker_.CalledOnValidThread());
875 resource_provider_->UnlockForWrite(resource_); 876 resource_provider_->UnlockForWrite(resource_);
876 if (!gpu_memory_buffer_) 877 if (!gpu_memory_buffer_)
877 return; 878 return;
878 879
880 DCHECK(!resource_->gpu_memory_buffer);
879 resource_provider_->LazyCreate(resource_); 881 resource_provider_->LazyCreate(resource_);
880 882 resource_->gpu_memory_buffer = gpu_memory_buffer_.release();
881 if (!resource_->image_id) {
882 GLES2Interface* gl = resource_provider_->ContextGL();
883 DCHECK(gl);
884
885 #if defined(OS_CHROMEOS)
886 // TODO(reveman): GL_COMMANDS_ISSUED_CHROMIUM is used for synchronization
887 // on ChromeOS to avoid some performance issues. This only works with
888 // shared memory backed buffers. crbug.com/436314
889 DCHECK_EQ(gpu_memory_buffer_->GetHandle().type, gfx::SHARED_MEMORY_BUFFER);
890 #endif
891
892 resource_->image_id = gl->CreateImageCHROMIUM(
893 gpu_memory_buffer_->AsClientBuffer(), size_.width(), size_.height(),
894 GLInternalFormat(resource_->format));
895 }
896
897 std::swap(resource_->gpu_memory_buffer, gpu_memory_buffer_);
898 resource_->allocated = true; 883 resource_->allocated = true;
899 resource_->dirty_image = true; 884 resource_provider_->LazyAllocateImage(resource_);
885 resource_->is_overlay_candidate = true;
900 886
901 // GpuMemoryBuffer provides direct access to the memory used by the GPU. 887 // GpuMemoryBuffer provides direct access to the memory used by the GPU.
902 // Read lock fences are required to ensure that we're not trying to map a 888 // Read lock fences are required to ensure that we're not trying to map a
903 // buffer that is currently in-use by the GPU. 889 // buffer that is currently in-use by the GPU.
904 resource_->read_lock_fences_enabled = true; 890 resource_->read_lock_fences_enabled = true;
905 } 891 }
906 892
907 gfx::GpuMemoryBuffer* 893 gfx::GpuMemoryBuffer*
908 ResourceProvider::ScopedWriteLockGpuMemoryBuffer::GetGpuMemoryBuffer() { 894 ResourceProvider::ScopedWriteLockGpuMemoryBuffer::GetGpuMemoryBuffer() {
909 if (gpu_memory_buffer_) 895 if (!gpu_memory_buffer_) {
910 return gpu_memory_buffer_; 896 gpu_memory_buffer_ =
911 scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer = 897 resource_provider_->gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer(
912 gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer( 898 resource_->size, BufferFormat(resource_->format),
913 size_, BufferFormat(format_), 899 gfx::BufferUsage::GPU_READ_CPU_READ_WRITE);
914 gfx::BufferUsage::GPU_READ_CPU_READ_WRITE); 900 }
915 gpu_memory_buffer_ = gpu_memory_buffer.release(); 901 return gpu_memory_buffer_.get();
916 return gpu_memory_buffer_;
917 } 902 }
918 903
919 ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr( 904 ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr(
920 ResourceProvider* resource_provider, 905 ResourceProvider* resource_provider,
921 ResourceId resource_id) 906 ResourceId resource_id)
922 : resource_provider_(resource_provider), 907 : resource_provider_(resource_provider),
923 resource_(resource_provider->LockForWrite(resource_id)) { 908 resource_(resource_provider->LockForWrite(resource_id)) {
924 DCHECK(thread_checker_.CalledOnValidThread()); 909 DCHECK(thread_checker_.CalledOnValidThread());
925 resource_provider_->LazyAllocate(resource_); 910 resource_provider_->LazyAllocate(resource_);
926 } 911 }
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
995 gl_->Finish(); 980 gl_->Finish();
996 } 981 }
997 982
998 ResourceProvider::ResourceProvider( 983 ResourceProvider::ResourceProvider(
999 OutputSurface* output_surface, 984 OutputSurface* output_surface,
1000 SharedBitmapManager* shared_bitmap_manager, 985 SharedBitmapManager* shared_bitmap_manager,
1001 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 986 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
1002 BlockingTaskRunner* blocking_main_thread_task_runner, 987 BlockingTaskRunner* blocking_main_thread_task_runner,
1003 int highp_threshold_min, 988 int highp_threshold_min,
1004 size_t id_allocation_chunk_size, 989 size_t id_allocation_chunk_size,
990 bool use_gpu_memory_buffer_resources,
1005 const std::vector<unsigned>& use_image_texture_targets) 991 const std::vector<unsigned>& use_image_texture_targets)
1006 : output_surface_(output_surface), 992 : output_surface_(output_surface),
1007 shared_bitmap_manager_(shared_bitmap_manager), 993 shared_bitmap_manager_(shared_bitmap_manager),
1008 gpu_memory_buffer_manager_(gpu_memory_buffer_manager), 994 gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
1009 blocking_main_thread_task_runner_(blocking_main_thread_task_runner), 995 blocking_main_thread_task_runner_(blocking_main_thread_task_runner),
1010 lost_output_surface_(false), 996 lost_output_surface_(false),
1011 highp_threshold_min_(highp_threshold_min), 997 highp_threshold_min_(highp_threshold_min),
1012 next_id_(1), 998 next_id_(1),
1013 next_child_(1), 999 next_child_(1),
1014 default_resource_type_(RESOURCE_TYPE_BITMAP), 1000 default_resource_type_(RESOURCE_TYPE_BITMAP),
1001 use_gpu_memory_buffer_resources_(use_gpu_memory_buffer_resources),
1015 use_texture_storage_ext_(false), 1002 use_texture_storage_ext_(false),
1016 use_texture_format_bgra_(false), 1003 use_texture_format_bgra_(false),
1017 use_texture_usage_hint_(false), 1004 use_texture_usage_hint_(false),
1018 use_compressed_texture_etc1_(false), 1005 use_compressed_texture_etc1_(false),
1019 yuv_resource_format_(LUMINANCE_8), 1006 yuv_resource_format_(LUMINANCE_8),
1020 max_texture_size_(0), 1007 max_texture_size_(0),
1021 best_texture_format_(RGBA_8888), 1008 best_texture_format_(RGBA_8888),
1022 best_render_buffer_format_(RGBA_8888), 1009 best_render_buffer_format_(RGBA_8888),
1023 id_allocation_chunk_size_(id_allocation_chunk_size), 1010 id_allocation_chunk_size_(id_allocation_chunk_size),
1024 use_sync_query_(false), 1011 use_sync_query_(false),
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1302 resource->read_lock_fences_enabled = source->read_lock_fences_enabled; 1289 resource->read_lock_fences_enabled = source->read_lock_fences_enabled;
1303 resource->is_overlay_candidate = source->is_overlay_candidate; 1290 resource->is_overlay_candidate = source->is_overlay_candidate;
1304 1291
1305 if (source->type == RESOURCE_TYPE_BITMAP) { 1292 if (source->type == RESOURCE_TYPE_BITMAP) {
1306 resource->mailbox_holder.mailbox = source->shared_bitmap_id; 1293 resource->mailbox_holder.mailbox = source->shared_bitmap_id;
1307 resource->is_software = true; 1294 resource->is_software = true;
1308 } else if (!source->mailbox.IsValid()) { 1295 } else if (!source->mailbox.IsValid()) {
1309 LazyCreate(source); 1296 LazyCreate(source);
1310 DCHECK(source->gl_id); 1297 DCHECK(source->gl_id);
1311 DCHECK(source->origin == Resource::INTERNAL); 1298 DCHECK(source->origin == Resource::INTERNAL);
1312 if (source->image_id) { 1299 if (source->image_id && source->dirty_image)
1313 DCHECK(source->dirty_image);
1314 gl->BindTexture(resource->mailbox_holder.texture_target, source->gl_id);
1315 BindImageForSampling(source); 1300 BindImageForSampling(source);
1316 }
1317 // This is a resource allocated by the compositor, we need to produce it. 1301 // This is a resource allocated by the compositor, we need to produce it.
1318 // Don't set a sync point, the caller will do it. 1302 // Don't set a sync point, the caller will do it.
1319 gl->GenMailboxCHROMIUM(resource->mailbox_holder.mailbox.name); 1303 gl->GenMailboxCHROMIUM(resource->mailbox_holder.mailbox.name);
1320 gl->ProduceTextureDirectCHROMIUM(source->gl_id, 1304 gl->ProduceTextureDirectCHROMIUM(source->gl_id,
1321 resource->mailbox_holder.texture_target, 1305 resource->mailbox_holder.texture_target,
1322 resource->mailbox_holder.mailbox.name); 1306 resource->mailbox_holder.mailbox.name);
1323 1307
1324 source->mailbox = TextureMailbox(resource->mailbox_holder); 1308 source->mailbox = TextureMailbox(resource->mailbox_holder);
1325 } else { 1309 } else {
1326 DCHECK(source->mailbox.IsTexture()); 1310 DCHECK(source->mailbox.IsTexture());
1327 if (source->image_id && source->dirty_image) { 1311 if (source->image_id && source->dirty_image) {
1328 DCHECK(source->gl_id); 1312 DCHECK(source->gl_id);
1329 DCHECK(source->origin == Resource::INTERNAL); 1313 DCHECK(source->origin == Resource::INTERNAL);
1330 gl->BindTexture(resource->mailbox_holder.texture_target, source->gl_id);
1331 BindImageForSampling(source); 1314 BindImageForSampling(source);
1332 } 1315 }
1333 // This is either an external resource, or a compositor resource that we 1316 // This is either an external resource, or a compositor resource that we
1334 // already exported. Make sure to forward the sync point that we were given. 1317 // already exported. Make sure to forward the sync point that we were given.
1335 resource->mailbox_holder.mailbox = source->mailbox.mailbox(); 1318 resource->mailbox_holder.mailbox = source->mailbox.mailbox();
1336 resource->mailbox_holder.texture_target = source->mailbox.target(); 1319 resource->mailbox_holder.texture_target = source->mailbox.target();
1337 resource->mailbox_holder.sync_point = source->mailbox.sync_point(); 1320 resource->mailbox_holder.sync_point = source->mailbox.sync_point();
1338 source->mailbox.set_sync_point(0); 1321 source->mailbox.set_sync_point(0);
1339 } 1322 }
1340 } 1323 }
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1508 if (resource->allocated) 1491 if (resource->allocated)
1509 return; 1492 return;
1510 LazyCreate(resource); 1493 LazyCreate(resource);
1511 if (!resource->gl_id) 1494 if (!resource->gl_id)
1512 return; 1495 return;
1513 resource->allocated = true; 1496 resource->allocated = true;
1514 GLES2Interface* gl = ContextGL(); 1497 GLES2Interface* gl = ContextGL();
1515 gfx::Size& size = resource->size; 1498 gfx::Size& size = resource->size;
1516 ResourceFormat format = resource->format; 1499 ResourceFormat format = resource->format;
1517 gl->BindTexture(resource->target, resource->gl_id); 1500 gl->BindTexture(resource->target, resource->gl_id);
1518 if (use_texture_storage_ext_ && 1501 if (use_gpu_memory_buffer_resources_) {
1519 IsFormatSupportedForStorage(format, use_texture_format_bgra_) && 1502 resource->gpu_memory_buffer =
1520 (resource->hint & TEXTURE_HINT_IMMUTABLE)) { 1503 gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer(
1504 size, BufferFormat(format),
1505 gfx::BufferUsage::SCANOUT)
1506 .release();
1507 LazyAllocateImage(resource);
1508 resource->is_overlay_candidate = true;
1509 } else if (use_texture_storage_ext_ &&
1510 IsFormatSupportedForStorage(format, use_texture_format_bgra_) &&
1511 (resource->hint & TEXTURE_HINT_IMMUTABLE)) {
1521 GLenum storage_format = TextureToStorageFormat(format); 1512 GLenum storage_format = TextureToStorageFormat(format);
1522 gl->TexStorage2DEXT(resource->target, 1, storage_format, size.width(), 1513 gl->TexStorage2DEXT(resource->target, 1, storage_format, size.width(),
1523 size.height()); 1514 size.height());
1524 } else { 1515 } else {
1525 // ETC1 does not support preallocation. 1516 // ETC1 does not support preallocation.
1526 if (format != ETC1) { 1517 if (format != ETC1) {
1527 gl->TexImage2D(resource->target, 0, GLInternalFormat(format), 1518 gl->TexImage2D(resource->target, 0, GLInternalFormat(format),
1528 size.width(), size.height(), 0, GLDataFormat(format), 1519 size.width(), size.height(), 0, GLDataFormat(format),
1529 GLDataType(format), NULL); 1520 GLDataType(format), NULL);
1530 } 1521 }
1531 } 1522 }
1532 } 1523 }
1533 1524
1525 void ResourceProvider::LazyAllocateImage(Resource* resource) {
1526 DCHECK(resource->gpu_memory_buffer);
1527 DCHECK(resource->gl_id);
1528 DCHECK(resource->allocated);
1529 if (!resource->image_id) {
1530 GLES2Interface* gl = ContextGL();
1531 DCHECK(gl);
1532
1533 #if defined(OS_CHROMEOS)
1534 // TODO(reveman): GL_COMMANDS_ISSUED_CHROMIUM is used for synchronization
1535 // on ChromeOS to avoid some performance issues. This only works with
1536 // shared memory backed buffers. crbug.com/436314
1537 DCHECK_EQ(gpu_memory_buffer->GetHandle().type, gfx::SHARED_MEMORY_BUFFER);
1538 #endif
1539 resource->image_id = gl->CreateImageCHROMIUM(
1540 resource->gpu_memory_buffer->AsClientBuffer(), resource->size.width(),
1541 resource->size.height(), GLInternalFormat(resource->format));
1542 }
1543 resource->dirty_image = true;
reveman 2015/11/02 23:10:25 nit: it's unexpected that this function (with Lazy
ccameron 2015/11/03 04:20:07 Done.
1544 }
1545
1534 void ResourceProvider::BindImageForSampling(Resource* resource) { 1546 void ResourceProvider::BindImageForSampling(Resource* resource) {
1535 GLES2Interface* gl = ContextGL(); 1547 GLES2Interface* gl = ContextGL();
1536 DCHECK(resource->gl_id); 1548 DCHECK(resource->gl_id);
1537 DCHECK(resource->image_id); 1549 DCHECK(resource->image_id);
1538 1550
1539 // Release image currently bound to texture. 1551 // Release image currently bound to texture.
1552 gl->BindTexture(resource->target, resource->gl_id);
reveman 2015/11/02 23:10:25 nit: as we didn't need this in the past, would it
ccameron 2015/11/03 04:20:07 All of the callers used to do this independently,
1540 if (resource->bound_image_id) 1553 if (resource->bound_image_id)
1541 gl->ReleaseTexImage2DCHROMIUM(resource->target, resource->bound_image_id); 1554 gl->ReleaseTexImage2DCHROMIUM(resource->target, resource->bound_image_id);
1542 gl->BindTexImage2DCHROMIUM(resource->target, resource->image_id); 1555 gl->BindTexImage2DCHROMIUM(resource->target, resource->image_id);
1543 resource->bound_image_id = resource->image_id; 1556 resource->bound_image_id = resource->image_id;
1544 resource->dirty_image = false; 1557 resource->dirty_image = false;
1545 } 1558 }
1546 1559
1547 void ResourceProvider::WaitSyncPointIfNeeded(ResourceId id) { 1560 void ResourceProvider::WaitSyncPointIfNeeded(ResourceId id) {
1548 Resource* resource = GetResource(id); 1561 Resource* resource = GetResource(id);
1549 DCHECK_EQ(resource->exported_count, 0); 1562 DCHECK_EQ(resource->exported_count, 0);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1637 const int kImportance = 2; 1650 const int kImportance = 2;
1638 pmd->CreateSharedGlobalAllocatorDump(guid); 1651 pmd->CreateSharedGlobalAllocatorDump(guid);
1639 pmd->AddOwnershipEdge(dump->guid(), guid, kImportance); 1652 pmd->AddOwnershipEdge(dump->guid(), guid, kImportance);
1640 } 1653 }
1641 } 1654 }
1642 1655
1643 return true; 1656 return true;
1644 } 1657 }
1645 1658
1646 } // namespace cc 1659 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698