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

Unified Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 2388653002: gpu: Add CHROMIUM_texture_from_image spec and fence support.
Patch Set: rebase Created 4 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 side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 4815d9c972b560c4d37ca40c6cf12a360d8de555..155ffbaca914dfe83b78deffa58441a3125f1238 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -1015,12 +1015,8 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient {
const volatile GLbyte* key);
void DoApplyScreenSpaceAntialiasingCHROMIUM();
- void DoBindTexImage2DCHROMIUM(
- GLenum target,
- GLint image_id);
- void DoReleaseTexImage2DCHROMIUM(
- GLenum target,
- GLint image_id);
+ void DoBindTexImage2DCHROMIUM(GLenum target, GLint image_id, GLint fence_id);
+ void DoReleaseTexImage2DCHROMIUM(GLenum target, GLint image_id);
void DoTraceEndCHROMIUM(void);
@@ -2725,7 +2721,7 @@ bool BackTexture::AllocateNativeGpuMemoryBuffer(const gfx::Size& size,
scoped_refptr<gl::GLImage> image =
decoder_->GetContextGroup()->image_factory()->CreateAnonymousImage(
size, buffer_format, format);
- if (!image || !image->BindTexImage(Target()))
+ if (!image || !image->BindTexImage(Target(), nullptr))
return false;
image_ = image;
@@ -16951,8 +16947,9 @@ void GLES2DecoderImpl::DoPushGroupMarkerEXT(
void GLES2DecoderImpl::DoPopGroupMarkerEXT(void) {
}
-void GLES2DecoderImpl::DoBindTexImage2DCHROMIUM(
- GLenum target, GLint image_id) {
+void GLES2DecoderImpl::DoBindTexImage2DCHROMIUM(GLenum target,
+ GLint image_id,
+ GLint fence_id) {
TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoBindTexImage2DCHROMIUM");
if (target == GL_TEXTURE_CUBE_MAP) {
@@ -16981,6 +16978,16 @@ void GLES2DecoderImpl::DoBindTexImage2DCHROMIUM(
return;
}
+ gl::GLFence* fence = nullptr;
+ if (fence_id) {
+ fence = fence_manager()->LookupFence(fence_id);
+ if (!fence) {
+ LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBindTexImage2DCHROMIUM",
+ "no fence found with the given ID");
+ return;
+ }
+ }
+
Texture::ImageState image_state = Texture::UNBOUND;
{
@@ -16989,10 +16996,13 @@ void GLES2DecoderImpl::DoBindTexImage2DCHROMIUM(
// Note: We fallback to using CopyTexImage() before the texture is used
// when BindTexImage() fails.
- if (image->BindTexImage(target))
+ if (image->BindTexImage(target, fence))
image_state = Texture::BOUND;
}
+ DLOG_IF(WARNING, fence && image_state != Texture::BOUND)
+ << "BindTexImage2D fence ignored by CopyTexImage() fallback";
+
gfx::Size size = image->GetSize();
GLenum internalformat = image->GetInternalFormat();
texture_manager()->SetLevelInfo(
@@ -17001,8 +17011,8 @@ void GLES2DecoderImpl::DoBindTexImage2DCHROMIUM(
texture_manager()->SetLevelImage(texture_ref, target, 0, image, image_state);
}
-void GLES2DecoderImpl::DoReleaseTexImage2DCHROMIUM(
- GLenum target, GLint image_id) {
+void GLES2DecoderImpl::DoReleaseTexImage2DCHROMIUM(GLenum target,
+ GLint image_id) {
TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoReleaseTexImage2DCHROMIUM");
// Default target might be conceptually valid, but disallow it to avoid
« no previous file with comments | « gpu/command_buffer/common/gles2_cmd_format_test_autogen.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698