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 35f446c720f89f2752691a06f5e8eb770fafe581..866c3a35d5c34ad64765c9f21ff05b3e8e948332 100644 |
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc |
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
@@ -899,6 +899,10 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient { |
// or regular back buffer). |
gfx::Size GetBoundReadFrameBufferSize(); |
+ // Get the service side ID for the bound read frame buffer. |
+ // If it's back buffer, 0 is returned. |
+ GLuint GetBoundReadFrameBufferServiceId(); |
+ |
// Get the format/type of the currently bound frame buffer (either FBO or |
// regular back buffer). |
// If the color image is a renderbuffer, returns 0 for type. |
@@ -4314,6 +4318,24 @@ gfx::Size GLES2DecoderImpl::GetBoundReadFrameBufferSize() { |
} |
} |
+GLuint GLES2DecoderImpl::GetBoundReadFrameBufferServiceId() { |
+ Framebuffer* framebuffer = |
+ GetFramebufferInfoForTarget(GL_READ_FRAMEBUFFER_EXT); |
+ if (framebuffer) { |
+ return framebuffer->service_id(); |
+ } |
+ if (offscreen_resolved_frame_buffer_.get()) { |
+ return offscreen_resolved_frame_buffer_->id(); |
+ } |
+ if (offscreen_target_frame_buffer_.get()) { |
+ return offscreen_target_frame_buffer_->id(); |
+ } |
+ if (surface_.get()) { |
+ return surface_->GetBackingFrameBufferObject(); |
+ } |
+ return 0; |
+} |
+ |
GLenum GLES2DecoderImpl::GetBoundReadFrameBufferTextureType() { |
Framebuffer* framebuffer = |
GetFramebufferInfoForTarget(GL_READ_FRAMEBUFFER_EXT); |
@@ -9038,7 +9060,7 @@ bool GLES2DecoderImpl::SimulateFixedAttribs( |
GLuint max_vertex_accessed, bool* simulated, GLsizei primcount) { |
DCHECK(simulated); |
*simulated = false; |
- if (gl_version_info().BehavesLikeGLES()) |
+ if (gl_version_info().SupportsFixedType()) |
return true; |
if (!state_.vertex_attrib_manager->HaveFixedAttribs()) { |
@@ -10266,8 +10288,7 @@ error::Error GLES2DecoderImpl::HandleVertexAttribPointer( |
stride != 0 ? stride : group_size, |
offset, |
GL_FALSE); |
- // We support GL_FIXED natively on EGL/GLES2 implementations |
- if (type != GL_FIXED || gl_version_info().is_es) { |
+ if (type != GL_FIXED || gl_version_info().SupportsFixedType()) { |
glVertexAttribPointer(indx, size, type, normalized, stride, ptr); |
} |
return error::kNoError; |
@@ -13023,12 +13044,11 @@ void GLES2DecoderImpl::DoCopyTexImage2D( |
GLint destX = dx; |
GLint destY = dy; |
if (requires_luma_blit) { |
- copy_tex_image_blit_->DoCopyTexSubImage2DToLUMAComatabilityTexture( |
+ copy_tex_image_blit_->DoCopyTexSubImage2DToLUMACompatibilityTexture( |
this, texture->service_id(), texture->target(), target, format, |
type, level, destX, destY, copyX, copyY, copyWidth, copyHeight, |
- framebuffer_state_.bound_read_framebuffer->service_id(), |
- framebuffer_state_.bound_read_framebuffer |
- ->GetReadBufferInternalFormat()); |
+ GetBoundReadFrameBufferServiceId(), |
+ GetBoundReadFrameBufferInternalFormat()); |
} else { |
glCopyTexSubImage2D(target, level, destX, destY, copyX, copyY, |
copyWidth, copyHeight); |
@@ -13046,12 +13066,11 @@ void GLES2DecoderImpl::DoCopyTexImage2D( |
final_internal_format, channels_exist, &source_texture_service_id, |
&source_texture_target); |
if (requires_luma_blit) { |
- copy_tex_image_blit_->DoCopyTexImage2DToLUMAComatabilityTexture( |
+ copy_tex_image_blit_->DoCopyTexImage2DToLUMACompatibilityTexture( |
this, texture->service_id(), texture->target(), target, format, |
type, level, internal_format, copyX, copyY, copyWidth, copyHeight, |
- framebuffer_state_.bound_read_framebuffer->service_id(), |
- framebuffer_state_.bound_read_framebuffer |
- ->GetReadBufferInternalFormat()); |
+ GetBoundReadFrameBufferServiceId(), |
+ GetBoundReadFrameBufferInternalFormat()); |
} else if (use_workaround) { |
GLenum dest_texture_target = target; |
GLenum framebuffer_target = features().chromium_framebuffer_multisample |
@@ -13199,12 +13218,11 @@ void GLES2DecoderImpl::DoCopyTexSubImage2D( |
if (!InitializeCopyTexImageBlitter("glCopyTexSubImage2D")) { |
return; |
} |
- copy_tex_image_blit_->DoCopyTexSubImage2DToLUMAComatabilityTexture( |
+ copy_tex_image_blit_->DoCopyTexSubImage2DToLUMACompatibilityTexture( |
this, texture->service_id(), texture->target(), target, |
internal_format, type, level, xoffset, yoffset, x, y, width, height, |
- framebuffer_state_.bound_read_framebuffer->service_id(), |
- framebuffer_state_.bound_read_framebuffer |
- ->GetReadBufferInternalFormat()); |
+ GetBoundReadFrameBufferServiceId(), |
+ GetBoundReadFrameBufferInternalFormat()); |
} else { |
glCopyTexSubImage2D(target, level, destX, destY, copyX, copyY, copyWidth, |
copyHeight); |