| OLD | NEW |
| 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 <limits.h> | 7 #include <limits.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 #include <stdio.h> | 10 #include <stdio.h> |
| (...skipping 2675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2686 // vertex_attrib_manager is set to default_vertex_attrib_manager by this call | 2686 // vertex_attrib_manager is set to default_vertex_attrib_manager by this call |
| 2687 DoBindVertexArrayOES(0); | 2687 DoBindVertexArrayOES(0); |
| 2688 | 2688 |
| 2689 query_manager_.reset(new QueryManager(this, feature_info_.get())); | 2689 query_manager_.reset(new QueryManager(this, feature_info_.get())); |
| 2690 | 2690 |
| 2691 image_manager_.reset(new ImageManager); | 2691 image_manager_.reset(new ImageManager); |
| 2692 | 2692 |
| 2693 util_.set_num_compressed_texture_formats( | 2693 util_.set_num_compressed_texture_formats( |
| 2694 validators_->compressed_texture_format.GetValues().size()); | 2694 validators_->compressed_texture_format.GetValues().size()); |
| 2695 | 2695 |
| 2696 if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) { | 2696 if (!feature_info_->gl_version_info().BehavesLikeGLES()) { |
| 2697 // We have to enable vertex array 0 on OpenGL or it won't render. Note that | 2697 // We have to enable vertex array 0 on GL with compatibility profile or it |
| 2698 // OpenGL ES 2.0 does not have this issue. | 2698 // won't render. Note that ES or GL with core profile does not have this |
| 2699 // issue. |
| 2699 glEnableVertexAttribArray(0); | 2700 glEnableVertexAttribArray(0); |
| 2700 } | 2701 } |
| 2701 glGenBuffersARB(1, &attrib_0_buffer_id_); | 2702 glGenBuffersARB(1, &attrib_0_buffer_id_); |
| 2702 glBindBuffer(GL_ARRAY_BUFFER, attrib_0_buffer_id_); | 2703 glBindBuffer(GL_ARRAY_BUFFER, attrib_0_buffer_id_); |
| 2703 glVertexAttribPointer(0, 1, GL_FLOAT, GL_FALSE, 0, NULL); | 2704 glVertexAttribPointer(0, 1, GL_FLOAT, GL_FALSE, 0, NULL); |
| 2704 glBindBuffer(GL_ARRAY_BUFFER, 0); | 2705 glBindBuffer(GL_ARRAY_BUFFER, 0); |
| 2705 glGenBuffersARB(1, &fixed_attrib_buffer_id_); | 2706 glGenBuffersARB(1, &fixed_attrib_buffer_id_); |
| 2706 | 2707 |
| 2707 state_.texture_units.resize(group_->max_texture_units()); | 2708 state_.texture_units.resize(group_->max_texture_units()); |
| 2708 state_.sampler_units.resize(group_->max_texture_units()); | 2709 state_.sampler_units.resize(group_->max_texture_units()); |
| (...skipping 2215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4924 glBindSampler(unit, sampler->service_id()); | 4925 glBindSampler(unit, sampler->service_id()); |
| 4925 } else { | 4926 } else { |
| 4926 glBindSampler(unit, 0); | 4927 glBindSampler(unit, 0); |
| 4927 } | 4928 } |
| 4928 | 4929 |
| 4929 state_.sampler_units[unit] = sampler; | 4930 state_.sampler_units[unit] = sampler; |
| 4930 } | 4931 } |
| 4931 | 4932 |
| 4932 void GLES2DecoderImpl::DoDisableVertexAttribArray(GLuint index) { | 4933 void GLES2DecoderImpl::DoDisableVertexAttribArray(GLuint index) { |
| 4933 if (state_.vertex_attrib_manager->Enable(index, false)) { | 4934 if (state_.vertex_attrib_manager->Enable(index, false)) { |
| 4934 if (index != 0 || | 4935 if (index != 0 || feature_info_->gl_version_info().BehavesLikeGLES()) { |
| 4935 gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) { | |
| 4936 glDisableVertexAttribArray(index); | 4936 glDisableVertexAttribArray(index); |
| 4937 } | 4937 } |
| 4938 } else { | 4938 } else { |
| 4939 LOCAL_SET_GL_ERROR( | 4939 LOCAL_SET_GL_ERROR( |
| 4940 GL_INVALID_VALUE, | 4940 GL_INVALID_VALUE, |
| 4941 "glDisableVertexAttribArray", "index out of range"); | 4941 "glDisableVertexAttribArray", "index out of range"); |
| 4942 } | 4942 } |
| 4943 } | 4943 } |
| 4944 | 4944 |
| 4945 void GLES2DecoderImpl::DoDiscardFramebufferEXT(GLenum target, | 4945 void GLES2DecoderImpl::DoDiscardFramebufferEXT(GLenum target, |
| (...skipping 2907 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7853 // extension is available | 7853 // extension is available |
| 7854 DCHECK(attrib->divisor() == 0 || | 7854 DCHECK(attrib->divisor() == 0 || |
| 7855 feature_info_->feature_flags().angle_instanced_arrays); | 7855 feature_info_->feature_flags().angle_instanced_arrays); |
| 7856 | 7856 |
| 7857 if (feature_info_->feature_flags().angle_instanced_arrays) | 7857 if (feature_info_->feature_flags().angle_instanced_arrays) |
| 7858 glVertexAttribDivisorANGLE(attrib_index, attrib->divisor()); | 7858 glVertexAttribDivisorANGLE(attrib_index, attrib->divisor()); |
| 7859 glBindBuffer( | 7859 glBindBuffer( |
| 7860 GL_ARRAY_BUFFER, state_.bound_array_buffer.get() ? | 7860 GL_ARRAY_BUFFER, state_.bound_array_buffer.get() ? |
| 7861 state_.bound_array_buffer->service_id() : 0); | 7861 state_.bound_array_buffer->service_id() : 0); |
| 7862 | 7862 |
| 7863 // Never touch vertex attribute 0's state (in particular, never | 7863 // Never touch vertex attribute 0's state (in particular, never disable it) |
| 7864 // disable it) when running on desktop GL because it will never be | 7864 // when running on desktop GL with compatibility profile because it will |
| 7865 // re-enabled. | 7865 // never be re-enabled. |
| 7866 if (attrib_index != 0 || | 7866 if (attrib_index != 0 || feature_info_->gl_version_info().BehavesLikeGLES()) { |
| 7867 gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) { | |
| 7868 if (attrib->enabled()) { | 7867 if (attrib->enabled()) { |
| 7869 glEnableVertexAttribArray(attrib_index); | 7868 glEnableVertexAttribArray(attrib_index); |
| 7870 } else { | 7869 } else { |
| 7871 glDisableVertexAttribArray(attrib_index); | 7870 glDisableVertexAttribArray(attrib_index); |
| 7872 } | 7871 } |
| 7873 } | 7872 } |
| 7874 } | 7873 } |
| 7875 | 7874 |
| 7876 bool GLES2DecoderImpl::SimulateFixedAttribs( | 7875 bool GLES2DecoderImpl::SimulateFixedAttribs( |
| 7877 const char* function_name, | 7876 const char* function_name, |
| 7878 GLuint max_vertex_accessed, bool* simulated, GLsizei primcount) { | 7877 GLuint max_vertex_accessed, bool* simulated, GLsizei primcount) { |
| 7879 DCHECK(simulated); | 7878 DCHECK(simulated); |
| 7880 *simulated = false; | 7879 *simulated = false; |
| 7881 if (gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) | 7880 if (feature_info_->gl_version_info().BehavesLikeGLES()) |
| 7882 return true; | 7881 return true; |
| 7883 | 7882 |
| 7884 if (!state_.vertex_attrib_manager->HaveFixedAttribs()) { | 7883 if (!state_.vertex_attrib_manager->HaveFixedAttribs()) { |
| 7885 return true; | 7884 return true; |
| 7886 } | 7885 } |
| 7887 | 7886 |
| 7888 LOCAL_PERFORMANCE_WARNING( | 7887 LOCAL_PERFORMANCE_WARNING( |
| 7889 "GL_FIXED attributes have a signficant performance penalty"); | 7888 "GL_FIXED attributes have a signficant performance penalty"); |
| 7890 | 7889 |
| 7891 // NOTE: we could be smart and try to check if a buffer is used | 7890 // NOTE: we could be smart and try to check if a buffer is used |
| (...skipping 7721 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15613 } | 15612 } |
| 15614 | 15613 |
| 15615 // Include the auto-generated part of this file. We split this because it means | 15614 // Include the auto-generated part of this file. We split this because it means |
| 15616 // we can easily edit the non-auto generated parts right here in this file | 15615 // we can easily edit the non-auto generated parts right here in this file |
| 15617 // instead of having to edit some template or the code generator. | 15616 // instead of having to edit some template or the code generator. |
| 15618 #include "base/macros.h" | 15617 #include "base/macros.h" |
| 15619 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 15618 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
| 15620 | 15619 |
| 15621 } // namespace gles2 | 15620 } // namespace gles2 |
| 15622 } // namespace gpu | 15621 } // namespace gpu |
| OLD | NEW |