Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index ebf5ccef26edbb169df1dd861264f3487ae2acb8..2f408663071241df2270452d2354286647e907f9 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -390,7 +390,7 @@ ResourceProvider::ResourceProvider( |
size_t id_allocation_chunk_size, |
bool delegated_sync_points_required, |
bool use_gpu_memory_buffer_resources, |
- const std::vector<unsigned>& use_image_texture_targets) |
+ const BufferToTextureTargetMap& buffer_to_texture_target_map) |
: compositor_context_provider_(compositor_context_provider), |
shared_bitmap_manager_(shared_bitmap_manager), |
gpu_memory_buffer_manager_(gpu_memory_buffer_manager), |
@@ -413,7 +413,7 @@ ResourceProvider::ResourceProvider( |
best_render_buffer_format_(RGBA_8888), |
id_allocation_chunk_size_(id_allocation_chunk_size), |
use_sync_query_(false), |
- use_image_texture_targets_(use_image_texture_targets), |
+ buffer_to_texture_target_map_(buffer_to_texture_target_map), |
tracing_id_(g_next_resource_provider_tracing_id.GetNext()) { |
DCHECK(id_allocation_chunk_size_); |
DCHECK(thread_checker_.CalledOnValidThread()); |
@@ -599,8 +599,12 @@ ResourceId ResourceProvider::CreateGLTexture(const gfx::Size& size, |
DCHECK_LE(size.height(), max_texture_size_); |
DCHECK(thread_checker_.CalledOnValidThread()); |
+ // TODO(crbug.com/590317): We should not assume that all resources created by |
+ // ResourceProvider are GPU_READ_CPU_READ_WRITE. We should determine this |
+ // based on the current RasterBufferProvider's needs. |
GLenum target = type == RESOURCE_TYPE_GPU_MEMORY_BUFFER |
- ? GetImageTextureTarget(format) |
+ ? GetImageTextureTarget( |
+ gfx::BufferUsage::GPU_READ_CPU_READ_WRITE, format) |
: GL_TEXTURE_2D; |
ResourceId id = next_id_++; |
@@ -1900,11 +1904,13 @@ GLint ResourceProvider::GetActiveTextureUnit(GLES2Interface* gl) { |
return active_unit; |
} |
-GLenum ResourceProvider::GetImageTextureTarget(ResourceFormat format) { |
+GLenum ResourceProvider::GetImageTextureTarget(gfx::BufferUsage usage, |
+ ResourceFormat format) { |
gfx::BufferFormat buffer_format = BufferFormat(format); |
- DCHECK_GT(use_image_texture_targets_.size(), |
- static_cast<size_t>(buffer_format)); |
- return use_image_texture_targets_[static_cast<size_t>(buffer_format)]; |
+ auto found = buffer_to_texture_target_map_.find( |
+ BufferToTextureTargetKey(usage, buffer_format)); |
+ DCHECK(found != buffer_to_texture_target_map_.end()); |
+ return found->second; |
} |
void ResourceProvider::ValidateResource(ResourceId id) const { |