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

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 1054883004: Revert of Use the desktop GL core profile on Linux when ES3 support is requested. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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 "gpu/command_buffer/service/gles2_cmd_decoder.h" 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <list> 10 #include <list>
(...skipping 1672 matching lines...) Expand 10 before | Expand all | Expand 10 after
1683 const char* filename, int line, const std::string& msg); 1683 const char* filename, int line, const std::string& msg);
1684 1684
1685 const FeatureInfo::FeatureFlags& features() const { 1685 const FeatureInfo::FeatureFlags& features() const {
1686 return feature_info_->feature_flags(); 1686 return feature_info_->feature_flags();
1687 } 1687 }
1688 1688
1689 const FeatureInfo::Workarounds& workarounds() const { 1689 const FeatureInfo::Workarounds& workarounds() const {
1690 return feature_info_->workarounds(); 1690 return feature_info_->workarounds();
1691 } 1691 }
1692 1692
1693 const gfx::GLVersionInfo& gl_version() const {
1694 return feature_info_->gl_version_info();
1695 }
1696
1697 bool ShouldDeferDraws() { 1693 bool ShouldDeferDraws() {
1698 return !offscreen_target_frame_buffer_.get() && 1694 return !offscreen_target_frame_buffer_.get() &&
1699 framebuffer_state_.bound_draw_framebuffer.get() == NULL && 1695 framebuffer_state_.bound_draw_framebuffer.get() == NULL &&
1700 surface_->DeferDraws(); 1696 surface_->DeferDraws();
1701 } 1697 }
1702 1698
1703 bool ShouldDeferReads() { 1699 bool ShouldDeferReads() {
1704 return !offscreen_target_frame_buffer_.get() && 1700 return !offscreen_target_frame_buffer_.get() &&
1705 framebuffer_state_.bound_read_framebuffer.get() == NULL && 1701 framebuffer_state_.bound_read_framebuffer.get() == NULL &&
1706 surface_->DeferDraws(); 1702 surface_->DeferDraws();
(...skipping 1029 matching lines...) Expand 10 before | Expand all | Expand 10 after
2736 // make it appear RGB. If on the other hand we ask for RGBA nd get RGB we 2732 // make it appear RGB. If on the other hand we ask for RGBA nd get RGB we
2737 // can't do anything about that. 2733 // can't do anything about that.
2738 2734
2739 if (!surfaceless_) { 2735 if (!surfaceless_) {
2740 GLint alpha_bits = 0; 2736 GLint alpha_bits = 0;
2741 GLint depth_bits = 0; 2737 GLint depth_bits = 0;
2742 GLint stencil_bits = 0; 2738 GLint stencil_bits = 0;
2743 2739
2744 bool default_fb = (GetBackbufferServiceId() == 0); 2740 bool default_fb = (GetBackbufferServiceId() == 0);
2745 2741
2746 if (gl_version().is_desktop_core_profile) { 2742 if (feature_info_->gl_version_info().is_desktop_core_profile) {
2747 glGetFramebufferAttachmentParameterivEXT( 2743 glGetFramebufferAttachmentParameterivEXT(
2748 GL_FRAMEBUFFER, 2744 GL_FRAMEBUFFER,
2749 default_fb ? GL_BACK_LEFT : GL_COLOR_ATTACHMENT0, 2745 default_fb ? GL_BACK_LEFT : GL_COLOR_ATTACHMENT0,
2750 GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, &alpha_bits); 2746 GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, &alpha_bits);
2751 glGetFramebufferAttachmentParameterivEXT( 2747 glGetFramebufferAttachmentParameterivEXT(
2752 GL_FRAMEBUFFER, 2748 GL_FRAMEBUFFER,
2753 default_fb ? GL_DEPTH : GL_DEPTH_ATTACHMENT, 2749 default_fb ? GL_DEPTH : GL_DEPTH_ATTACHMENT,
2754 GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, &depth_bits); 2750 GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, &depth_bits);
2755 glGetFramebufferAttachmentParameterivEXT( 2751 glGetFramebufferAttachmentParameterivEXT(
2756 GL_FRAMEBUFFER, 2752 GL_FRAMEBUFFER,
(...skipping 18 matching lines...) Expand all
2775 state_.viewport_width = surface->GetSize().width(); 2771 state_.viewport_width = surface->GetSize().width();
2776 state_.viewport_height = surface->GetSize().height(); 2772 state_.viewport_height = surface->GetSize().height();
2777 } 2773 }
2778 2774
2779 // OpenGL ES 2.0 implicitly enables the desktop GL capability 2775 // OpenGL ES 2.0 implicitly enables the desktop GL capability
2780 // VERTEX_PROGRAM_POINT_SIZE and doesn't expose this enum. This fact 2776 // VERTEX_PROGRAM_POINT_SIZE and doesn't expose this enum. This fact
2781 // isn't well documented; it was discovered in the Khronos OpenGL ES 2777 // isn't well documented; it was discovered in the Khronos OpenGL ES
2782 // mailing list archives. It also implicitly enables the desktop GL 2778 // mailing list archives. It also implicitly enables the desktop GL
2783 // capability GL_POINT_SPRITE to provide access to the gl_PointCoord 2779 // capability GL_POINT_SPRITE to provide access to the gl_PointCoord
2784 // variable in fragment shaders. 2780 // variable in fragment shaders.
2785 if (!gl_version().BehavesLikeGLES()) { 2781 if (!feature_info_->gl_version_info().BehavesLikeGLES()) {
2786 glEnable(GL_VERTEX_PROGRAM_POINT_SIZE); 2782 glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
2787 glEnable(GL_POINT_SPRITE); 2783 glEnable(GL_POINT_SPRITE);
2788 } 2784 }
2789 2785
2790 has_robustness_extension_ = 2786 has_robustness_extension_ =
2791 context->HasExtension("GL_ARB_robustness") || 2787 context->HasExtension("GL_ARB_robustness") ||
2792 context->HasExtension("GL_KHR_robustness") || 2788 context->HasExtension("GL_KHR_robustness") ||
2793 context->HasExtension("GL_EXT_robustness"); 2789 context->HasExtension("GL_EXT_robustness");
2794 2790
2795 if (!InitializeShaderTranslator()) { 2791 if (!InitializeShaderTranslator()) {
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
3013 } else { 3009 } else {
3014 shader_spec = unsafe_es3_apis_enabled() ? SH_GLES3_SPEC : SH_GLES2_SPEC; 3010 shader_spec = unsafe_es3_apis_enabled() ? SH_GLES3_SPEC : SH_GLES2_SPEC;
3015 } 3011 }
3016 3012
3017 if ((shader_spec == SH_WEBGL_SPEC || shader_spec == SH_WEBGL2_SPEC) && 3013 if ((shader_spec == SH_WEBGL_SPEC || shader_spec == SH_WEBGL2_SPEC) &&
3018 features().enable_shader_name_hashing) 3014 features().enable_shader_name_hashing)
3019 resources.HashFunction = &CityHash64; 3015 resources.HashFunction = &CityHash64;
3020 else 3016 else
3021 resources.HashFunction = NULL; 3017 resources.HashFunction = NULL;
3022 ShaderTranslatorInterface::GlslImplementationType implementation_type = 3018 ShaderTranslatorInterface::GlslImplementationType implementation_type =
3023 ShaderTranslatorInterface::kGlsl; 3019 gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2 ?
3024 if (gl_version().is_es) 3020 ShaderTranslatorInterface::kGlslES : ShaderTranslatorInterface::kGlsl;
3025 implementation_type = ShaderTranslatorInterface::kGlslES;
3026 else if (gl_version().is_desktop_core_profile)
3027 implementation_type = ShaderTranslatorInterface::kGlslCoreProfile;
3028 int driver_bug_workarounds = 0; 3021 int driver_bug_workarounds = 0;
3029 if (workarounds().needs_glsl_built_in_function_emulation) 3022 if (workarounds().needs_glsl_built_in_function_emulation)
3030 driver_bug_workarounds |= SH_EMULATE_BUILT_IN_FUNCTIONS; 3023 driver_bug_workarounds |= SH_EMULATE_BUILT_IN_FUNCTIONS;
3031 if (workarounds().init_gl_position_in_vertex_shader) 3024 if (workarounds().init_gl_position_in_vertex_shader)
3032 driver_bug_workarounds |= SH_INIT_GL_POSITION; 3025 driver_bug_workarounds |= SH_INIT_GL_POSITION;
3033 if (workarounds().unfold_short_circuit_as_ternary_operation) 3026 if (workarounds().unfold_short_circuit_as_ternary_operation)
3034 driver_bug_workarounds |= SH_UNFOLD_SHORT_CIRCUIT; 3027 driver_bug_workarounds |= SH_UNFOLD_SHORT_CIRCUIT;
3035 if (workarounds().init_varyings_without_static_use) 3028 if (workarounds().init_varyings_without_static_use)
3036 driver_bug_workarounds |= SH_INIT_VARYINGS_WITHOUT_STATIC_USE; 3029 driver_bug_workarounds |= SH_INIT_VARYINGS_WITHOUT_STATIC_USE;
3037 if (workarounds().unroll_for_loop_with_sampler_array_index) 3030 if (workarounds().unroll_for_loop_with_sampler_array_index)
(...skipping 1551 matching lines...) Expand 10 before | Expand all | Expand 10 after
4589 break; 4582 break;
4590 default: 4583 default:
4591 NOTREACHED(); 4584 NOTREACHED();
4592 return; 4585 return;
4593 } 4586 }
4594 } 4587 }
4595 translated_attachments[i] = attachment; 4588 translated_attachments[i] = attachment;
4596 } 4589 }
4597 4590
4598 ScopedRenderTo do_render(framebuffer); 4591 ScopedRenderTo do_render(framebuffer);
4599 if (gl_version().is_es3) { 4592 if (feature_info_->gl_version_info().is_es3) {
4600 glInvalidateFramebuffer( 4593 glInvalidateFramebuffer(
4601 target, numAttachments, translated_attachments.get()); 4594 target, numAttachments, translated_attachments.get());
4602 } else { 4595 } else {
4603 glDiscardFramebufferEXT( 4596 glDiscardFramebufferEXT(
4604 target, numAttachments, translated_attachments.get()); 4597 target, numAttachments, translated_attachments.get());
4605 } 4598 }
4606 } 4599 }
4607 4600
4608 void GLES2DecoderImpl::DoEnableVertexAttribArray(GLuint index) { 4601 void GLES2DecoderImpl::DoEnableVertexAttribArray(GLuint index) {
4609 if (state_.vertex_attrib_manager->Enable(index, true)) { 4602 if (state_.vertex_attrib_manager->Enable(index, true)) {
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
4771 case GL_MAX_DRAW_BUFFERS_ARB: 4764 case GL_MAX_DRAW_BUFFERS_ARB:
4772 *num_written = 1; 4765 *num_written = 1;
4773 if (params) { 4766 if (params) {
4774 params[0] = group_->max_draw_buffers(); 4767 params[0] = group_->max_draw_buffers();
4775 } 4768 }
4776 return true; 4769 return true;
4777 case GL_ALPHA_BITS: 4770 case GL_ALPHA_BITS:
4778 *num_written = 1; 4771 *num_written = 1;
4779 if (params) { 4772 if (params) {
4780 GLint v = 0; 4773 GLint v = 0;
4781 if (gl_version().is_desktop_core_profile) { 4774 if (feature_info_->gl_version_info().is_desktop_core_profile) {
4782 Framebuffer* framebuffer = 4775 Framebuffer* framebuffer =
4783 GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT); 4776 GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT);
4784 if (framebuffer) { 4777 if (framebuffer) {
4785 glGetFramebufferAttachmentParameterivEXT( 4778 glGetFramebufferAttachmentParameterivEXT(
4786 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 4779 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
4787 GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, &v); 4780 GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, &v);
4788 } else { 4781 } else {
4789 v = (back_buffer_color_format_ == GL_RGBA ? 8 : 0); 4782 v = (back_buffer_color_format_ == GL_RGBA ? 8 : 0);
4790 } 4783 }
4791 } else { 4784 } else {
4792 glGetIntegerv(GL_ALPHA_BITS, &v); 4785 glGetIntegerv(GL_ALPHA_BITS, &v);
4793 } 4786 }
4794 params[0] = 4787 params[0] =
4795 BoundFramebufferHasColorAttachmentWithAlpha(false) ? v : 0; 4788 BoundFramebufferHasColorAttachmentWithAlpha(false) ? v : 0;
4796 } 4789 }
4797 return true; 4790 return true;
4798 case GL_DEPTH_BITS: 4791 case GL_DEPTH_BITS:
4799 *num_written = 1; 4792 *num_written = 1;
4800 if (params) { 4793 if (params) {
4801 GLint v = 0; 4794 GLint v = 0;
4802 if (gl_version().is_desktop_core_profile) { 4795 if (feature_info_->gl_version_info().is_desktop_core_profile) {
4803 Framebuffer* framebuffer = 4796 Framebuffer* framebuffer =
4804 GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT); 4797 GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT);
4805 if (framebuffer) { 4798 if (framebuffer) {
4806 glGetFramebufferAttachmentParameterivEXT( 4799 glGetFramebufferAttachmentParameterivEXT(
4807 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, 4800 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
4808 GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, &v); 4801 GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, &v);
4809 } else { 4802 } else {
4810 v = (back_buffer_has_depth_ ? 24 : 0); 4803 v = (back_buffer_has_depth_ ? 24 : 0);
4811 } 4804 }
4812 } else { 4805 } else {
4813 glGetIntegerv(GL_DEPTH_BITS, &v); 4806 glGetIntegerv(GL_DEPTH_BITS, &v);
4814 } 4807 }
4815 params[0] = BoundFramebufferHasDepthAttachment() ? v : 0; 4808 params[0] = BoundFramebufferHasDepthAttachment() ? v : 0;
4816 } 4809 }
4817 return true; 4810 return true;
4818 case GL_RED_BITS: 4811 case GL_RED_BITS:
4819 case GL_GREEN_BITS: 4812 case GL_GREEN_BITS:
4820 case GL_BLUE_BITS: 4813 case GL_BLUE_BITS:
4821 *num_written = 1; 4814 *num_written = 1;
4822 if (params) { 4815 if (params) {
4823 GLint v = 0; 4816 GLint v = 0;
4824 if (gl_version().is_desktop_core_profile) { 4817 if (feature_info_->gl_version_info().is_desktop_core_profile) {
4825 Framebuffer* framebuffer = 4818 Framebuffer* framebuffer =
4826 GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT); 4819 GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT);
4827 if (framebuffer) { 4820 if (framebuffer) {
4828 GLenum framebuffer_enum = 0; 4821 GLenum framebuffer_enum = 0;
4829 switch (pname) { 4822 switch (pname) {
4830 case GL_RED_BITS: 4823 case GL_RED_BITS:
4831 framebuffer_enum = GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE; 4824 framebuffer_enum = GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE;
4832 break; 4825 break;
4833 case GL_GREEN_BITS: 4826 case GL_GREEN_BITS:
4834 framebuffer_enum = GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE; 4827 framebuffer_enum = GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE;
(...skipping 10 matching lines...) Expand all
4845 } else { 4838 } else {
4846 glGetIntegerv(pname, &v); 4839 glGetIntegerv(pname, &v);
4847 } 4840 }
4848 params[0] = v; 4841 params[0] = v;
4849 } 4842 }
4850 return true; 4843 return true;
4851 case GL_STENCIL_BITS: 4844 case GL_STENCIL_BITS:
4852 *num_written = 1; 4845 *num_written = 1;
4853 if (params) { 4846 if (params) {
4854 GLint v = 0; 4847 GLint v = 0;
4855 if (gl_version().is_desktop_core_profile) { 4848 if (feature_info_->gl_version_info().is_desktop_core_profile) {
4856 Framebuffer* framebuffer = 4849 Framebuffer* framebuffer =
4857 GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT); 4850 GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT);
4858 if (framebuffer) { 4851 if (framebuffer) {
4859 glGetFramebufferAttachmentParameterivEXT( 4852 glGetFramebufferAttachmentParameterivEXT(
4860 GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, 4853 GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
4861 GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE, &v); 4854 GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE, &v);
4862 } else { 4855 } else {
4863 v = (back_buffer_has_stencil_ ? 8 : 0); 4856 v = (back_buffer_has_stencil_ ? 8 : 0);
4864 } 4857 }
4865 } else { 4858 } else {
(...skipping 823 matching lines...) Expand 10 before | Expand all | Expand 10 after
5689 GLint srcX1, 5682 GLint srcX1,
5690 GLint srcY1, 5683 GLint srcY1,
5691 GLint dstX0, 5684 GLint dstX0,
5692 GLint dstY0, 5685 GLint dstY0,
5693 GLint dstX1, 5686 GLint dstX1,
5694 GLint dstY1, 5687 GLint dstY1,
5695 GLbitfield mask, 5688 GLbitfield mask,
5696 GLenum filter) { 5689 GLenum filter) {
5697 // TODO(sievers): This could be resolved at the GL binding level, but the 5690 // TODO(sievers): This could be resolved at the GL binding level, but the
5698 // binding process is currently a bit too 'brute force'. 5691 // binding process is currently a bit too 'brute force'.
5699 if (gl_version().is_angle) { 5692 if (feature_info_->gl_version_info().is_angle) {
5700 glBlitFramebufferANGLE( 5693 glBlitFramebufferANGLE(
5701 srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); 5694 srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
5702 } else if (feature_info_->feature_flags().use_core_framebuffer_multisample) { 5695 } else if (feature_info_->feature_flags().use_core_framebuffer_multisample) {
5703 glBlitFramebuffer( 5696 glBlitFramebuffer(
5704 srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); 5697 srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
5705 } else { 5698 } else {
5706 glBlitFramebufferEXT( 5699 glBlitFramebufferEXT(
5707 srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); 5700 srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
5708 } 5701 }
5709 } 5702 }
(...skipping 994 matching lines...) Expand 10 before | Expand all | Expand 10 after
6704 max_vertex_accessed, 6697 max_vertex_accessed,
6705 instanced, 6698 instanced,
6706 primcount); 6699 primcount);
6707 } 6700 }
6708 6701
6709 bool GLES2DecoderImpl::SimulateAttrib0( 6702 bool GLES2DecoderImpl::SimulateAttrib0(
6710 const char* function_name, GLuint max_vertex_accessed, bool* simulated) { 6703 const char* function_name, GLuint max_vertex_accessed, bool* simulated) {
6711 DCHECK(simulated); 6704 DCHECK(simulated);
6712 *simulated = false; 6705 *simulated = false;
6713 6706
6714 if (gl_version().BehavesLikeGLES()) 6707 if (feature_info_->gl_version_info().BehavesLikeGLES())
6715 return true; 6708 return true;
6716 6709
6717 const VertexAttrib* attrib = 6710 const VertexAttrib* attrib =
6718 state_.vertex_attrib_manager->GetVertexAttrib(0); 6711 state_.vertex_attrib_manager->GetVertexAttrib(0);
6719 // If it's enabled or it's not used then we don't need to do anything. 6712 // If it's enabled or it's not used then we don't need to do anything.
6720 bool attrib_0_used = 6713 bool attrib_0_used =
6721 state_.current_program->GetAttribInfoByLocation(0) != NULL; 6714 state_.current_program->GetAttribInfoByLocation(0) != NULL;
6722 if (attrib->enabled() && attrib_0_used) { 6715 if (attrib->enabled() && attrib_0_used) {
6723 return true; 6716 return true;
6724 } 6717 }
(...skipping 1336 matching lines...) Expand 10 before | Expand all | Expand 10 after
8061 read_x, ry, read_width, 1, format, type, dst + dest_row_offset); 8054 read_x, ry, read_width, 1, format, type, dst + dest_row_offset);
8062 } 8055 }
8063 dst += padded_row_size; 8056 dst += padded_row_size;
8064 } 8057 }
8065 } else { 8058 } else {
8066 if (async && features().use_async_readpixels) { 8059 if (async && features().use_async_readpixels) {
8067 GLuint buffer = 0; 8060 GLuint buffer = 0;
8068 glGenBuffersARB(1, &buffer); 8061 glGenBuffersARB(1, &buffer);
8069 glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, buffer); 8062 glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, buffer);
8070 // For ANGLE client version 2, GL_STREAM_READ is not available. 8063 // For ANGLE client version 2, GL_STREAM_READ is not available.
8071 const GLenum usage_hint = gl_version().is_angle ? 8064 const GLenum usage_hint = feature_info_->gl_version_info().is_angle ?
8072 GL_STATIC_DRAW : GL_STREAM_READ; 8065 GL_STATIC_DRAW : GL_STREAM_READ;
8073 glBufferData(GL_PIXEL_PACK_BUFFER_ARB, pixels_size, NULL, usage_hint); 8066 glBufferData(GL_PIXEL_PACK_BUFFER_ARB, pixels_size, NULL, usage_hint);
8074 GLenum error = glGetError(); 8067 GLenum error = glGetError();
8075 if (error == GL_NO_ERROR) { 8068 if (error == GL_NO_ERROR) {
8076 glReadPixels(x, y, width, height, format, type, 0); 8069 glReadPixels(x, y, width, height, format, type, 0);
8077 pending_readpixel_fences_.push(linked_ptr<FenceCallback>( 8070 pending_readpixel_fences_.push(linked_ptr<FenceCallback>(
8078 new FenceCallback())); 8071 new FenceCallback()));
8079 WaitForReadPixels(base::Bind( 8072 WaitForReadPixels(base::Bind(
8080 &GLES2DecoderImpl::FinishReadPixels, 8073 &GLES2DecoderImpl::FinishReadPixels,
8081 base::internal::SupportsWeakPtrBase::StaticAsWeakPtr 8074 base::internal::SupportsWeakPtrBase::StaticAsWeakPtr
(...skipping 2211 matching lines...) Expand 10 before | Expand all | Expand 10 after
10293 SetServiceId(offscreen_target_color_texture_->id()); 10286 SetServiceId(offscreen_target_color_texture_->id());
10294 10287
10295 offscreen_saved_color_texture_.swap(offscreen_target_color_texture_); 10288 offscreen_saved_color_texture_.swap(offscreen_target_color_texture_);
10296 offscreen_target_frame_buffer_->AttachRenderTexture( 10289 offscreen_target_frame_buffer_->AttachRenderTexture(
10297 offscreen_target_color_texture_.get()); 10290 offscreen_target_color_texture_.get());
10298 } 10291 }
10299 10292
10300 // Ensure the side effects of the copy are visible to the parent 10293 // Ensure the side effects of the copy are visible to the parent
10301 // context. There is no need to do this for ANGLE because it uses a 10294 // context. There is no need to do this for ANGLE because it uses a
10302 // single D3D device for all contexts. 10295 // single D3D device for all contexts.
10303 if (!gl_version().is_angle) 10296 if (!feature_info_->gl_version_info().is_angle)
10304 glFlush(); 10297 glFlush();
10305 } 10298 }
10306 } else { 10299 } else {
10307 if (!surface_->SwapBuffers()) { 10300 if (!surface_->SwapBuffers()) {
10308 LOG(ERROR) << "Context lost because SwapBuffers failed."; 10301 LOG(ERROR) << "Context lost because SwapBuffers failed.";
10309 LoseContext(GL_UNKNOWN_CONTEXT_RESET_ARB); 10302 LoseContext(GL_UNKNOWN_CONTEXT_RESET_ARB);
10310 } 10303 }
10311 } 10304 }
10312 10305
10313 // This may be a slow command. Exit command processing to allow for 10306 // This may be a slow command. Exit command processing to allow for
(...skipping 2229 matching lines...) Expand 10 before | Expand all | Expand 10 after
12543 } 12536 }
12544 } 12537 }
12545 12538
12546 // Include the auto-generated part of this file. We split this because it means 12539 // Include the auto-generated part of this file. We split this because it means
12547 // we can easily edit the non-auto generated parts right here in this file 12540 // we can easily edit the non-auto generated parts right here in this file
12548 // instead of having to edit some template or the code generator. 12541 // instead of having to edit some template or the code generator.
12549 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 12542 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
12550 12543
12551 } // namespace gles2 12544 } // namespace gles2
12552 } // namespace gpu 12545 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/async_pixel_transfer_manager_linux.cc ('k') | gpu/command_buffer/service/shader_translator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698