| 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 1772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1783 void DoValidateProgram(GLuint program_client_id); | 1783 void DoValidateProgram(GLuint program_client_id); |
| 1784 | 1784 |
| 1785 void DoInsertEventMarkerEXT(GLsizei length, const GLchar* marker); | 1785 void DoInsertEventMarkerEXT(GLsizei length, const GLchar* marker); |
| 1786 void DoPushGroupMarkerEXT(GLsizei length, const GLchar* group); | 1786 void DoPushGroupMarkerEXT(GLsizei length, const GLchar* group); |
| 1787 void DoPopGroupMarkerEXT(void); | 1787 void DoPopGroupMarkerEXT(void); |
| 1788 | 1788 |
| 1789 // Gets the number of values that will be returned by glGetXXX. Returns | 1789 // Gets the number of values that will be returned by glGetXXX. Returns |
| 1790 // false if pname is unknown. | 1790 // false if pname is unknown. |
| 1791 bool GetNumValuesReturnedForGLGet(GLenum pname, GLsizei* num_values); | 1791 bool GetNumValuesReturnedForGLGet(GLenum pname, GLsizei* num_values); |
| 1792 | 1792 |
| 1793 // Checks if the type of an attribute set by vertexAttrib API match |
| 1794 // the type of corresponding attribute in vertex shader. |
| 1795 bool AttribsTypeMatch(); |
| 1796 |
| 1793 // Checks if the current program and vertex attributes are valid for drawing. | 1797 // Checks if the current program and vertex attributes are valid for drawing. |
| 1794 bool IsDrawValid( | 1798 bool IsDrawValid( |
| 1795 const char* function_name, GLuint max_vertex_accessed, bool instanced, | 1799 const char* function_name, GLuint max_vertex_accessed, bool instanced, |
| 1796 GLsizei primcount); | 1800 GLsizei primcount); |
| 1797 | 1801 |
| 1798 // Returns true if successful, simulated will be true if attrib0 was | 1802 // Returns true if successful, simulated will be true if attrib0 was |
| 1799 // simulated. | 1803 // simulated. |
| 1800 bool SimulateAttrib0( | 1804 bool SimulateAttrib0( |
| 1801 const char* function_name, GLuint max_vertex_accessed, bool* simulated); | 1805 const char* function_name, GLuint max_vertex_accessed, bool* simulated); |
| 1802 void RestoreStateForAttrib(GLuint attrib, bool restore_array_binding); | 1806 void RestoreStateForAttrib(GLuint attrib, bool restore_array_binding); |
| (...skipping 7225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9028 | 9032 |
| 9029 void GLES2DecoderImpl::RestoreStateForSimulatedFixedAttribs() { | 9033 void GLES2DecoderImpl::RestoreStateForSimulatedFixedAttribs() { |
| 9030 // There's no need to call glVertexAttribPointer because we shadow all the | 9034 // There's no need to call glVertexAttribPointer because we shadow all the |
| 9031 // settings and passing GL_FIXED to it will not work. | 9035 // settings and passing GL_FIXED to it will not work. |
| 9032 glBindBuffer( | 9036 glBindBuffer( |
| 9033 GL_ARRAY_BUFFER, | 9037 GL_ARRAY_BUFFER, |
| 9034 state_.bound_array_buffer.get() ? state_.bound_array_buffer->service_id() | 9038 state_.bound_array_buffer.get() ? state_.bound_array_buffer->service_id() |
| 9035 : 0); | 9039 : 0); |
| 9036 } | 9040 } |
| 9037 | 9041 |
| 9042 bool GLES2DecoderImpl::AttribsTypeMatch() { |
| 9043 uint32_t mask = state_.current_program->vertex_input_written_mask() | |
| 9044 state_.vertex_attrib_manager->attrib_written_mask(); |
| 9045 if ((mask | state_.current_program->vertex_input_type_mask()) == |
| 9046 (mask | state_.vertex_attrib_manager->attrib_base_type_mask())) { |
| 9047 return true; |
| 9048 } |
| 9049 return false; |
| 9050 } |
| 9051 |
| 9038 error::Error GLES2DecoderImpl::DoDrawArrays( | 9052 error::Error GLES2DecoderImpl::DoDrawArrays( |
| 9039 const char* function_name, | 9053 const char* function_name, |
| 9040 bool instanced, | 9054 bool instanced, |
| 9041 GLenum mode, | 9055 GLenum mode, |
| 9042 GLint first, | 9056 GLint first, |
| 9043 GLsizei count, | 9057 GLsizei count, |
| 9044 GLsizei primcount) { | 9058 GLsizei primcount) { |
| 9045 error::Error error = WillAccessBoundFramebufferForDraw(); | 9059 error::Error error = WillAccessBoundFramebufferForDraw(); |
| 9046 if (error != error::kNoError) | 9060 if (error != error::kNoError) |
| 9047 return error; | 9061 return error; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 9074 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, | 9088 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, |
| 9075 "mode is not identical with active transformfeedback's primitiveMode"); | 9089 "mode is not identical with active transformfeedback's primitiveMode"); |
| 9076 return error::kNoError; | 9090 return error::kNoError; |
| 9077 } | 9091 } |
| 9078 | 9092 |
| 9079 if (count == 0 || primcount == 0) { | 9093 if (count == 0 || primcount == 0) { |
| 9080 LOCAL_RENDER_WARNING("Render count or primcount is 0."); | 9094 LOCAL_RENDER_WARNING("Render count or primcount is 0."); |
| 9081 return error::kNoError; | 9095 return error::kNoError; |
| 9082 } | 9096 } |
| 9083 | 9097 |
| 9098 if (!AttribsTypeMatch()) { |
| 9099 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, |
| 9100 "vertexAttrib function must match shader attrib type"); |
| 9101 return error::kNoError; |
| 9102 } |
| 9103 |
| 9084 GLuint max_vertex_accessed = first + count - 1; | 9104 GLuint max_vertex_accessed = first + count - 1; |
| 9085 if (IsDrawValid(function_name, max_vertex_accessed, instanced, primcount)) { | 9105 if (IsDrawValid(function_name, max_vertex_accessed, instanced, primcount)) { |
| 9086 if (!ClearUnclearedTextures()) { | 9106 if (!ClearUnclearedTextures()) { |
| 9087 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "out of memory"); | 9107 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "out of memory"); |
| 9088 return error::kNoError; | 9108 return error::kNoError; |
| 9089 } | 9109 } |
| 9090 bool simulated_attrib_0 = false; | 9110 bool simulated_attrib_0 = false; |
| 9091 if (!SimulateAttrib0( | 9111 if (!SimulateAttrib0( |
| 9092 function_name, max_vertex_accessed, &simulated_attrib_0)) { | 9112 function_name, max_vertex_accessed, &simulated_attrib_0)) { |
| 9093 return error::kNoError; | 9113 return error::kNoError; |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9197 !state_.bound_transform_feedback->paused()) { | 9217 !state_.bound_transform_feedback->paused()) { |
| 9198 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, | 9218 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, |
| 9199 "transformfeedback is active and not paused"); | 9219 "transformfeedback is active and not paused"); |
| 9200 return error::kNoError; | 9220 return error::kNoError; |
| 9201 } | 9221 } |
| 9202 | 9222 |
| 9203 if (count == 0 || primcount == 0) { | 9223 if (count == 0 || primcount == 0) { |
| 9204 return error::kNoError; | 9224 return error::kNoError; |
| 9205 } | 9225 } |
| 9206 | 9226 |
| 9227 if (!AttribsTypeMatch()) { |
| 9228 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, |
| 9229 "vertexAttrib function must match shader attrib type"); |
| 9230 return error::kNoError; |
| 9231 } |
| 9232 |
| 9207 GLuint max_vertex_accessed; | 9233 GLuint max_vertex_accessed; |
| 9208 Buffer* element_array_buffer = | 9234 Buffer* element_array_buffer = |
| 9209 state_.vertex_attrib_manager->element_array_buffer(); | 9235 state_.vertex_attrib_manager->element_array_buffer(); |
| 9210 | 9236 |
| 9211 if (!element_array_buffer->GetMaxValueForRange( | 9237 if (!element_array_buffer->GetMaxValueForRange( |
| 9212 offset, count, type, | 9238 offset, count, type, |
| 9213 state_.enable_flags.primitive_restart_fixed_index, | 9239 state_.enable_flags.primitive_restart_fixed_index, |
| 9214 &max_vertex_accessed)) { | 9240 &max_vertex_accessed)) { |
| 9215 LOCAL_SET_GL_ERROR( | 9241 LOCAL_SET_GL_ERROR( |
| 9216 GL_INVALID_OPERATION, function_name, "range out of bounds for buffer"); | 9242 GL_INVALID_OPERATION, function_name, "range out of bounds for buffer"); |
| (...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9790 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "index out of range"); | 9816 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "index out of range"); |
| 9791 return false; | 9817 return false; |
| 9792 } | 9818 } |
| 9793 state_.attrib_values[index].SetValues(value); | 9819 state_.attrib_values[index].SetValues(value); |
| 9794 return true; | 9820 return true; |
| 9795 } | 9821 } |
| 9796 | 9822 |
| 9797 void GLES2DecoderImpl::DoVertexAttrib1f(GLuint index, GLfloat v0) { | 9823 void GLES2DecoderImpl::DoVertexAttrib1f(GLuint index, GLfloat v0) { |
| 9798 GLfloat v[4] = { v0, 0.0f, 0.0f, 1.0f, }; | 9824 GLfloat v[4] = { v0, 0.0f, 0.0f, 1.0f, }; |
| 9799 if (SetVertexAttribValue("glVertexAttrib1f", index, v)) { | 9825 if (SetVertexAttribValue("glVertexAttrib1f", index, v)) { |
| 9826 state_.vertex_attrib_manager->UpdateAttribBaseTypeAndMask( |
| 9827 index, SHADER_VARIABLE_FLOAT); |
| 9800 glVertexAttrib1f(index, v0); | 9828 glVertexAttrib1f(index, v0); |
| 9801 } | 9829 } |
| 9802 } | 9830 } |
| 9803 | 9831 |
| 9804 void GLES2DecoderImpl::DoVertexAttrib2f(GLuint index, GLfloat v0, GLfloat v1) { | 9832 void GLES2DecoderImpl::DoVertexAttrib2f(GLuint index, GLfloat v0, GLfloat v1) { |
| 9805 GLfloat v[4] = { v0, v1, 0.0f, 1.0f, }; | 9833 GLfloat v[4] = { v0, v1, 0.0f, 1.0f, }; |
| 9806 if (SetVertexAttribValue("glVertexAttrib2f", index, v)) { | 9834 if (SetVertexAttribValue("glVertexAttrib2f", index, v)) { |
| 9835 state_.vertex_attrib_manager->UpdateAttribBaseTypeAndMask( |
| 9836 index, SHADER_VARIABLE_FLOAT); |
| 9807 glVertexAttrib2f(index, v0, v1); | 9837 glVertexAttrib2f(index, v0, v1); |
| 9808 } | 9838 } |
| 9809 } | 9839 } |
| 9810 | 9840 |
| 9811 void GLES2DecoderImpl::DoVertexAttrib3f( | 9841 void GLES2DecoderImpl::DoVertexAttrib3f( |
| 9812 GLuint index, GLfloat v0, GLfloat v1, GLfloat v2) { | 9842 GLuint index, GLfloat v0, GLfloat v1, GLfloat v2) { |
| 9813 GLfloat v[4] = { v0, v1, v2, 1.0f, }; | 9843 GLfloat v[4] = { v0, v1, v2, 1.0f, }; |
| 9814 if (SetVertexAttribValue("glVertexAttrib3f", index, v)) { | 9844 if (SetVertexAttribValue("glVertexAttrib3f", index, v)) { |
| 9845 state_.vertex_attrib_manager->UpdateAttribBaseTypeAndMask( |
| 9846 index, SHADER_VARIABLE_FLOAT); |
| 9815 glVertexAttrib3f(index, v0, v1, v2); | 9847 glVertexAttrib3f(index, v0, v1, v2); |
| 9816 } | 9848 } |
| 9817 } | 9849 } |
| 9818 | 9850 |
| 9819 void GLES2DecoderImpl::DoVertexAttrib4f( | 9851 void GLES2DecoderImpl::DoVertexAttrib4f( |
| 9820 GLuint index, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) { | 9852 GLuint index, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) { |
| 9821 GLfloat v[4] = { v0, v1, v2, v3, }; | 9853 GLfloat v[4] = { v0, v1, v2, v3, }; |
| 9822 if (SetVertexAttribValue("glVertexAttrib4f", index, v)) { | 9854 if (SetVertexAttribValue("glVertexAttrib4f", index, v)) { |
| 9855 state_.vertex_attrib_manager->UpdateAttribBaseTypeAndMask( |
| 9856 index, SHADER_VARIABLE_FLOAT); |
| 9823 glVertexAttrib4f(index, v0, v1, v2, v3); | 9857 glVertexAttrib4f(index, v0, v1, v2, v3); |
| 9824 } | 9858 } |
| 9825 } | 9859 } |
| 9826 | 9860 |
| 9827 void GLES2DecoderImpl::DoVertexAttrib1fv(GLuint index, const GLfloat* v) { | 9861 void GLES2DecoderImpl::DoVertexAttrib1fv(GLuint index, const GLfloat* v) { |
| 9828 GLfloat t[4] = { v[0], 0.0f, 0.0f, 1.0f, }; | 9862 GLfloat t[4] = { v[0], 0.0f, 0.0f, 1.0f, }; |
| 9829 if (SetVertexAttribValue("glVertexAttrib1fv", index, t)) { | 9863 if (SetVertexAttribValue("glVertexAttrib1fv", index, t)) { |
| 9864 state_.vertex_attrib_manager->UpdateAttribBaseTypeAndMask( |
| 9865 index, SHADER_VARIABLE_FLOAT); |
| 9830 glVertexAttrib1fv(index, v); | 9866 glVertexAttrib1fv(index, v); |
| 9831 } | 9867 } |
| 9832 } | 9868 } |
| 9833 | 9869 |
| 9834 void GLES2DecoderImpl::DoVertexAttrib2fv(GLuint index, const GLfloat* v) { | 9870 void GLES2DecoderImpl::DoVertexAttrib2fv(GLuint index, const GLfloat* v) { |
| 9835 GLfloat t[4] = { v[0], v[1], 0.0f, 1.0f, }; | 9871 GLfloat t[4] = { v[0], v[1], 0.0f, 1.0f, }; |
| 9836 if (SetVertexAttribValue("glVertexAttrib2fv", index, t)) { | 9872 if (SetVertexAttribValue("glVertexAttrib2fv", index, t)) { |
| 9873 state_.vertex_attrib_manager->UpdateAttribBaseTypeAndMask( |
| 9874 index, SHADER_VARIABLE_FLOAT); |
| 9837 glVertexAttrib2fv(index, v); | 9875 glVertexAttrib2fv(index, v); |
| 9838 } | 9876 } |
| 9839 } | 9877 } |
| 9840 | 9878 |
| 9841 void GLES2DecoderImpl::DoVertexAttrib3fv(GLuint index, const GLfloat* v) { | 9879 void GLES2DecoderImpl::DoVertexAttrib3fv(GLuint index, const GLfloat* v) { |
| 9842 GLfloat t[4] = { v[0], v[1], v[2], 1.0f, }; | 9880 GLfloat t[4] = { v[0], v[1], v[2], 1.0f, }; |
| 9843 if (SetVertexAttribValue("glVertexAttrib3fv", index, t)) { | 9881 if (SetVertexAttribValue("glVertexAttrib3fv", index, t)) { |
| 9882 state_.vertex_attrib_manager->UpdateAttribBaseTypeAndMask( |
| 9883 index, SHADER_VARIABLE_FLOAT); |
| 9844 glVertexAttrib3fv(index, v); | 9884 glVertexAttrib3fv(index, v); |
| 9845 } | 9885 } |
| 9846 } | 9886 } |
| 9847 | 9887 |
| 9848 void GLES2DecoderImpl::DoVertexAttrib4fv(GLuint index, const GLfloat* v) { | 9888 void GLES2DecoderImpl::DoVertexAttrib4fv(GLuint index, const GLfloat* v) { |
| 9849 if (SetVertexAttribValue("glVertexAttrib4fv", index, v)) { | 9889 if (SetVertexAttribValue("glVertexAttrib4fv", index, v)) { |
| 9890 state_.vertex_attrib_manager->UpdateAttribBaseTypeAndMask( |
| 9891 index, SHADER_VARIABLE_FLOAT); |
| 9850 glVertexAttrib4fv(index, v); | 9892 glVertexAttrib4fv(index, v); |
| 9851 } | 9893 } |
| 9852 } | 9894 } |
| 9853 | 9895 |
| 9854 void GLES2DecoderImpl::DoVertexAttribI4i( | 9896 void GLES2DecoderImpl::DoVertexAttribI4i( |
| 9855 GLuint index, GLint v0, GLint v1, GLint v2, GLint v3) { | 9897 GLuint index, GLint v0, GLint v1, GLint v2, GLint v3) { |
| 9856 GLint v[4] = { v0, v1, v2, v3 }; | 9898 GLint v[4] = { v0, v1, v2, v3 }; |
| 9857 if (SetVertexAttribValue("glVertexAttribI4i", index, v)) { | 9899 if (SetVertexAttribValue("glVertexAttribI4i", index, v)) { |
| 9900 state_.vertex_attrib_manager->UpdateAttribBaseTypeAndMask( |
| 9901 index, SHADER_VARIABLE_INT); |
| 9858 glVertexAttribI4i(index, v0, v1, v2, v3); | 9902 glVertexAttribI4i(index, v0, v1, v2, v3); |
| 9859 } | 9903 } |
| 9860 } | 9904 } |
| 9861 | 9905 |
| 9862 void GLES2DecoderImpl::DoVertexAttribI4iv(GLuint index, const GLint* v) { | 9906 void GLES2DecoderImpl::DoVertexAttribI4iv(GLuint index, const GLint* v) { |
| 9863 if (SetVertexAttribValue("glVertexAttribI4iv", index, v)) { | 9907 if (SetVertexAttribValue("glVertexAttribI4iv", index, v)) { |
| 9908 state_.vertex_attrib_manager->UpdateAttribBaseTypeAndMask( |
| 9909 index, SHADER_VARIABLE_INT); |
| 9864 glVertexAttribI4iv(index, v); | 9910 glVertexAttribI4iv(index, v); |
| 9865 } | 9911 } |
| 9866 } | 9912 } |
| 9867 | 9913 |
| 9868 void GLES2DecoderImpl::DoVertexAttribI4ui( | 9914 void GLES2DecoderImpl::DoVertexAttribI4ui( |
| 9869 GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3) { | 9915 GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3) { |
| 9870 GLuint v[4] = { v0, v1, v2, v3 }; | 9916 GLuint v[4] = { v0, v1, v2, v3 }; |
| 9871 if (SetVertexAttribValue("glVertexAttribI4ui", index, v)) { | 9917 if (SetVertexAttribValue("glVertexAttribI4ui", index, v)) { |
| 9918 state_.vertex_attrib_manager->UpdateAttribBaseTypeAndMask( |
| 9919 index, SHADER_VARIABLE_UINT); |
| 9872 glVertexAttribI4ui(index, v0, v1, v2, v3); | 9920 glVertexAttribI4ui(index, v0, v1, v2, v3); |
| 9873 } | 9921 } |
| 9874 } | 9922 } |
| 9875 | 9923 |
| 9876 void GLES2DecoderImpl::DoVertexAttribI4uiv(GLuint index, const GLuint* v) { | 9924 void GLES2DecoderImpl::DoVertexAttribI4uiv(GLuint index, const GLuint* v) { |
| 9877 if (SetVertexAttribValue("glVertexAttribI4uiv", index, v)) { | 9925 if (SetVertexAttribValue("glVertexAttribI4uiv", index, v)) { |
| 9926 state_.vertex_attrib_manager->UpdateAttribBaseTypeAndMask( |
| 9927 index, SHADER_VARIABLE_UINT); |
| 9878 glVertexAttribI4uiv(index, v); | 9928 glVertexAttribI4uiv(index, v); |
| 9879 } | 9929 } |
| 9880 } | 9930 } |
| 9881 | 9931 |
| 9882 error::Error GLES2DecoderImpl::HandleVertexAttribIPointer( | 9932 error::Error GLES2DecoderImpl::HandleVertexAttribIPointer( |
| 9883 uint32_t immediate_data_size, | 9933 uint32_t immediate_data_size, |
| 9884 const void* cmd_data) { | 9934 const void* cmd_data) { |
| 9885 if (!unsafe_es3_apis_enabled()) | 9935 if (!unsafe_es3_apis_enabled()) |
| 9886 return error::kUnknownCommand; | 9936 return error::kUnknownCommand; |
| 9887 const gles2::cmds::VertexAttribIPointer& c = | 9937 const gles2::cmds::VertexAttribIPointer& c = |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9947 "glVertexAttribIPointer", "offset not valid for type"); | 9997 "glVertexAttribIPointer", "offset not valid for type"); |
| 9948 return error::kNoError; | 9998 return error::kNoError; |
| 9949 } | 9999 } |
| 9950 if (stride & (type_size - 1)) { | 10000 if (stride & (type_size - 1)) { |
| 9951 LOCAL_SET_GL_ERROR( | 10001 LOCAL_SET_GL_ERROR( |
| 9952 GL_INVALID_OPERATION, | 10002 GL_INVALID_OPERATION, |
| 9953 "glVertexAttribIPointer", "stride not valid for type"); | 10003 "glVertexAttribIPointer", "stride not valid for type"); |
| 9954 return error::kNoError; | 10004 return error::kNoError; |
| 9955 } | 10005 } |
| 9956 GLsizei group_size = GLES2Util::GetGroupSizeForBufferType(size, type); | 10006 GLsizei group_size = GLES2Util::GetGroupSizeForBufferType(size, type); |
| 10007 GLenum base_type = (type == GL_BYTE || type == GL_SHORT || type == GL_INT) ? |
| 10008 SHADER_VARIABLE_INT : SHADER_VARIABLE_UINT; |
| 10009 state_.vertex_attrib_manager->UpdateAttribBaseTypeAndMask(indx, base_type); |
| 9957 state_.vertex_attrib_manager | 10010 state_.vertex_attrib_manager |
| 9958 ->SetAttribInfo(indx, | 10011 ->SetAttribInfo(indx, |
| 9959 state_.bound_array_buffer.get(), | 10012 state_.bound_array_buffer.get(), |
| 9960 size, | 10013 size, |
| 9961 type, | 10014 type, |
| 9962 GL_FALSE, | 10015 GL_FALSE, |
| 9963 stride, | 10016 stride, |
| 9964 stride != 0 ? stride : group_size, | 10017 stride != 0 ? stride : group_size, |
| 9965 offset, | 10018 offset, |
| 9966 GL_TRUE); | 10019 GL_TRUE); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10041 "glVertexAttribPointer", "offset not valid for type"); | 10094 "glVertexAttribPointer", "offset not valid for type"); |
| 10042 return error::kNoError; | 10095 return error::kNoError; |
| 10043 } | 10096 } |
| 10044 if (stride & (type_size - 1)) { | 10097 if (stride & (type_size - 1)) { |
| 10045 LOCAL_SET_GL_ERROR( | 10098 LOCAL_SET_GL_ERROR( |
| 10046 GL_INVALID_OPERATION, | 10099 GL_INVALID_OPERATION, |
| 10047 "glVertexAttribPointer", "stride not valid for type"); | 10100 "glVertexAttribPointer", "stride not valid for type"); |
| 10048 return error::kNoError; | 10101 return error::kNoError; |
| 10049 } | 10102 } |
| 10050 GLsizei group_size = GLES2Util::GetGroupSizeForBufferType(size, type); | 10103 GLsizei group_size = GLES2Util::GetGroupSizeForBufferType(size, type); |
| 10104 state_.vertex_attrib_manager->UpdateAttribBaseTypeAndMask( |
| 10105 indx, SHADER_VARIABLE_FLOAT); |
| 10051 state_.vertex_attrib_manager | 10106 state_.vertex_attrib_manager |
| 10052 ->SetAttribInfo(indx, | 10107 ->SetAttribInfo(indx, |
| 10053 state_.bound_array_buffer.get(), | 10108 state_.bound_array_buffer.get(), |
| 10054 size, | 10109 size, |
| 10055 type, | 10110 type, |
| 10056 normalized, | 10111 normalized, |
| 10057 stride, | 10112 stride, |
| 10058 stride != 0 ? stride : group_size, | 10113 stride != 0 ? stride : group_size, |
| 10059 offset, | 10114 offset, |
| 10060 GL_FALSE); | 10115 GL_FALSE); |
| (...skipping 7343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 17404 } | 17459 } |
| 17405 | 17460 |
| 17406 // Include the auto-generated part of this file. We split this because it means | 17461 // Include the auto-generated part of this file. We split this because it means |
| 17407 // we can easily edit the non-auto generated parts right here in this file | 17462 // we can easily edit the non-auto generated parts right here in this file |
| 17408 // instead of having to edit some template or the code generator. | 17463 // instead of having to edit some template or the code generator. |
| 17409 #include "base/macros.h" | 17464 #include "base/macros.h" |
| 17410 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 17465 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
| 17411 | 17466 |
| 17412 } // namespace gles2 | 17467 } // namespace gles2 |
| 17413 } // namespace gpu | 17468 } // namespace gpu |
| OLD | NEW |