Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index d38110e6f363e66743d41694dfaaa056cc29fcb5..79cb5cfd43c6a9f7500607d4118585882b1de039 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 RendererSettings::ImageTextureTargetsMap& use_image_texture_targets) |
: compositor_context_provider_(compositor_context_provider), |
shared_bitmap_manager_(shared_bitmap_manager), |
gpu_memory_buffer_manager_(gpu_memory_buffer_manager), |
@@ -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_++; |
@@ -1884,11 +1888,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 = use_image_texture_targets_.find( |
+ RendererSettings::ImageTextureTargetKey(usage, buffer_format)); |
+ DCHECK(found != use_image_texture_targets_.end()); |
+ return found->second; |
} |
void ResourceProvider::ValidateResource(ResourceId id) const { |