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

Side by Side Diff: content/common/gpu/client/gl_helper.cc

Issue 1427543002: Modified old wait sync point functions to also accept new sync tokens. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix mock gpu video accelerator factory 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 (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 "content/common/gpu/client/gl_helper.h" 5 #include "content/common/gpu/client/gl_helper.h"
6 6
7 #include <queue> 7 #include <queue>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 return; 126 return;
127 std::string extensions_string = 127 std::string extensions_string =
128 " " + std::string(reinterpret_cast<const char*>(extensions)) + " "; 128 " " + std::string(reinterpret_cast<const char*>(extensions)) + " ";
129 if (extensions_string.find(" GL_EXT_draw_buffers ") != std::string::npos) { 129 if (extensions_string.find(" GL_EXT_draw_buffers ") != std::string::npos) {
130 gl_->GetIntegerv(GL_MAX_DRAW_BUFFERS_EXT, &max_draw_buffers_); 130 gl_->GetIntegerv(GL_MAX_DRAW_BUFFERS_EXT, &max_draw_buffers_);
131 } 131 }
132 } 132 }
133 ~CopyTextureToImpl() { CancelRequests(); } 133 ~CopyTextureToImpl() { CancelRequests(); }
134 134
135 GLuint ConsumeMailboxToTexture(const gpu::Mailbox& mailbox, 135 GLuint ConsumeMailboxToTexture(const gpu::Mailbox& mailbox,
136 uint32 sync_point) { 136 uint32 sync_point,
137 return helper_->ConsumeMailboxToTexture(mailbox, sync_point); 137 const gpu::SyncToken& sync_token) {
138 return helper_->ConsumeMailboxToTexture(mailbox, sync_point, sync_token);
138 } 139 }
139 140
140 void CropScaleReadbackAndCleanTexture( 141 void CropScaleReadbackAndCleanTexture(
141 GLuint src_texture, 142 GLuint src_texture,
142 const gfx::Size& src_size, 143 const gfx::Size& src_size,
143 const gfx::Rect& src_subrect, 144 const gfx::Rect& src_subrect,
144 const gfx::Size& dst_size, 145 const gfx::Size& dst_size,
145 unsigned char* out, 146 unsigned char* out,
146 const SkColorType out_color_type, 147 const SkColorType out_color_type,
147 const base::Callback<void(bool)>& callback, 148 const base::Callback<void(bool)>& callback,
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 GLHelperScaling* scaler_impl, 268 GLHelperScaling* scaler_impl,
268 GLHelper::ScalerQuality quality, 269 GLHelper::ScalerQuality quality,
269 const gfx::Size& src_size, 270 const gfx::Size& src_size,
270 const gfx::Rect& src_subrect, 271 const gfx::Rect& src_subrect,
271 const gfx::Size& dst_size, 272 const gfx::Size& dst_size,
272 bool flip_vertically, 273 bool flip_vertically,
273 ReadbackSwizzle swizzle); 274 ReadbackSwizzle swizzle);
274 275
275 void ReadbackYUV(const gpu::Mailbox& mailbox, 276 void ReadbackYUV(const gpu::Mailbox& mailbox,
276 uint32 sync_point, 277 uint32 sync_point,
278 const gpu::SyncToken& sync_token,
277 const scoped_refptr<media::VideoFrame>& target, 279 const scoped_refptr<media::VideoFrame>& target,
278 const gfx::Point& paste_location, 280 const gfx::Point& paste_location,
279 const base::Callback<void(bool)>& callback) override; 281 const base::Callback<void(bool)>& callback) override;
280 282
281 ScalerInterface* scaler() override { return scaler_.scaler(); } 283 ScalerInterface* scaler() override { return scaler_.scaler(); }
282 284
283 private: 285 private:
284 GLES2Interface* gl_; 286 GLES2Interface* gl_;
285 CopyTextureToImpl* copy_impl_; 287 CopyTextureToImpl* copy_impl_;
286 gfx::Size dst_size_; 288 gfx::Size dst_size_;
(...skipping 16 matching lines...) Expand all
303 GLHelperScaling* scaler_impl, 305 GLHelperScaling* scaler_impl,
304 GLHelper::ScalerQuality quality, 306 GLHelper::ScalerQuality quality,
305 const gfx::Size& src_size, 307 const gfx::Size& src_size,
306 const gfx::Rect& src_subrect, 308 const gfx::Rect& src_subrect,
307 const gfx::Size& dst_size, 309 const gfx::Size& dst_size,
308 bool flip_vertically, 310 bool flip_vertically,
309 ReadbackSwizzle swizzle); 311 ReadbackSwizzle swizzle);
310 312
311 void ReadbackYUV(const gpu::Mailbox& mailbox, 313 void ReadbackYUV(const gpu::Mailbox& mailbox,
312 uint32 sync_point, 314 uint32 sync_point,
315 const gpu::SyncToken& sync_token,
313 const scoped_refptr<media::VideoFrame>& target, 316 const scoped_refptr<media::VideoFrame>& target,
314 const gfx::Point& paste_location, 317 const gfx::Point& paste_location,
315 const base::Callback<void(bool)>& callback) override; 318 const base::Callback<void(bool)>& callback) override;
316 319
317 ScalerInterface* scaler() override { return scaler_.scaler(); } 320 ScalerInterface* scaler() override { return scaler_.scaler(); }
318 321
319 private: 322 private:
320 GLES2Interface* gl_; 323 GLES2Interface* gl_;
321 CopyTextureToImpl* copy_impl_; 324 CopyTextureToImpl* copy_impl_;
322 gfx::Size dst_size_; 325 gfx::Size dst_size_;
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 dst_size, 812 dst_size,
810 out, 813 out,
811 out_color_type, 814 out_color_type,
812 callback, 815 callback,
813 quality); 816 quality);
814 } 817 }
815 818
816 void GLHelper::CropScaleReadbackAndCleanMailbox( 819 void GLHelper::CropScaleReadbackAndCleanMailbox(
817 const gpu::Mailbox& src_mailbox, 820 const gpu::Mailbox& src_mailbox,
818 uint32 sync_point, 821 uint32 sync_point,
822 const gpu::SyncToken& sync_token,
819 const gfx::Size& src_size, 823 const gfx::Size& src_size,
820 const gfx::Rect& src_subrect, 824 const gfx::Rect& src_subrect,
821 const gfx::Size& dst_size, 825 const gfx::Size& dst_size,
822 unsigned char* out, 826 unsigned char* out,
823 const SkColorType out_color_type, 827 const SkColorType out_color_type,
824 const base::Callback<void(bool)>& callback, 828 const base::Callback<void(bool)>& callback,
825 GLHelper::ScalerQuality quality) { 829 GLHelper::ScalerQuality quality) {
826 GLuint mailbox_texture = ConsumeMailboxToTexture(src_mailbox, sync_point); 830 GLuint mailbox_texture =
831 ConsumeMailboxToTexture(src_mailbox, sync_point, sync_token);
827 CropScaleReadbackAndCleanTexture(mailbox_texture, 832 CropScaleReadbackAndCleanTexture(mailbox_texture,
828 src_size, 833 src_size,
829 src_subrect, 834 src_subrect,
830 dst_size, 835 dst_size,
831 out, 836 out,
832 out_color_type, 837 out_color_type,
833 callback, 838 callback,
834 quality); 839 quality);
835 gl_->DeleteTextures(1, &mailbox_texture); 840 gl_->DeleteTextures(1, &mailbox_texture);
836 } 841 }
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
947 gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 952 gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
948 return texture; 953 return texture;
949 } 954 }
950 955
951 void GLHelper::DeleteTexture(GLuint texture_id) { 956 void GLHelper::DeleteTexture(GLuint texture_id) {
952 gl_->DeleteTextures(1, &texture_id); 957 gl_->DeleteTextures(1, &texture_id);
953 } 958 }
954 959
955 uint32 GLHelper::InsertSyncPoint() { return gl_->InsertSyncPointCHROMIUM(); } 960 uint32 GLHelper::InsertSyncPoint() { return gl_->InsertSyncPointCHROMIUM(); }
956 961
957 void GLHelper::WaitSyncPoint(uint32 sync_point) { 962 void GLHelper::WaitSyncPoint(uint32 sync_point,
958 gl_->WaitSyncPointCHROMIUM(sync_point); 963 const gpu::SyncToken& sync_token) {
964 gl_->WaitSyncPointCHROMIUM(sync_point, sync_token.GetConstData());
959 } 965 }
960 966
961 gpu::MailboxHolder GLHelper::ProduceMailboxHolderFromTexture( 967 gpu::MailboxHolder GLHelper::ProduceMailboxHolderFromTexture(
962 GLuint texture_id) { 968 GLuint texture_id) {
963 gpu::Mailbox mailbox; 969 gpu::Mailbox mailbox;
964 gl_->GenMailboxCHROMIUM(mailbox.name); 970 gl_->GenMailboxCHROMIUM(mailbox.name);
965 gl_->ProduceTextureDirectCHROMIUM(texture_id, GL_TEXTURE_2D, mailbox.name); 971 gl_->ProduceTextureDirectCHROMIUM(texture_id, GL_TEXTURE_2D, mailbox.name);
966 return gpu::MailboxHolder(mailbox, GL_TEXTURE_2D, InsertSyncPoint()); 972 return gpu::MailboxHolder(mailbox, InsertSyncPoint(), gpu::SyncToken(),
973 GL_TEXTURE_2D);
967 } 974 }
968 975
969 GLuint GLHelper::ConsumeMailboxToTexture(const gpu::Mailbox& mailbox, 976 GLuint GLHelper::ConsumeMailboxToTexture(const gpu::Mailbox& mailbox,
970 uint32 sync_point) { 977 uint32 sync_point,
978 const gpu::SyncToken& sync_token) {
971 if (mailbox.IsZero()) 979 if (mailbox.IsZero())
972 return 0; 980 return 0;
973 if (sync_point) 981 if (sync_point || sync_token.HasData())
974 WaitSyncPoint(sync_point); 982 WaitSyncPoint(sync_point, sync_token);
975 GLuint texture = 983 GLuint texture =
976 gl_->CreateAndConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); 984 gl_->CreateAndConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
977 return texture; 985 return texture;
978 } 986 }
979 987
980 void GLHelper::ResizeTexture(GLuint texture, const gfx::Size& size) { 988 void GLHelper::ResizeTexture(GLuint texture, const gfx::Size& size) {
981 content::ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(gl_, texture); 989 content::ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(gl_, texture);
982 gl_->TexImage2D(GL_TEXTURE_2D, 990 gl_->TexImage2D(GL_TEXTURE_2D,
983 0, 991 0,
984 GL_RGB, 992 GL_RGB,
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
1111 static void CallbackKeepingVideoFrameAlive( 1119 static void CallbackKeepingVideoFrameAlive(
1112 scoped_refptr<media::VideoFrame> video_frame, 1120 scoped_refptr<media::VideoFrame> video_frame,
1113 const base::Callback<void(bool)>& callback, 1121 const base::Callback<void(bool)>& callback,
1114 bool success) { 1122 bool success) {
1115 callback.Run(success); 1123 callback.Run(success);
1116 } 1124 }
1117 1125
1118 void GLHelper::CopyTextureToImpl::ReadbackYUVImpl::ReadbackYUV( 1126 void GLHelper::CopyTextureToImpl::ReadbackYUVImpl::ReadbackYUV(
1119 const gpu::Mailbox& mailbox, 1127 const gpu::Mailbox& mailbox,
1120 uint32 sync_point, 1128 uint32 sync_point,
1129 const gpu::SyncToken& sync_token,
1121 const scoped_refptr<media::VideoFrame>& target, 1130 const scoped_refptr<media::VideoFrame>& target,
1122 const gfx::Point& paste_location, 1131 const gfx::Point& paste_location,
1123 const base::Callback<void(bool)>& callback) { 1132 const base::Callback<void(bool)>& callback) {
1124 DCHECK(!(paste_location.x() & 1)); 1133 DCHECK(!(paste_location.x() & 1));
1125 DCHECK(!(paste_location.y() & 1)); 1134 DCHECK(!(paste_location.y() & 1));
1126 1135
1127 GLuint mailbox_texture = 1136 GLuint mailbox_texture =
1128 copy_impl_->ConsumeMailboxToTexture(mailbox, sync_point); 1137 copy_impl_->ConsumeMailboxToTexture(mailbox, sync_point, sync_token);
1129 1138
1130 // Scale texture to right size. 1139 // Scale texture to right size.
1131 scaler_.Scale(mailbox_texture); 1140 scaler_.Scale(mailbox_texture);
1132 gl_->DeleteTextures(1, &mailbox_texture); 1141 gl_->DeleteTextures(1, &mailbox_texture);
1133 1142
1134 // Convert the scaled texture in to Y, U and V planes. 1143 // Convert the scaled texture in to Y, U and V planes.
1135 y_.Scale(scaler_.texture()); 1144 y_.Scale(scaler_.texture());
1136 u_.Scale(scaler_.texture()); 1145 u_.Scale(scaler_.texture());
1137 v_.Scale(scaler_.texture()); 1146 v_.Scale(scaler_.texture());
1138 1147
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1232 dst_size.height(), 1241 dst_size.height(),
1233 0, 1242 0,
1234 GL_RGBA, 1243 GL_RGBA,
1235 GL_UNSIGNED_BYTE, 1244 GL_UNSIGNED_BYTE,
1236 NULL); 1245 NULL);
1237 } 1246 }
1238 1247
1239 void GLHelper::CopyTextureToImpl::ReadbackYUV_MRT::ReadbackYUV( 1248 void GLHelper::CopyTextureToImpl::ReadbackYUV_MRT::ReadbackYUV(
1240 const gpu::Mailbox& mailbox, 1249 const gpu::Mailbox& mailbox,
1241 uint32 sync_point, 1250 uint32 sync_point,
1251 const gpu::SyncToken& sync_token,
1242 const scoped_refptr<media::VideoFrame>& target, 1252 const scoped_refptr<media::VideoFrame>& target,
1243 const gfx::Point& paste_location, 1253 const gfx::Point& paste_location,
1244 const base::Callback<void(bool)>& callback) { 1254 const base::Callback<void(bool)>& callback) {
1245 DCHECK(!(paste_location.x() & 1)); 1255 DCHECK(!(paste_location.x() & 1));
1246 DCHECK(!(paste_location.y() & 1)); 1256 DCHECK(!(paste_location.y() & 1));
1247 1257
1248 GLuint mailbox_texture = 1258 GLuint mailbox_texture =
1249 copy_impl_->ConsumeMailboxToTexture(mailbox, sync_point); 1259 copy_impl_->ConsumeMailboxToTexture(mailbox, sync_point, sync_token);
1250 1260
1251 GLuint texture; 1261 GLuint texture;
1252 if (quality_ == GLHelper::SCALER_QUALITY_FAST) { 1262 if (quality_ == GLHelper::SCALER_QUALITY_FAST) {
1253 // Optimization: SCALER_QUALITY_FAST is just a single bilinear 1263 // Optimization: SCALER_QUALITY_FAST is just a single bilinear
1254 // pass, which pass1_shader_ can do just as well, so let's skip 1264 // pass, which pass1_shader_ can do just as well, so let's skip
1255 // the actual scaling in that case. 1265 // the actual scaling in that case.
1256 texture = mailbox_texture; 1266 texture = mailbox_texture;
1257 } else { 1267 } else {
1258 // Scale texture to right size. 1268 // Scale texture to right size.
1259 scaler_.Scale(mailbox_texture); 1269 scaler_.Scale(mailbox_texture);
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1369 InitCopyTextToImpl(); 1379 InitCopyTextToImpl();
1370 return copy_texture_to_impl_->CreateReadbackPipelineYUV(quality, 1380 return copy_texture_to_impl_->CreateReadbackPipelineYUV(quality,
1371 src_size, 1381 src_size,
1372 src_subrect, 1382 src_subrect,
1373 dst_size, 1383 dst_size,
1374 flip_vertically, 1384 flip_vertically,
1375 use_mrt); 1385 use_mrt);
1376 } 1386 }
1377 1387
1378 } // namespace content 1388 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698