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

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

Issue 2148723004: WebGL 2: make sure VertexAttrib type match the corresponding attrib type in shader (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: coding style Created 4 years, 5 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 <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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | gpu/command_buffer/service/program_manager.h » ('j') | gpu/command_buffer/service/program_manager.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698