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

Side by Side Diff: content/common/gpu/gpu_command_buffer_stub.cc

Issue 962723002: Change CHROMIUM_image declarations to support multi planar input. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: reveman@ comments. Created 5 years, 9 months 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 (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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/bind_helpers.h" 6 #include "base/bind_helpers.h"
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/hash.h" 8 #include "base/hash.h"
9 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
10 #include "base/memory/shared_memory.h" 10 #include "base/memory/shared_memory.h"
(...skipping 922 matching lines...) Expand 10 before | Expand all | Expand 10 after
933 if (has_callback) { 933 if (has_callback) {
934 if (!memory_manager_client_state_) { 934 if (!memory_manager_client_state_) {
935 memory_manager_client_state_.reset(GetMemoryManager()->CreateClientState( 935 memory_manager_client_state_.reset(GetMemoryManager()->CreateClientState(
936 this, surface_id_ != 0, true)); 936 this, surface_id_ != 0, true));
937 } 937 }
938 } else { 938 } else {
939 memory_manager_client_state_.reset(); 939 memory_manager_client_state_.reset();
940 } 940 }
941 } 941 }
942 942
943 void GpuCommandBufferStub::OnCreateImage(int32 id, 943 void GpuCommandBufferStub::OnCreateImage(
944 gfx::GpuMemoryBufferHandle handle, 944 int32 id,
945 gfx::Size size, 945 std::vector<gfx::GpuMemoryBufferHandle> handles,
946 gfx::GpuMemoryBuffer::Format format, 946 gfx::Size size,
947 uint32 internalformat) { 947 std::vector<gfx::GpuMemoryBuffer::Format> formats,
948 uint32 internalformat) {
948 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnCreateImage"); 949 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnCreateImage");
949 950
950 if (!decoder_) 951 if (!decoder_)
951 return; 952 return;
952 953
953 gpu::gles2::ImageManager* image_manager = decoder_->GetImageManager(); 954 gpu::gles2::ImageManager* image_manager = decoder_->GetImageManager();
954 DCHECK(image_manager); 955 DCHECK(image_manager);
955 if (image_manager->LookupImage(id)) { 956 if (image_manager->LookupImage(id)) {
956 LOG(ERROR) << "Image already exists with same ID."; 957 LOG(ERROR) << "Image already exists with same ID.";
957 return; 958 return;
958 } 959 }
959 960
960 if (!gpu::ImageFactory::IsGpuMemoryBufferFormatSupported( 961 if (!gpu::ImageFactory::IsImageFormatSupported(internalformat)) {
961 format, decoder_->GetCapabilities())) { 962 LOG(ERROR) << "Internalformat is not supported.";
962 LOG(ERROR) << "Format is not supported.";
963 return; 963 return;
964 } 964 }
965 965
966 if (!gpu::ImageFactory::IsImageSizeValidForGpuMemoryBufferFormat(size, 966 size_t num_buffers =
967 format)) { 967 gpu::ImageFactory::NumberOfPlanesForImageFormat(internalformat);
968 LOG(ERROR) << "Invalid image size for format."; 968
969 // Checks to make sure that the input isn't coming from a malicious renderer.
970 if (handles.size() != num_buffers) {
971 LOG(ERROR) << "Invalid number of GpuMemoryBufferHandle given for "
972 "internalformat.";
973 return;
974 }
975 if (formats.size() != num_buffers) {
976 LOG(ERROR) << "Invalid number of GpuMemoryBuffer::Format given for "
977 "internalformat.";
969 return; 978 return;
970 } 979 }
971 980
972 if (!gpu::ImageFactory::IsImageFormatCompatibleWithGpuMemoryBufferFormat( 981 for (size_t i = 0; i < num_buffers; ++i) {
973 internalformat, format)) { 982 const gfx::GpuMemoryBuffer::Format& format = formats[i];
974 LOG(ERROR) << "Incompatible image format."; 983 if (!gpu::ImageFactory::IsGpuMemoryBufferFormatSupported(
975 return; 984 format, decoder_->GetCapabilities())) {
985 LOG(ERROR) << "Format is not supported.";
986 return;
987 }
988 if (!gpu::ImageFactory::IsImageSizeValidForGpuMemoryBufferFormat(
989 size, format)) {
990 LOG(ERROR) << "Invalid image size for format.";
991 return;
992 }
993 if (!gpu::ImageFactory::IsImageFormatCompatibleWithGpuMemoryBufferFormat(
994 internalformat, i, format)) {
995 LOG(ERROR) << "Incompatible image format.";
996 return;
997 }
976 } 998 }
977 999
978 scoped_refptr<gfx::GLImage> image = channel()->CreateImageForGpuMemoryBuffer( 1000 scoped_refptr<gfx::GLImage> image = channel()->CreateImageForGpuMemoryBuffers(
979 handle, size, format, internalformat); 1001 handles, size, formats, internalformat);
980 if (!image.get()) 1002 if (!image.get())
981 return; 1003 return;
982 1004
983 image_manager->AddImage(image.get(), id); 1005 image_manager->AddImage(image.get(), id);
984 } 1006 }
985 1007
986 void GpuCommandBufferStub::OnDestroyImage(int32 id) { 1008 void GpuCommandBufferStub::OnDestroyImage(int32 id) {
987 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnDestroyImage"); 1009 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnDestroyImage");
988 1010
989 if (!decoder_) 1011 if (!decoder_)
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1102 Send(new GpuCommandBufferMsg_SwapBuffersCompleted(route_id_, latency_info)); 1124 Send(new GpuCommandBufferMsg_SwapBuffersCompleted(route_id_, latency_info));
1103 } 1125 }
1104 1126
1105 void GpuCommandBufferStub::SendUpdateVSyncParameters(base::TimeTicks timebase, 1127 void GpuCommandBufferStub::SendUpdateVSyncParameters(base::TimeTicks timebase,
1106 base::TimeDelta interval) { 1128 base::TimeDelta interval) {
1107 Send(new GpuCommandBufferMsg_UpdateVSyncParameters(route_id_, timebase, 1129 Send(new GpuCommandBufferMsg_UpdateVSyncParameters(route_id_, timebase,
1108 interval)); 1130 interval));
1109 } 1131 }
1110 1132
1111 } // namespace content 1133 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698