| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 // This file is auto-generated from | 5 // This file is auto-generated from |
| 6 // gpu/command_buffer/build_gles2_cmd_buffer.py | 6 // gpu/command_buffer/build_gles2_cmd_buffer.py |
| 7 // It's formatted by clang-format using chromium coding style: | 7 // It's formatted by clang-format using chromium coding style: |
| 8 // clang-format -i -style=chromium filename | 8 // clang-format -i -style=chromium filename |
| 9 // DO NOT EDIT! | 9 // DO NOT EDIT! |
| 10 | 10 |
| 11 // It is included by gles2_cmd_decoder.cc | 11 // It is included by gles2_cmd_decoder.cc |
| 12 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ | 12 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ |
| 13 #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ | 13 #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ |
| 14 | 14 |
| 15 error::Error GLES2DecoderImpl::HandleActiveTexture(uint32_t immediate_data_size, | 15 error::Error GLES2DecoderImpl::HandleActiveTexture( |
| 16 const void* cmd_data) { | 16 uint32_t immediate_data_size, |
| 17 const gles2::cmds::ActiveTexture& c = | 17 const volatile void* cmd_data) { |
| 18 *static_cast<const gles2::cmds::ActiveTexture*>(cmd_data); | 18 const volatile gles2::cmds::ActiveTexture& c = |
| 19 (void)c; | 19 *static_cast<const volatile gles2::cmds::ActiveTexture*>(cmd_data); |
| 20 GLenum texture = static_cast<GLenum>(c.texture); | 20 GLenum texture = static_cast<GLenum>(c.texture); |
| 21 DoActiveTexture(texture); | 21 DoActiveTexture(texture); |
| 22 return error::kNoError; | 22 return error::kNoError; |
| 23 } | 23 } |
| 24 | 24 |
| 25 error::Error GLES2DecoderImpl::HandleAttachShader(uint32_t immediate_data_size, | 25 error::Error GLES2DecoderImpl::HandleAttachShader( |
| 26 const void* cmd_data) { | 26 uint32_t immediate_data_size, |
| 27 const gles2::cmds::AttachShader& c = | 27 const volatile void* cmd_data) { |
| 28 *static_cast<const gles2::cmds::AttachShader*>(cmd_data); | 28 const volatile gles2::cmds::AttachShader& c = |
| 29 (void)c; | 29 *static_cast<const volatile gles2::cmds::AttachShader*>(cmd_data); |
| 30 GLuint program = c.program; | 30 GLuint program = c.program; |
| 31 GLuint shader = c.shader; | 31 GLuint shader = c.shader; |
| 32 DoAttachShader(program, shader); | 32 DoAttachShader(program, shader); |
| 33 return error::kNoError; | 33 return error::kNoError; |
| 34 } | 34 } |
| 35 | 35 |
| 36 error::Error GLES2DecoderImpl::HandleBindBuffer(uint32_t immediate_data_size, | 36 error::Error GLES2DecoderImpl::HandleBindBuffer(uint32_t immediate_data_size, |
| 37 const void* cmd_data) { | 37 const volatile void* cmd_data) { |
| 38 const gles2::cmds::BindBuffer& c = | 38 const volatile gles2::cmds::BindBuffer& c = |
| 39 *static_cast<const gles2::cmds::BindBuffer*>(cmd_data); | 39 *static_cast<const volatile gles2::cmds::BindBuffer*>(cmd_data); |
| 40 (void)c; | |
| 41 GLenum target = static_cast<GLenum>(c.target); | 40 GLenum target = static_cast<GLenum>(c.target); |
| 42 GLuint buffer = c.buffer; | 41 GLuint buffer = c.buffer; |
| 43 if (!validators_->buffer_target.IsValid(target)) { | 42 if (!validators_->buffer_target.IsValid(target)) { |
| 44 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindBuffer", target, "target"); | 43 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindBuffer", target, "target"); |
| 45 return error::kNoError; | 44 return error::kNoError; |
| 46 } | 45 } |
| 47 DoBindBuffer(target, buffer); | 46 DoBindBuffer(target, buffer); |
| 48 return error::kNoError; | 47 return error::kNoError; |
| 49 } | 48 } |
| 50 | 49 |
| 51 error::Error GLES2DecoderImpl::HandleBindBufferBase( | 50 error::Error GLES2DecoderImpl::HandleBindBufferBase( |
| 52 uint32_t immediate_data_size, | 51 uint32_t immediate_data_size, |
| 53 const void* cmd_data) { | 52 const volatile void* cmd_data) { |
| 54 if (!unsafe_es3_apis_enabled()) | 53 if (!unsafe_es3_apis_enabled()) |
| 55 return error::kUnknownCommand; | 54 return error::kUnknownCommand; |
| 56 const gles2::cmds::BindBufferBase& c = | 55 const volatile gles2::cmds::BindBufferBase& c = |
| 57 *static_cast<const gles2::cmds::BindBufferBase*>(cmd_data); | 56 *static_cast<const volatile gles2::cmds::BindBufferBase*>(cmd_data); |
| 58 (void)c; | |
| 59 GLenum target = static_cast<GLenum>(c.target); | 57 GLenum target = static_cast<GLenum>(c.target); |
| 60 GLuint index = static_cast<GLuint>(c.index); | 58 GLuint index = static_cast<GLuint>(c.index); |
| 61 GLuint buffer = c.buffer; | 59 GLuint buffer = c.buffer; |
| 62 if (!validators_->indexed_buffer_target.IsValid(target)) { | 60 if (!validators_->indexed_buffer_target.IsValid(target)) { |
| 63 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindBufferBase", target, "target"); | 61 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindBufferBase", target, "target"); |
| 64 return error::kNoError; | 62 return error::kNoError; |
| 65 } | 63 } |
| 66 DoBindBufferBase(target, index, buffer); | 64 DoBindBufferBase(target, index, buffer); |
| 67 return error::kNoError; | 65 return error::kNoError; |
| 68 } | 66 } |
| 69 | 67 |
| 70 error::Error GLES2DecoderImpl::HandleBindBufferRange( | 68 error::Error GLES2DecoderImpl::HandleBindBufferRange( |
| 71 uint32_t immediate_data_size, | 69 uint32_t immediate_data_size, |
| 72 const void* cmd_data) { | 70 const volatile void* cmd_data) { |
| 73 if (!unsafe_es3_apis_enabled()) | 71 if (!unsafe_es3_apis_enabled()) |
| 74 return error::kUnknownCommand; | 72 return error::kUnknownCommand; |
| 75 const gles2::cmds::BindBufferRange& c = | 73 const volatile gles2::cmds::BindBufferRange& c = |
| 76 *static_cast<const gles2::cmds::BindBufferRange*>(cmd_data); | 74 *static_cast<const volatile gles2::cmds::BindBufferRange*>(cmd_data); |
| 77 (void)c; | |
| 78 GLenum target = static_cast<GLenum>(c.target); | 75 GLenum target = static_cast<GLenum>(c.target); |
| 79 GLuint index = static_cast<GLuint>(c.index); | 76 GLuint index = static_cast<GLuint>(c.index); |
| 80 GLuint buffer = c.buffer; | 77 GLuint buffer = c.buffer; |
| 81 GLintptr offset = static_cast<GLintptr>(c.offset); | 78 GLintptr offset = static_cast<GLintptr>(c.offset); |
| 82 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); | 79 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); |
| 83 if (!validators_->indexed_buffer_target.IsValid(target)) { | 80 if (!validators_->indexed_buffer_target.IsValid(target)) { |
| 84 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindBufferRange", target, "target"); | 81 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindBufferRange", target, "target"); |
| 85 return error::kNoError; | 82 return error::kNoError; |
| 86 } | 83 } |
| 87 if (size < 0) { | 84 if (size < 0) { |
| 88 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glBindBufferRange", "size < 0"); | 85 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glBindBufferRange", "size < 0"); |
| 89 return error::kNoError; | 86 return error::kNoError; |
| 90 } | 87 } |
| 91 DoBindBufferRange(target, index, buffer, offset, size); | 88 DoBindBufferRange(target, index, buffer, offset, size); |
| 92 return error::kNoError; | 89 return error::kNoError; |
| 93 } | 90 } |
| 94 | 91 |
| 95 error::Error GLES2DecoderImpl::HandleBindFramebuffer( | 92 error::Error GLES2DecoderImpl::HandleBindFramebuffer( |
| 96 uint32_t immediate_data_size, | 93 uint32_t immediate_data_size, |
| 97 const void* cmd_data) { | 94 const volatile void* cmd_data) { |
| 98 const gles2::cmds::BindFramebuffer& c = | 95 const volatile gles2::cmds::BindFramebuffer& c = |
| 99 *static_cast<const gles2::cmds::BindFramebuffer*>(cmd_data); | 96 *static_cast<const volatile gles2::cmds::BindFramebuffer*>(cmd_data); |
| 100 (void)c; | |
| 101 GLenum target = static_cast<GLenum>(c.target); | 97 GLenum target = static_cast<GLenum>(c.target); |
| 102 GLuint framebuffer = c.framebuffer; | 98 GLuint framebuffer = c.framebuffer; |
| 103 if (!validators_->framebuffer_target.IsValid(target)) { | 99 if (!validators_->framebuffer_target.IsValid(target)) { |
| 104 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindFramebuffer", target, "target"); | 100 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindFramebuffer", target, "target"); |
| 105 return error::kNoError; | 101 return error::kNoError; |
| 106 } | 102 } |
| 107 DoBindFramebuffer(target, framebuffer); | 103 DoBindFramebuffer(target, framebuffer); |
| 108 return error::kNoError; | 104 return error::kNoError; |
| 109 } | 105 } |
| 110 | 106 |
| 111 error::Error GLES2DecoderImpl::HandleBindRenderbuffer( | 107 error::Error GLES2DecoderImpl::HandleBindRenderbuffer( |
| 112 uint32_t immediate_data_size, | 108 uint32_t immediate_data_size, |
| 113 const void* cmd_data) { | 109 const volatile void* cmd_data) { |
| 114 const gles2::cmds::BindRenderbuffer& c = | 110 const volatile gles2::cmds::BindRenderbuffer& c = |
| 115 *static_cast<const gles2::cmds::BindRenderbuffer*>(cmd_data); | 111 *static_cast<const volatile gles2::cmds::BindRenderbuffer*>(cmd_data); |
| 116 (void)c; | |
| 117 GLenum target = static_cast<GLenum>(c.target); | 112 GLenum target = static_cast<GLenum>(c.target); |
| 118 GLuint renderbuffer = c.renderbuffer; | 113 GLuint renderbuffer = c.renderbuffer; |
| 119 if (!validators_->render_buffer_target.IsValid(target)) { | 114 if (!validators_->render_buffer_target.IsValid(target)) { |
| 120 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindRenderbuffer", target, "target"); | 115 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindRenderbuffer", target, "target"); |
| 121 return error::kNoError; | 116 return error::kNoError; |
| 122 } | 117 } |
| 123 DoBindRenderbuffer(target, renderbuffer); | 118 DoBindRenderbuffer(target, renderbuffer); |
| 124 return error::kNoError; | 119 return error::kNoError; |
| 125 } | 120 } |
| 126 | 121 |
| 127 error::Error GLES2DecoderImpl::HandleBindSampler(uint32_t immediate_data_size, | 122 error::Error GLES2DecoderImpl::HandleBindSampler( |
| 128 const void* cmd_data) { | 123 uint32_t immediate_data_size, |
| 124 const volatile void* cmd_data) { |
| 129 if (!unsafe_es3_apis_enabled()) | 125 if (!unsafe_es3_apis_enabled()) |
| 130 return error::kUnknownCommand; | 126 return error::kUnknownCommand; |
| 131 const gles2::cmds::BindSampler& c = | 127 const volatile gles2::cmds::BindSampler& c = |
| 132 *static_cast<const gles2::cmds::BindSampler*>(cmd_data); | 128 *static_cast<const volatile gles2::cmds::BindSampler*>(cmd_data); |
| 133 (void)c; | |
| 134 GLuint unit = static_cast<GLuint>(c.unit); | 129 GLuint unit = static_cast<GLuint>(c.unit); |
| 135 GLuint sampler = c.sampler; | 130 GLuint sampler = c.sampler; |
| 136 DoBindSampler(unit, sampler); | 131 DoBindSampler(unit, sampler); |
| 137 return error::kNoError; | 132 return error::kNoError; |
| 138 } | 133 } |
| 139 | 134 |
| 140 error::Error GLES2DecoderImpl::HandleBindTexture(uint32_t immediate_data_size, | 135 error::Error GLES2DecoderImpl::HandleBindTexture( |
| 141 const void* cmd_data) { | 136 uint32_t immediate_data_size, |
| 142 const gles2::cmds::BindTexture& c = | 137 const volatile void* cmd_data) { |
| 143 *static_cast<const gles2::cmds::BindTexture*>(cmd_data); | 138 const volatile gles2::cmds::BindTexture& c = |
| 144 (void)c; | 139 *static_cast<const volatile gles2::cmds::BindTexture*>(cmd_data); |
| 145 GLenum target = static_cast<GLenum>(c.target); | 140 GLenum target = static_cast<GLenum>(c.target); |
| 146 GLuint texture = c.texture; | 141 GLuint texture = c.texture; |
| 147 if (!validators_->texture_bind_target.IsValid(target)) { | 142 if (!validators_->texture_bind_target.IsValid(target)) { |
| 148 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTexture", target, "target"); | 143 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTexture", target, "target"); |
| 149 return error::kNoError; | 144 return error::kNoError; |
| 150 } | 145 } |
| 151 DoBindTexture(target, texture); | 146 DoBindTexture(target, texture); |
| 152 return error::kNoError; | 147 return error::kNoError; |
| 153 } | 148 } |
| 154 | 149 |
| 155 error::Error GLES2DecoderImpl::HandleBindTransformFeedback( | 150 error::Error GLES2DecoderImpl::HandleBindTransformFeedback( |
| 156 uint32_t immediate_data_size, | 151 uint32_t immediate_data_size, |
| 157 const void* cmd_data) { | 152 const volatile void* cmd_data) { |
| 158 if (!unsafe_es3_apis_enabled()) | 153 if (!unsafe_es3_apis_enabled()) |
| 159 return error::kUnknownCommand; | 154 return error::kUnknownCommand; |
| 160 const gles2::cmds::BindTransformFeedback& c = | 155 const volatile gles2::cmds::BindTransformFeedback& c = |
| 161 *static_cast<const gles2::cmds::BindTransformFeedback*>(cmd_data); | 156 *static_cast<const volatile gles2::cmds::BindTransformFeedback*>( |
| 162 (void)c; | 157 cmd_data); |
| 163 GLenum target = static_cast<GLenum>(c.target); | 158 GLenum target = static_cast<GLenum>(c.target); |
| 164 GLuint transformfeedback = c.transformfeedback; | 159 GLuint transformfeedback = c.transformfeedback; |
| 165 if (!validators_->transform_feedback_bind_target.IsValid(target)) { | 160 if (!validators_->transform_feedback_bind_target.IsValid(target)) { |
| 166 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTransformFeedback", target, | 161 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTransformFeedback", target, |
| 167 "target"); | 162 "target"); |
| 168 return error::kNoError; | 163 return error::kNoError; |
| 169 } | 164 } |
| 170 DoBindTransformFeedback(target, transformfeedback); | 165 DoBindTransformFeedback(target, transformfeedback); |
| 171 return error::kNoError; | 166 return error::kNoError; |
| 172 } | 167 } |
| 173 | 168 |
| 174 error::Error GLES2DecoderImpl::HandleBlendColor(uint32_t immediate_data_size, | 169 error::Error GLES2DecoderImpl::HandleBlendColor(uint32_t immediate_data_size, |
| 175 const void* cmd_data) { | 170 const volatile void* cmd_data) { |
| 176 const gles2::cmds::BlendColor& c = | 171 const volatile gles2::cmds::BlendColor& c = |
| 177 *static_cast<const gles2::cmds::BlendColor*>(cmd_data); | 172 *static_cast<const volatile gles2::cmds::BlendColor*>(cmd_data); |
| 178 (void)c; | |
| 179 GLclampf red = static_cast<GLclampf>(c.red); | 173 GLclampf red = static_cast<GLclampf>(c.red); |
| 180 GLclampf green = static_cast<GLclampf>(c.green); | 174 GLclampf green = static_cast<GLclampf>(c.green); |
| 181 GLclampf blue = static_cast<GLclampf>(c.blue); | 175 GLclampf blue = static_cast<GLclampf>(c.blue); |
| 182 GLclampf alpha = static_cast<GLclampf>(c.alpha); | 176 GLclampf alpha = static_cast<GLclampf>(c.alpha); |
| 183 if (state_.blend_color_red != red || state_.blend_color_green != green || | 177 if (state_.blend_color_red != red || state_.blend_color_green != green || |
| 184 state_.blend_color_blue != blue || state_.blend_color_alpha != alpha) { | 178 state_.blend_color_blue != blue || state_.blend_color_alpha != alpha) { |
| 185 state_.blend_color_red = red; | 179 state_.blend_color_red = red; |
| 186 state_.blend_color_green = green; | 180 state_.blend_color_green = green; |
| 187 state_.blend_color_blue = blue; | 181 state_.blend_color_blue = blue; |
| 188 state_.blend_color_alpha = alpha; | 182 state_.blend_color_alpha = alpha; |
| 189 glBlendColor(red, green, blue, alpha); | 183 glBlendColor(red, green, blue, alpha); |
| 190 } | 184 } |
| 191 return error::kNoError; | 185 return error::kNoError; |
| 192 } | 186 } |
| 193 | 187 |
| 194 error::Error GLES2DecoderImpl::HandleBlendEquation(uint32_t immediate_data_size, | 188 error::Error GLES2DecoderImpl::HandleBlendEquation( |
| 195 const void* cmd_data) { | 189 uint32_t immediate_data_size, |
| 196 const gles2::cmds::BlendEquation& c = | 190 const volatile void* cmd_data) { |
| 197 *static_cast<const gles2::cmds::BlendEquation*>(cmd_data); | 191 const volatile gles2::cmds::BlendEquation& c = |
| 198 (void)c; | 192 *static_cast<const volatile gles2::cmds::BlendEquation*>(cmd_data); |
| 199 GLenum mode = static_cast<GLenum>(c.mode); | 193 GLenum mode = static_cast<GLenum>(c.mode); |
| 200 if (!validators_->equation.IsValid(mode)) { | 194 if (!validators_->equation.IsValid(mode)) { |
| 201 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquation", mode, "mode"); | 195 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquation", mode, "mode"); |
| 202 return error::kNoError; | 196 return error::kNoError; |
| 203 } | 197 } |
| 204 if (state_.blend_equation_rgb != mode || | 198 if (state_.blend_equation_rgb != mode || |
| 205 state_.blend_equation_alpha != mode) { | 199 state_.blend_equation_alpha != mode) { |
| 206 state_.blend_equation_rgb = mode; | 200 state_.blend_equation_rgb = mode; |
| 207 state_.blend_equation_alpha = mode; | 201 state_.blend_equation_alpha = mode; |
| 208 glBlendEquation(mode); | 202 glBlendEquation(mode); |
| 209 } | 203 } |
| 210 return error::kNoError; | 204 return error::kNoError; |
| 211 } | 205 } |
| 212 | 206 |
| 213 error::Error GLES2DecoderImpl::HandleBlendEquationSeparate( | 207 error::Error GLES2DecoderImpl::HandleBlendEquationSeparate( |
| 214 uint32_t immediate_data_size, | 208 uint32_t immediate_data_size, |
| 215 const void* cmd_data) { | 209 const volatile void* cmd_data) { |
| 216 const gles2::cmds::BlendEquationSeparate& c = | 210 const volatile gles2::cmds::BlendEquationSeparate& c = |
| 217 *static_cast<const gles2::cmds::BlendEquationSeparate*>(cmd_data); | 211 *static_cast<const volatile gles2::cmds::BlendEquationSeparate*>( |
| 218 (void)c; | 212 cmd_data); |
| 219 GLenum modeRGB = static_cast<GLenum>(c.modeRGB); | 213 GLenum modeRGB = static_cast<GLenum>(c.modeRGB); |
| 220 GLenum modeAlpha = static_cast<GLenum>(c.modeAlpha); | 214 GLenum modeAlpha = static_cast<GLenum>(c.modeAlpha); |
| 221 if (!validators_->equation.IsValid(modeRGB)) { | 215 if (!validators_->equation.IsValid(modeRGB)) { |
| 222 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquationSeparate", modeRGB, | 216 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquationSeparate", modeRGB, |
| 223 "modeRGB"); | 217 "modeRGB"); |
| 224 return error::kNoError; | 218 return error::kNoError; |
| 225 } | 219 } |
| 226 if (!validators_->equation.IsValid(modeAlpha)) { | 220 if (!validators_->equation.IsValid(modeAlpha)) { |
| 227 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquationSeparate", modeAlpha, | 221 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquationSeparate", modeAlpha, |
| 228 "modeAlpha"); | 222 "modeAlpha"); |
| 229 return error::kNoError; | 223 return error::kNoError; |
| 230 } | 224 } |
| 231 if (state_.blend_equation_rgb != modeRGB || | 225 if (state_.blend_equation_rgb != modeRGB || |
| 232 state_.blend_equation_alpha != modeAlpha) { | 226 state_.blend_equation_alpha != modeAlpha) { |
| 233 state_.blend_equation_rgb = modeRGB; | 227 state_.blend_equation_rgb = modeRGB; |
| 234 state_.blend_equation_alpha = modeAlpha; | 228 state_.blend_equation_alpha = modeAlpha; |
| 235 glBlendEquationSeparate(modeRGB, modeAlpha); | 229 glBlendEquationSeparate(modeRGB, modeAlpha); |
| 236 } | 230 } |
| 237 return error::kNoError; | 231 return error::kNoError; |
| 238 } | 232 } |
| 239 | 233 |
| 240 error::Error GLES2DecoderImpl::HandleBlendFunc(uint32_t immediate_data_size, | 234 error::Error GLES2DecoderImpl::HandleBlendFunc(uint32_t immediate_data_size, |
| 241 const void* cmd_data) { | 235 const volatile void* cmd_data) { |
| 242 const gles2::cmds::BlendFunc& c = | 236 const volatile gles2::cmds::BlendFunc& c = |
| 243 *static_cast<const gles2::cmds::BlendFunc*>(cmd_data); | 237 *static_cast<const volatile gles2::cmds::BlendFunc*>(cmd_data); |
| 244 (void)c; | |
| 245 GLenum sfactor = static_cast<GLenum>(c.sfactor); | 238 GLenum sfactor = static_cast<GLenum>(c.sfactor); |
| 246 GLenum dfactor = static_cast<GLenum>(c.dfactor); | 239 GLenum dfactor = static_cast<GLenum>(c.dfactor); |
| 247 if (!validators_->src_blend_factor.IsValid(sfactor)) { | 240 if (!validators_->src_blend_factor.IsValid(sfactor)) { |
| 248 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFunc", sfactor, "sfactor"); | 241 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFunc", sfactor, "sfactor"); |
| 249 return error::kNoError; | 242 return error::kNoError; |
| 250 } | 243 } |
| 251 if (!validators_->dst_blend_factor.IsValid(dfactor)) { | 244 if (!validators_->dst_blend_factor.IsValid(dfactor)) { |
| 252 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFunc", dfactor, "dfactor"); | 245 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFunc", dfactor, "dfactor"); |
| 253 return error::kNoError; | 246 return error::kNoError; |
| 254 } | 247 } |
| 255 if (state_.blend_source_rgb != sfactor || state_.blend_dest_rgb != dfactor || | 248 if (state_.blend_source_rgb != sfactor || state_.blend_dest_rgb != dfactor || |
| 256 state_.blend_source_alpha != sfactor || | 249 state_.blend_source_alpha != sfactor || |
| 257 state_.blend_dest_alpha != dfactor) { | 250 state_.blend_dest_alpha != dfactor) { |
| 258 state_.blend_source_rgb = sfactor; | 251 state_.blend_source_rgb = sfactor; |
| 259 state_.blend_dest_rgb = dfactor; | 252 state_.blend_dest_rgb = dfactor; |
| 260 state_.blend_source_alpha = sfactor; | 253 state_.blend_source_alpha = sfactor; |
| 261 state_.blend_dest_alpha = dfactor; | 254 state_.blend_dest_alpha = dfactor; |
| 262 glBlendFunc(sfactor, dfactor); | 255 glBlendFunc(sfactor, dfactor); |
| 263 } | 256 } |
| 264 return error::kNoError; | 257 return error::kNoError; |
| 265 } | 258 } |
| 266 | 259 |
| 267 error::Error GLES2DecoderImpl::HandleBlendFuncSeparate( | 260 error::Error GLES2DecoderImpl::HandleBlendFuncSeparate( |
| 268 uint32_t immediate_data_size, | 261 uint32_t immediate_data_size, |
| 269 const void* cmd_data) { | 262 const volatile void* cmd_data) { |
| 270 const gles2::cmds::BlendFuncSeparate& c = | 263 const volatile gles2::cmds::BlendFuncSeparate& c = |
| 271 *static_cast<const gles2::cmds::BlendFuncSeparate*>(cmd_data); | 264 *static_cast<const volatile gles2::cmds::BlendFuncSeparate*>(cmd_data); |
| 272 (void)c; | |
| 273 GLenum srcRGB = static_cast<GLenum>(c.srcRGB); | 265 GLenum srcRGB = static_cast<GLenum>(c.srcRGB); |
| 274 GLenum dstRGB = static_cast<GLenum>(c.dstRGB); | 266 GLenum dstRGB = static_cast<GLenum>(c.dstRGB); |
| 275 GLenum srcAlpha = static_cast<GLenum>(c.srcAlpha); | 267 GLenum srcAlpha = static_cast<GLenum>(c.srcAlpha); |
| 276 GLenum dstAlpha = static_cast<GLenum>(c.dstAlpha); | 268 GLenum dstAlpha = static_cast<GLenum>(c.dstAlpha); |
| 277 if (!validators_->src_blend_factor.IsValid(srcRGB)) { | 269 if (!validators_->src_blend_factor.IsValid(srcRGB)) { |
| 278 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFuncSeparate", srcRGB, "srcRGB"); | 270 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFuncSeparate", srcRGB, "srcRGB"); |
| 279 return error::kNoError; | 271 return error::kNoError; |
| 280 } | 272 } |
| 281 if (!validators_->dst_blend_factor.IsValid(dstRGB)) { | 273 if (!validators_->dst_blend_factor.IsValid(dstRGB)) { |
| 282 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFuncSeparate", dstRGB, "dstRGB"); | 274 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFuncSeparate", dstRGB, "dstRGB"); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 297 state_.blend_dest_alpha != dstAlpha) { | 289 state_.blend_dest_alpha != dstAlpha) { |
| 298 state_.blend_source_rgb = srcRGB; | 290 state_.blend_source_rgb = srcRGB; |
| 299 state_.blend_dest_rgb = dstRGB; | 291 state_.blend_dest_rgb = dstRGB; |
| 300 state_.blend_source_alpha = srcAlpha; | 292 state_.blend_source_alpha = srcAlpha; |
| 301 state_.blend_dest_alpha = dstAlpha; | 293 state_.blend_dest_alpha = dstAlpha; |
| 302 glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); | 294 glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); |
| 303 } | 295 } |
| 304 return error::kNoError; | 296 return error::kNoError; |
| 305 } | 297 } |
| 306 | 298 |
| 307 error::Error GLES2DecoderImpl::HandleBufferSubData(uint32_t immediate_data_size, | 299 error::Error GLES2DecoderImpl::HandleBufferSubData( |
| 308 const void* cmd_data) { | 300 uint32_t immediate_data_size, |
| 309 const gles2::cmds::BufferSubData& c = | 301 const volatile void* cmd_data) { |
| 310 *static_cast<const gles2::cmds::BufferSubData*>(cmd_data); | 302 const volatile gles2::cmds::BufferSubData& c = |
| 311 (void)c; | 303 *static_cast<const volatile gles2::cmds::BufferSubData*>(cmd_data); |
| 312 GLenum target = static_cast<GLenum>(c.target); | 304 GLenum target = static_cast<GLenum>(c.target); |
| 313 GLintptr offset = static_cast<GLintptr>(c.offset); | 305 GLintptr offset = static_cast<GLintptr>(c.offset); |
| 314 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); | 306 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); |
| 315 uint32_t data_size = size; | 307 uint32_t data_size = size; |
| 316 const void* data = GetSharedMemoryAs<const void*>( | 308 const void* data = GetSharedMemoryAs<const void*>( |
| 317 c.data_shm_id, c.data_shm_offset, data_size); | 309 c.data_shm_id, c.data_shm_offset, data_size); |
| 318 if (!validators_->buffer_target.IsValid(target)) { | 310 if (!validators_->buffer_target.IsValid(target)) { |
| 319 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBufferSubData", target, "target"); | 311 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBufferSubData", target, "target"); |
| 320 return error::kNoError; | 312 return error::kNoError; |
| 321 } | 313 } |
| 322 if (size < 0) { | 314 if (size < 0) { |
| 323 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glBufferSubData", "size < 0"); | 315 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glBufferSubData", "size < 0"); |
| 324 return error::kNoError; | 316 return error::kNoError; |
| 325 } | 317 } |
| 326 if (data == NULL) { | 318 if (data == NULL) { |
| 327 return error::kOutOfBounds; | 319 return error::kOutOfBounds; |
| 328 } | 320 } |
| 329 DoBufferSubData(target, offset, size, data); | 321 DoBufferSubData(target, offset, size, data); |
| 330 return error::kNoError; | 322 return error::kNoError; |
| 331 } | 323 } |
| 332 | 324 |
| 333 error::Error GLES2DecoderImpl::HandleCheckFramebufferStatus( | 325 error::Error GLES2DecoderImpl::HandleCheckFramebufferStatus( |
| 334 uint32_t immediate_data_size, | 326 uint32_t immediate_data_size, |
| 335 const void* cmd_data) { | 327 const volatile void* cmd_data) { |
| 336 const gles2::cmds::CheckFramebufferStatus& c = | 328 const volatile gles2::cmds::CheckFramebufferStatus& c = |
| 337 *static_cast<const gles2::cmds::CheckFramebufferStatus*>(cmd_data); | 329 *static_cast<const volatile gles2::cmds::CheckFramebufferStatus*>( |
| 338 (void)c; | 330 cmd_data); |
| 339 GLenum target = static_cast<GLenum>(c.target); | 331 GLenum target = static_cast<GLenum>(c.target); |
| 340 typedef cmds::CheckFramebufferStatus::Result Result; | 332 typedef cmds::CheckFramebufferStatus::Result Result; |
| 341 Result* result_dst = GetSharedMemoryAs<Result*>( | 333 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 342 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 334 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 343 if (!result_dst) { | 335 if (!result_dst) { |
| 344 return error::kOutOfBounds; | 336 return error::kOutOfBounds; |
| 345 } | 337 } |
| 346 if (!validators_->framebuffer_target.IsValid(target)) { | 338 if (!validators_->framebuffer_target.IsValid(target)) { |
| 347 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCheckFramebufferStatus", target, | 339 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCheckFramebufferStatus", target, |
| 348 "target"); | 340 "target"); |
| 349 return error::kNoError; | 341 return error::kNoError; |
| 350 } | 342 } |
| 351 *result_dst = DoCheckFramebufferStatus(target); | 343 *result_dst = DoCheckFramebufferStatus(target); |
| 352 return error::kNoError; | 344 return error::kNoError; |
| 353 } | 345 } |
| 354 | 346 |
| 355 error::Error GLES2DecoderImpl::HandleClear(uint32_t immediate_data_size, | 347 error::Error GLES2DecoderImpl::HandleClear(uint32_t immediate_data_size, |
| 356 const void* cmd_data) { | 348 const volatile void* cmd_data) { |
| 357 const gles2::cmds::Clear& c = | 349 const volatile gles2::cmds::Clear& c = |
| 358 *static_cast<const gles2::cmds::Clear*>(cmd_data); | 350 *static_cast<const volatile gles2::cmds::Clear*>(cmd_data); |
| 359 (void)c; | |
| 360 error::Error error; | 351 error::Error error; |
| 361 error = WillAccessBoundFramebufferForDraw(); | 352 error = WillAccessBoundFramebufferForDraw(); |
| 362 if (error != error::kNoError) | 353 if (error != error::kNoError) |
| 363 return error; | 354 return error; |
| 364 GLbitfield mask = static_cast<GLbitfield>(c.mask); | 355 GLbitfield mask = static_cast<GLbitfield>(c.mask); |
| 365 DoClear(mask); | 356 DoClear(mask); |
| 366 return error::kNoError; | 357 return error::kNoError; |
| 367 } | 358 } |
| 368 | 359 |
| 369 error::Error GLES2DecoderImpl::HandleClearBufferfi(uint32_t immediate_data_size, | 360 error::Error GLES2DecoderImpl::HandleClearBufferfi( |
| 370 const void* cmd_data) { | 361 uint32_t immediate_data_size, |
| 362 const volatile void* cmd_data) { |
| 371 if (!unsafe_es3_apis_enabled()) | 363 if (!unsafe_es3_apis_enabled()) |
| 372 return error::kUnknownCommand; | 364 return error::kUnknownCommand; |
| 373 const gles2::cmds::ClearBufferfi& c = | 365 const volatile gles2::cmds::ClearBufferfi& c = |
| 374 *static_cast<const gles2::cmds::ClearBufferfi*>(cmd_data); | 366 *static_cast<const volatile gles2::cmds::ClearBufferfi*>(cmd_data); |
| 375 (void)c; | |
| 376 GLenum buffer = static_cast<GLenum>(c.buffer); | 367 GLenum buffer = static_cast<GLenum>(c.buffer); |
| 377 GLint drawbuffers = static_cast<GLint>(c.drawbuffers); | 368 GLint drawbuffers = static_cast<GLint>(c.drawbuffers); |
| 378 GLfloat depth = static_cast<GLfloat>(c.depth); | 369 GLfloat depth = static_cast<GLfloat>(c.depth); |
| 379 GLint stencil = static_cast<GLint>(c.stencil); | 370 GLint stencil = static_cast<GLint>(c.stencil); |
| 380 if (!validators_->bufferfi.IsValid(buffer)) { | 371 if (!validators_->bufferfi.IsValid(buffer)) { |
| 381 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferfi", buffer, "buffer"); | 372 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferfi", buffer, "buffer"); |
| 382 return error::kNoError; | 373 return error::kNoError; |
| 383 } | 374 } |
| 384 DoClearBufferfi(buffer, drawbuffers, depth, stencil); | 375 DoClearBufferfi(buffer, drawbuffers, depth, stencil); |
| 385 return error::kNoError; | 376 return error::kNoError; |
| 386 } | 377 } |
| 387 | 378 |
| 388 error::Error GLES2DecoderImpl::HandleClearBufferfvImmediate( | 379 error::Error GLES2DecoderImpl::HandleClearBufferfvImmediate( |
| 389 uint32_t immediate_data_size, | 380 uint32_t immediate_data_size, |
| 390 const void* cmd_data) { | 381 const volatile void* cmd_data) { |
| 391 if (!unsafe_es3_apis_enabled()) | 382 if (!unsafe_es3_apis_enabled()) |
| 392 return error::kUnknownCommand; | 383 return error::kUnknownCommand; |
| 393 const gles2::cmds::ClearBufferfvImmediate& c = | 384 const volatile gles2::cmds::ClearBufferfvImmediate& c = |
| 394 *static_cast<const gles2::cmds::ClearBufferfvImmediate*>(cmd_data); | 385 *static_cast<const volatile gles2::cmds::ClearBufferfvImmediate*>( |
| 395 (void)c; | 386 cmd_data); |
| 396 GLenum buffer = static_cast<GLenum>(c.buffer); | 387 GLenum buffer = static_cast<GLenum>(c.buffer); |
| 397 GLint drawbuffers = static_cast<GLint>(c.drawbuffers); | 388 GLint drawbuffers = static_cast<GLint>(c.drawbuffers); |
| 398 uint32_t data_size; | 389 uint32_t data_size; |
| 399 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) { | 390 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) { |
| 400 return error::kOutOfBounds; | 391 return error::kOutOfBounds; |
| 401 } | 392 } |
| 402 if (data_size > immediate_data_size) { | 393 if (data_size > immediate_data_size) { |
| 403 return error::kOutOfBounds; | 394 return error::kOutOfBounds; |
| 404 } | 395 } |
| 405 const GLfloat* value = | 396 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>( |
| 406 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 397 c, data_size, immediate_data_size); |
| 407 if (!validators_->bufferfv.IsValid(buffer)) { | 398 if (!validators_->bufferfv.IsValid(buffer)) { |
| 408 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferfv", buffer, "buffer"); | 399 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferfv", buffer, "buffer"); |
| 409 return error::kNoError; | 400 return error::kNoError; |
| 410 } | 401 } |
| 411 if (value == NULL) { | 402 if (value == NULL) { |
| 412 return error::kOutOfBounds; | 403 return error::kOutOfBounds; |
| 413 } | 404 } |
| 414 DoClearBufferfv(buffer, drawbuffers, value); | 405 DoClearBufferfv(buffer, drawbuffers, value); |
| 415 return error::kNoError; | 406 return error::kNoError; |
| 416 } | 407 } |
| 417 | 408 |
| 418 error::Error GLES2DecoderImpl::HandleClearBufferivImmediate( | 409 error::Error GLES2DecoderImpl::HandleClearBufferivImmediate( |
| 419 uint32_t immediate_data_size, | 410 uint32_t immediate_data_size, |
| 420 const void* cmd_data) { | 411 const volatile void* cmd_data) { |
| 421 if (!unsafe_es3_apis_enabled()) | 412 if (!unsafe_es3_apis_enabled()) |
| 422 return error::kUnknownCommand; | 413 return error::kUnknownCommand; |
| 423 const gles2::cmds::ClearBufferivImmediate& c = | 414 const volatile gles2::cmds::ClearBufferivImmediate& c = |
| 424 *static_cast<const gles2::cmds::ClearBufferivImmediate*>(cmd_data); | 415 *static_cast<const volatile gles2::cmds::ClearBufferivImmediate*>( |
| 425 (void)c; | 416 cmd_data); |
| 426 GLenum buffer = static_cast<GLenum>(c.buffer); | 417 GLenum buffer = static_cast<GLenum>(c.buffer); |
| 427 GLint drawbuffers = static_cast<GLint>(c.drawbuffers); | 418 GLint drawbuffers = static_cast<GLint>(c.drawbuffers); |
| 428 uint32_t data_size; | 419 uint32_t data_size; |
| 429 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 4, &data_size)) { | 420 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 4, &data_size)) { |
| 430 return error::kOutOfBounds; | 421 return error::kOutOfBounds; |
| 431 } | 422 } |
| 432 if (data_size > immediate_data_size) { | 423 if (data_size > immediate_data_size) { |
| 433 return error::kOutOfBounds; | 424 return error::kOutOfBounds; |
| 434 } | 425 } |
| 435 const GLint* value = | 426 volatile const GLint* value = GetImmediateDataAs<volatile const GLint*>( |
| 436 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); | 427 c, data_size, immediate_data_size); |
| 437 if (!validators_->bufferiv.IsValid(buffer)) { | 428 if (!validators_->bufferiv.IsValid(buffer)) { |
| 438 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferiv", buffer, "buffer"); | 429 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferiv", buffer, "buffer"); |
| 439 return error::kNoError; | 430 return error::kNoError; |
| 440 } | 431 } |
| 441 if (value == NULL) { | 432 if (value == NULL) { |
| 442 return error::kOutOfBounds; | 433 return error::kOutOfBounds; |
| 443 } | 434 } |
| 444 DoClearBufferiv(buffer, drawbuffers, value); | 435 DoClearBufferiv(buffer, drawbuffers, value); |
| 445 return error::kNoError; | 436 return error::kNoError; |
| 446 } | 437 } |
| 447 | 438 |
| 448 error::Error GLES2DecoderImpl::HandleClearBufferuivImmediate( | 439 error::Error GLES2DecoderImpl::HandleClearBufferuivImmediate( |
| 449 uint32_t immediate_data_size, | 440 uint32_t immediate_data_size, |
| 450 const void* cmd_data) { | 441 const volatile void* cmd_data) { |
| 451 if (!unsafe_es3_apis_enabled()) | 442 if (!unsafe_es3_apis_enabled()) |
| 452 return error::kUnknownCommand; | 443 return error::kUnknownCommand; |
| 453 const gles2::cmds::ClearBufferuivImmediate& c = | 444 const volatile gles2::cmds::ClearBufferuivImmediate& c = |
| 454 *static_cast<const gles2::cmds::ClearBufferuivImmediate*>(cmd_data); | 445 *static_cast<const volatile gles2::cmds::ClearBufferuivImmediate*>( |
| 455 (void)c; | 446 cmd_data); |
| 456 GLenum buffer = static_cast<GLenum>(c.buffer); | 447 GLenum buffer = static_cast<GLenum>(c.buffer); |
| 457 GLint drawbuffers = static_cast<GLint>(c.drawbuffers); | 448 GLint drawbuffers = static_cast<GLint>(c.drawbuffers); |
| 458 uint32_t data_size; | 449 uint32_t data_size; |
| 459 if (!GLES2Util::ComputeDataSize(1, sizeof(GLuint), 4, &data_size)) { | 450 if (!GLES2Util::ComputeDataSize(1, sizeof(GLuint), 4, &data_size)) { |
| 460 return error::kOutOfBounds; | 451 return error::kOutOfBounds; |
| 461 } | 452 } |
| 462 if (data_size > immediate_data_size) { | 453 if (data_size > immediate_data_size) { |
| 463 return error::kOutOfBounds; | 454 return error::kOutOfBounds; |
| 464 } | 455 } |
| 465 const GLuint* value = | 456 volatile const GLuint* value = GetImmediateDataAs<volatile const GLuint*>( |
| 466 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 457 c, data_size, immediate_data_size); |
| 467 if (!validators_->bufferuiv.IsValid(buffer)) { | 458 if (!validators_->bufferuiv.IsValid(buffer)) { |
| 468 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferuiv", buffer, "buffer"); | 459 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferuiv", buffer, "buffer"); |
| 469 return error::kNoError; | 460 return error::kNoError; |
| 470 } | 461 } |
| 471 if (value == NULL) { | 462 if (value == NULL) { |
| 472 return error::kOutOfBounds; | 463 return error::kOutOfBounds; |
| 473 } | 464 } |
| 474 DoClearBufferuiv(buffer, drawbuffers, value); | 465 DoClearBufferuiv(buffer, drawbuffers, value); |
| 475 return error::kNoError; | 466 return error::kNoError; |
| 476 } | 467 } |
| 477 | 468 |
| 478 error::Error GLES2DecoderImpl::HandleClearColor(uint32_t immediate_data_size, | 469 error::Error GLES2DecoderImpl::HandleClearColor(uint32_t immediate_data_size, |
| 479 const void* cmd_data) { | 470 const volatile void* cmd_data) { |
| 480 const gles2::cmds::ClearColor& c = | 471 const volatile gles2::cmds::ClearColor& c = |
| 481 *static_cast<const gles2::cmds::ClearColor*>(cmd_data); | 472 *static_cast<const volatile gles2::cmds::ClearColor*>(cmd_data); |
| 482 (void)c; | |
| 483 GLclampf red = static_cast<GLclampf>(c.red); | 473 GLclampf red = static_cast<GLclampf>(c.red); |
| 484 GLclampf green = static_cast<GLclampf>(c.green); | 474 GLclampf green = static_cast<GLclampf>(c.green); |
| 485 GLclampf blue = static_cast<GLclampf>(c.blue); | 475 GLclampf blue = static_cast<GLclampf>(c.blue); |
| 486 GLclampf alpha = static_cast<GLclampf>(c.alpha); | 476 GLclampf alpha = static_cast<GLclampf>(c.alpha); |
| 487 if (state_.color_clear_red != red || state_.color_clear_green != green || | 477 if (state_.color_clear_red != red || state_.color_clear_green != green || |
| 488 state_.color_clear_blue != blue || state_.color_clear_alpha != alpha) { | 478 state_.color_clear_blue != blue || state_.color_clear_alpha != alpha) { |
| 489 state_.color_clear_red = red; | 479 state_.color_clear_red = red; |
| 490 state_.color_clear_green = green; | 480 state_.color_clear_green = green; |
| 491 state_.color_clear_blue = blue; | 481 state_.color_clear_blue = blue; |
| 492 state_.color_clear_alpha = alpha; | 482 state_.color_clear_alpha = alpha; |
| 493 glClearColor(red, green, blue, alpha); | 483 glClearColor(red, green, blue, alpha); |
| 494 } | 484 } |
| 495 return error::kNoError; | 485 return error::kNoError; |
| 496 } | 486 } |
| 497 | 487 |
| 498 error::Error GLES2DecoderImpl::HandleClearDepthf(uint32_t immediate_data_size, | 488 error::Error GLES2DecoderImpl::HandleClearDepthf( |
| 499 const void* cmd_data) { | 489 uint32_t immediate_data_size, |
| 500 const gles2::cmds::ClearDepthf& c = | 490 const volatile void* cmd_data) { |
| 501 *static_cast<const gles2::cmds::ClearDepthf*>(cmd_data); | 491 const volatile gles2::cmds::ClearDepthf& c = |
| 502 (void)c; | 492 *static_cast<const volatile gles2::cmds::ClearDepthf*>(cmd_data); |
| 503 GLclampf depth = static_cast<GLclampf>(c.depth); | 493 GLclampf depth = static_cast<GLclampf>(c.depth); |
| 504 if (state_.depth_clear != depth) { | 494 if (state_.depth_clear != depth) { |
| 505 state_.depth_clear = depth; | 495 state_.depth_clear = depth; |
| 506 glClearDepth(depth); | 496 glClearDepth(depth); |
| 507 } | 497 } |
| 508 return error::kNoError; | 498 return error::kNoError; |
| 509 } | 499 } |
| 510 | 500 |
| 511 error::Error GLES2DecoderImpl::HandleClearStencil(uint32_t immediate_data_size, | 501 error::Error GLES2DecoderImpl::HandleClearStencil( |
| 512 const void* cmd_data) { | 502 uint32_t immediate_data_size, |
| 513 const gles2::cmds::ClearStencil& c = | 503 const volatile void* cmd_data) { |
| 514 *static_cast<const gles2::cmds::ClearStencil*>(cmd_data); | 504 const volatile gles2::cmds::ClearStencil& c = |
| 515 (void)c; | 505 *static_cast<const volatile gles2::cmds::ClearStencil*>(cmd_data); |
| 516 GLint s = static_cast<GLint>(c.s); | 506 GLint s = static_cast<GLint>(c.s); |
| 517 if (state_.stencil_clear != s) { | 507 if (state_.stencil_clear != s) { |
| 518 state_.stencil_clear = s; | 508 state_.stencil_clear = s; |
| 519 glClearStencil(s); | 509 glClearStencil(s); |
| 520 } | 510 } |
| 521 return error::kNoError; | 511 return error::kNoError; |
| 522 } | 512 } |
| 523 | 513 |
| 524 error::Error GLES2DecoderImpl::HandleColorMask(uint32_t immediate_data_size, | 514 error::Error GLES2DecoderImpl::HandleColorMask(uint32_t immediate_data_size, |
| 525 const void* cmd_data) { | 515 const volatile void* cmd_data) { |
| 526 const gles2::cmds::ColorMask& c = | 516 const volatile gles2::cmds::ColorMask& c = |
| 527 *static_cast<const gles2::cmds::ColorMask*>(cmd_data); | 517 *static_cast<const volatile gles2::cmds::ColorMask*>(cmd_data); |
| 528 (void)c; | |
| 529 GLboolean red = static_cast<GLboolean>(c.red); | 518 GLboolean red = static_cast<GLboolean>(c.red); |
| 530 GLboolean green = static_cast<GLboolean>(c.green); | 519 GLboolean green = static_cast<GLboolean>(c.green); |
| 531 GLboolean blue = static_cast<GLboolean>(c.blue); | 520 GLboolean blue = static_cast<GLboolean>(c.blue); |
| 532 GLboolean alpha = static_cast<GLboolean>(c.alpha); | 521 GLboolean alpha = static_cast<GLboolean>(c.alpha); |
| 533 if (state_.color_mask_red != red || state_.color_mask_green != green || | 522 if (state_.color_mask_red != red || state_.color_mask_green != green || |
| 534 state_.color_mask_blue != blue || state_.color_mask_alpha != alpha) { | 523 state_.color_mask_blue != blue || state_.color_mask_alpha != alpha) { |
| 535 state_.color_mask_red = red; | 524 state_.color_mask_red = red; |
| 536 state_.color_mask_green = green; | 525 state_.color_mask_green = green; |
| 537 state_.color_mask_blue = blue; | 526 state_.color_mask_blue = blue; |
| 538 state_.color_mask_alpha = alpha; | 527 state_.color_mask_alpha = alpha; |
| 539 framebuffer_state_.clear_state_dirty = true; | 528 framebuffer_state_.clear_state_dirty = true; |
| 540 } | 529 } |
| 541 return error::kNoError; | 530 return error::kNoError; |
| 542 } | 531 } |
| 543 | 532 |
| 544 error::Error GLES2DecoderImpl::HandleCompileShader(uint32_t immediate_data_size, | 533 error::Error GLES2DecoderImpl::HandleCompileShader( |
| 545 const void* cmd_data) { | 534 uint32_t immediate_data_size, |
| 546 const gles2::cmds::CompileShader& c = | 535 const volatile void* cmd_data) { |
| 547 *static_cast<const gles2::cmds::CompileShader*>(cmd_data); | 536 const volatile gles2::cmds::CompileShader& c = |
| 548 (void)c; | 537 *static_cast<const volatile gles2::cmds::CompileShader*>(cmd_data); |
| 549 GLuint shader = c.shader; | 538 GLuint shader = c.shader; |
| 550 DoCompileShader(shader); | 539 DoCompileShader(shader); |
| 551 return error::kNoError; | 540 return error::kNoError; |
| 552 } | 541 } |
| 553 | 542 |
| 554 error::Error GLES2DecoderImpl::HandleCompressedTexImage2DBucket( | 543 error::Error GLES2DecoderImpl::HandleCompressedTexImage2DBucket( |
| 555 uint32_t immediate_data_size, | 544 uint32_t immediate_data_size, |
| 556 const void* cmd_data) { | 545 const volatile void* cmd_data) { |
| 557 const gles2::cmds::CompressedTexImage2DBucket& c = | 546 const volatile gles2::cmds::CompressedTexImage2DBucket& c = |
| 558 *static_cast<const gles2::cmds::CompressedTexImage2DBucket*>(cmd_data); | 547 *static_cast<const volatile gles2::cmds::CompressedTexImage2DBucket*>( |
| 559 (void)c; | 548 cmd_data); |
| 560 GLenum target = static_cast<GLenum>(c.target); | 549 GLenum target = static_cast<GLenum>(c.target); |
| 561 GLint level = static_cast<GLint>(c.level); | 550 GLint level = static_cast<GLint>(c.level); |
| 562 GLenum internalformat = static_cast<GLenum>(c.internalformat); | 551 GLenum internalformat = static_cast<GLenum>(c.internalformat); |
| 563 GLsizei width = static_cast<GLsizei>(c.width); | 552 GLsizei width = static_cast<GLsizei>(c.width); |
| 564 GLsizei height = static_cast<GLsizei>(c.height); | 553 GLsizei height = static_cast<GLsizei>(c.height); |
| 565 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); | 554 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); |
| 566 GLint border = static_cast<GLint>(c.border); | 555 GLint border = static_cast<GLint>(c.border); |
| 567 Bucket* bucket = GetBucket(bucket_id); | 556 Bucket* bucket = GetBucket(bucket_id); |
| 568 if (!bucket) | 557 if (!bucket) |
| 569 return error::kInvalidArguments; | 558 return error::kInvalidArguments; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 594 "imageSize < 0"); | 583 "imageSize < 0"); |
| 595 return error::kNoError; | 584 return error::kNoError; |
| 596 } | 585 } |
| 597 DoCompressedTexImage2D(target, level, internalformat, width, height, border, | 586 DoCompressedTexImage2D(target, level, internalformat, width, height, border, |
| 598 imageSize, data); | 587 imageSize, data); |
| 599 return error::kNoError; | 588 return error::kNoError; |
| 600 } | 589 } |
| 601 | 590 |
| 602 error::Error GLES2DecoderImpl::HandleCompressedTexImage2D( | 591 error::Error GLES2DecoderImpl::HandleCompressedTexImage2D( |
| 603 uint32_t immediate_data_size, | 592 uint32_t immediate_data_size, |
| 604 const void* cmd_data) { | 593 const volatile void* cmd_data) { |
| 605 const gles2::cmds::CompressedTexImage2D& c = | 594 const volatile gles2::cmds::CompressedTexImage2D& c = |
| 606 *static_cast<const gles2::cmds::CompressedTexImage2D*>(cmd_data); | 595 *static_cast<const volatile gles2::cmds::CompressedTexImage2D*>(cmd_data); |
| 607 (void)c; | |
| 608 GLenum target = static_cast<GLenum>(c.target); | 596 GLenum target = static_cast<GLenum>(c.target); |
| 609 GLint level = static_cast<GLint>(c.level); | 597 GLint level = static_cast<GLint>(c.level); |
| 610 GLenum internalformat = static_cast<GLenum>(c.internalformat); | 598 GLenum internalformat = static_cast<GLenum>(c.internalformat); |
| 611 GLsizei width = static_cast<GLsizei>(c.width); | 599 GLsizei width = static_cast<GLsizei>(c.width); |
| 612 GLsizei height = static_cast<GLsizei>(c.height); | 600 GLsizei height = static_cast<GLsizei>(c.height); |
| 613 GLint border = static_cast<GLint>(c.border); | 601 GLint border = static_cast<GLint>(c.border); |
| 614 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); | 602 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); |
| 615 uint32_t data_size = imageSize; | 603 uint32_t data_size = imageSize; |
| 616 const void* data = GetSharedMemoryAs<const void*>( | 604 const void* data = GetSharedMemoryAs<const void*>( |
| 617 c.data_shm_id, c.data_shm_offset, data_size); | 605 c.data_shm_id, c.data_shm_offset, data_size); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 638 "imageSize < 0"); | 626 "imageSize < 0"); |
| 639 return error::kNoError; | 627 return error::kNoError; |
| 640 } | 628 } |
| 641 DoCompressedTexImage2D(target, level, internalformat, width, height, border, | 629 DoCompressedTexImage2D(target, level, internalformat, width, height, border, |
| 642 imageSize, data); | 630 imageSize, data); |
| 643 return error::kNoError; | 631 return error::kNoError; |
| 644 } | 632 } |
| 645 | 633 |
| 646 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2DBucket( | 634 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2DBucket( |
| 647 uint32_t immediate_data_size, | 635 uint32_t immediate_data_size, |
| 648 const void* cmd_data) { | 636 const volatile void* cmd_data) { |
| 649 const gles2::cmds::CompressedTexSubImage2DBucket& c = | 637 const volatile gles2::cmds::CompressedTexSubImage2DBucket& c = |
| 650 *static_cast<const gles2::cmds::CompressedTexSubImage2DBucket*>(cmd_data); | 638 *static_cast<const volatile gles2::cmds::CompressedTexSubImage2DBucket*>( |
| 651 (void)c; | 639 cmd_data); |
| 652 GLenum target = static_cast<GLenum>(c.target); | 640 GLenum target = static_cast<GLenum>(c.target); |
| 653 GLint level = static_cast<GLint>(c.level); | 641 GLint level = static_cast<GLint>(c.level); |
| 654 GLint xoffset = static_cast<GLint>(c.xoffset); | 642 GLint xoffset = static_cast<GLint>(c.xoffset); |
| 655 GLint yoffset = static_cast<GLint>(c.yoffset); | 643 GLint yoffset = static_cast<GLint>(c.yoffset); |
| 656 GLsizei width = static_cast<GLsizei>(c.width); | 644 GLsizei width = static_cast<GLsizei>(c.width); |
| 657 GLsizei height = static_cast<GLsizei>(c.height); | 645 GLsizei height = static_cast<GLsizei>(c.height); |
| 658 GLenum format = static_cast<GLenum>(c.format); | 646 GLenum format = static_cast<GLenum>(c.format); |
| 659 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); | 647 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); |
| 660 Bucket* bucket = GetBucket(bucket_id); | 648 Bucket* bucket = GetBucket(bucket_id); |
| 661 if (!bucket) | 649 if (!bucket) |
| (...skipping 27 matching lines...) Expand all Loading... |
| 689 "imageSize < 0"); | 677 "imageSize < 0"); |
| 690 return error::kNoError; | 678 return error::kNoError; |
| 691 } | 679 } |
| 692 DoCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, | 680 DoCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, |
| 693 format, imageSize, data); | 681 format, imageSize, data); |
| 694 return error::kNoError; | 682 return error::kNoError; |
| 695 } | 683 } |
| 696 | 684 |
| 697 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2D( | 685 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2D( |
| 698 uint32_t immediate_data_size, | 686 uint32_t immediate_data_size, |
| 699 const void* cmd_data) { | 687 const volatile void* cmd_data) { |
| 700 const gles2::cmds::CompressedTexSubImage2D& c = | 688 const volatile gles2::cmds::CompressedTexSubImage2D& c = |
| 701 *static_cast<const gles2::cmds::CompressedTexSubImage2D*>(cmd_data); | 689 *static_cast<const volatile gles2::cmds::CompressedTexSubImage2D*>( |
| 702 (void)c; | 690 cmd_data); |
| 703 GLenum target = static_cast<GLenum>(c.target); | 691 GLenum target = static_cast<GLenum>(c.target); |
| 704 GLint level = static_cast<GLint>(c.level); | 692 GLint level = static_cast<GLint>(c.level); |
| 705 GLint xoffset = static_cast<GLint>(c.xoffset); | 693 GLint xoffset = static_cast<GLint>(c.xoffset); |
| 706 GLint yoffset = static_cast<GLint>(c.yoffset); | 694 GLint yoffset = static_cast<GLint>(c.yoffset); |
| 707 GLsizei width = static_cast<GLsizei>(c.width); | 695 GLsizei width = static_cast<GLsizei>(c.width); |
| 708 GLsizei height = static_cast<GLsizei>(c.height); | 696 GLsizei height = static_cast<GLsizei>(c.height); |
| 709 GLenum format = static_cast<GLenum>(c.format); | 697 GLenum format = static_cast<GLenum>(c.format); |
| 710 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); | 698 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); |
| 711 uint32_t data_size = imageSize; | 699 uint32_t data_size = imageSize; |
| 712 const void* data = GetSharedMemoryAs<const void*>( | 700 const void* data = GetSharedMemoryAs<const void*>( |
| (...skipping 26 matching lines...) Expand all Loading... |
| 739 if (data == NULL) { | 727 if (data == NULL) { |
| 740 return error::kOutOfBounds; | 728 return error::kOutOfBounds; |
| 741 } | 729 } |
| 742 DoCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, | 730 DoCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, |
| 743 format, imageSize, data); | 731 format, imageSize, data); |
| 744 return error::kNoError; | 732 return error::kNoError; |
| 745 } | 733 } |
| 746 | 734 |
| 747 error::Error GLES2DecoderImpl::HandleCompressedTexImage3DBucket( | 735 error::Error GLES2DecoderImpl::HandleCompressedTexImage3DBucket( |
| 748 uint32_t immediate_data_size, | 736 uint32_t immediate_data_size, |
| 749 const void* cmd_data) { | 737 const volatile void* cmd_data) { |
| 750 if (!unsafe_es3_apis_enabled()) | 738 if (!unsafe_es3_apis_enabled()) |
| 751 return error::kUnknownCommand; | 739 return error::kUnknownCommand; |
| 752 const gles2::cmds::CompressedTexImage3DBucket& c = | 740 const volatile gles2::cmds::CompressedTexImage3DBucket& c = |
| 753 *static_cast<const gles2::cmds::CompressedTexImage3DBucket*>(cmd_data); | 741 *static_cast<const volatile gles2::cmds::CompressedTexImage3DBucket*>( |
| 754 (void)c; | 742 cmd_data); |
| 755 GLenum target = static_cast<GLenum>(c.target); | 743 GLenum target = static_cast<GLenum>(c.target); |
| 756 GLint level = static_cast<GLint>(c.level); | 744 GLint level = static_cast<GLint>(c.level); |
| 757 GLenum internalformat = static_cast<GLenum>(c.internalformat); | 745 GLenum internalformat = static_cast<GLenum>(c.internalformat); |
| 758 GLsizei width = static_cast<GLsizei>(c.width); | 746 GLsizei width = static_cast<GLsizei>(c.width); |
| 759 GLsizei height = static_cast<GLsizei>(c.height); | 747 GLsizei height = static_cast<GLsizei>(c.height); |
| 760 GLsizei depth = static_cast<GLsizei>(c.depth); | 748 GLsizei depth = static_cast<GLsizei>(c.depth); |
| 761 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); | 749 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); |
| 762 GLint border = static_cast<GLint>(c.border); | 750 GLint border = static_cast<GLint>(c.border); |
| 763 Bucket* bucket = GetBucket(bucket_id); | 751 Bucket* bucket = GetBucket(bucket_id); |
| 764 if (!bucket) | 752 if (!bucket) |
| (...skipping 29 matching lines...) Expand all Loading... |
| 794 "imageSize < 0"); | 782 "imageSize < 0"); |
| 795 return error::kNoError; | 783 return error::kNoError; |
| 796 } | 784 } |
| 797 DoCompressedTexImage3D(target, level, internalformat, width, height, depth, | 785 DoCompressedTexImage3D(target, level, internalformat, width, height, depth, |
| 798 border, imageSize, data); | 786 border, imageSize, data); |
| 799 return error::kNoError; | 787 return error::kNoError; |
| 800 } | 788 } |
| 801 | 789 |
| 802 error::Error GLES2DecoderImpl::HandleCompressedTexImage3D( | 790 error::Error GLES2DecoderImpl::HandleCompressedTexImage3D( |
| 803 uint32_t immediate_data_size, | 791 uint32_t immediate_data_size, |
| 804 const void* cmd_data) { | 792 const volatile void* cmd_data) { |
| 805 if (!unsafe_es3_apis_enabled()) | 793 if (!unsafe_es3_apis_enabled()) |
| 806 return error::kUnknownCommand; | 794 return error::kUnknownCommand; |
| 807 const gles2::cmds::CompressedTexImage3D& c = | 795 const volatile gles2::cmds::CompressedTexImage3D& c = |
| 808 *static_cast<const gles2::cmds::CompressedTexImage3D*>(cmd_data); | 796 *static_cast<const volatile gles2::cmds::CompressedTexImage3D*>(cmd_data); |
| 809 (void)c; | |
| 810 GLenum target = static_cast<GLenum>(c.target); | 797 GLenum target = static_cast<GLenum>(c.target); |
| 811 GLint level = static_cast<GLint>(c.level); | 798 GLint level = static_cast<GLint>(c.level); |
| 812 GLenum internalformat = static_cast<GLenum>(c.internalformat); | 799 GLenum internalformat = static_cast<GLenum>(c.internalformat); |
| 813 GLsizei width = static_cast<GLsizei>(c.width); | 800 GLsizei width = static_cast<GLsizei>(c.width); |
| 814 GLsizei height = static_cast<GLsizei>(c.height); | 801 GLsizei height = static_cast<GLsizei>(c.height); |
| 815 GLsizei depth = static_cast<GLsizei>(c.depth); | 802 GLsizei depth = static_cast<GLsizei>(c.depth); |
| 816 GLint border = static_cast<GLint>(c.border); | 803 GLint border = static_cast<GLint>(c.border); |
| 817 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); | 804 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); |
| 818 uint32_t data_size = imageSize; | 805 uint32_t data_size = imageSize; |
| 819 const void* data = GetSharedMemoryAs<const void*>( | 806 const void* data = GetSharedMemoryAs<const void*>( |
| (...skipping 25 matching lines...) Expand all Loading... |
| 845 "imageSize < 0"); | 832 "imageSize < 0"); |
| 846 return error::kNoError; | 833 return error::kNoError; |
| 847 } | 834 } |
| 848 DoCompressedTexImage3D(target, level, internalformat, width, height, depth, | 835 DoCompressedTexImage3D(target, level, internalformat, width, height, depth, |
| 849 border, imageSize, data); | 836 border, imageSize, data); |
| 850 return error::kNoError; | 837 return error::kNoError; |
| 851 } | 838 } |
| 852 | 839 |
| 853 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage3DBucket( | 840 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage3DBucket( |
| 854 uint32_t immediate_data_size, | 841 uint32_t immediate_data_size, |
| 855 const void* cmd_data) { | 842 const volatile void* cmd_data) { |
| 856 if (!unsafe_es3_apis_enabled()) | 843 if (!unsafe_es3_apis_enabled()) |
| 857 return error::kUnknownCommand; | 844 return error::kUnknownCommand; |
| 858 const gles2::cmds::CompressedTexSubImage3DBucket& c = | 845 const volatile gles2::cmds::CompressedTexSubImage3DBucket& c = |
| 859 *static_cast<const gles2::cmds::CompressedTexSubImage3DBucket*>(cmd_data); | 846 *static_cast<const volatile gles2::cmds::CompressedTexSubImage3DBucket*>( |
| 860 (void)c; | 847 cmd_data); |
| 861 GLenum target = static_cast<GLenum>(c.target); | 848 GLenum target = static_cast<GLenum>(c.target); |
| 862 GLint level = static_cast<GLint>(c.level); | 849 GLint level = static_cast<GLint>(c.level); |
| 863 GLint xoffset = static_cast<GLint>(c.xoffset); | 850 GLint xoffset = static_cast<GLint>(c.xoffset); |
| 864 GLint yoffset = static_cast<GLint>(c.yoffset); | 851 GLint yoffset = static_cast<GLint>(c.yoffset); |
| 865 GLint zoffset = static_cast<GLint>(c.zoffset); | 852 GLint zoffset = static_cast<GLint>(c.zoffset); |
| 866 GLsizei width = static_cast<GLsizei>(c.width); | 853 GLsizei width = static_cast<GLsizei>(c.width); |
| 867 GLsizei height = static_cast<GLsizei>(c.height); | 854 GLsizei height = static_cast<GLsizei>(c.height); |
| 868 GLsizei depth = static_cast<GLsizei>(c.depth); | 855 GLsizei depth = static_cast<GLsizei>(c.depth); |
| 869 GLenum format = static_cast<GLenum>(c.format); | 856 GLenum format = static_cast<GLenum>(c.format); |
| 870 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); | 857 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 905 "imageSize < 0"); | 892 "imageSize < 0"); |
| 906 return error::kNoError; | 893 return error::kNoError; |
| 907 } | 894 } |
| 908 DoCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, | 895 DoCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, |
| 909 height, depth, format, imageSize, data); | 896 height, depth, format, imageSize, data); |
| 910 return error::kNoError; | 897 return error::kNoError; |
| 911 } | 898 } |
| 912 | 899 |
| 913 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage3D( | 900 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage3D( |
| 914 uint32_t immediate_data_size, | 901 uint32_t immediate_data_size, |
| 915 const void* cmd_data) { | 902 const volatile void* cmd_data) { |
| 916 if (!unsafe_es3_apis_enabled()) | 903 if (!unsafe_es3_apis_enabled()) |
| 917 return error::kUnknownCommand; | 904 return error::kUnknownCommand; |
| 918 const gles2::cmds::CompressedTexSubImage3D& c = | 905 const volatile gles2::cmds::CompressedTexSubImage3D& c = |
| 919 *static_cast<const gles2::cmds::CompressedTexSubImage3D*>(cmd_data); | 906 *static_cast<const volatile gles2::cmds::CompressedTexSubImage3D*>( |
| 920 (void)c; | 907 cmd_data); |
| 921 GLenum target = static_cast<GLenum>(c.target); | 908 GLenum target = static_cast<GLenum>(c.target); |
| 922 GLint level = static_cast<GLint>(c.level); | 909 GLint level = static_cast<GLint>(c.level); |
| 923 GLint xoffset = static_cast<GLint>(c.xoffset); | 910 GLint xoffset = static_cast<GLint>(c.xoffset); |
| 924 GLint yoffset = static_cast<GLint>(c.yoffset); | 911 GLint yoffset = static_cast<GLint>(c.yoffset); |
| 925 GLint zoffset = static_cast<GLint>(c.zoffset); | 912 GLint zoffset = static_cast<GLint>(c.zoffset); |
| 926 GLsizei width = static_cast<GLsizei>(c.width); | 913 GLsizei width = static_cast<GLsizei>(c.width); |
| 927 GLsizei height = static_cast<GLsizei>(c.height); | 914 GLsizei height = static_cast<GLsizei>(c.height); |
| 928 GLsizei depth = static_cast<GLsizei>(c.depth); | 915 GLsizei depth = static_cast<GLsizei>(c.depth); |
| 929 GLenum format = static_cast<GLenum>(c.format); | 916 GLenum format = static_cast<GLenum>(c.format); |
| 930 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); | 917 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 964 if (data == NULL) { | 951 if (data == NULL) { |
| 965 return error::kOutOfBounds; | 952 return error::kOutOfBounds; |
| 966 } | 953 } |
| 967 DoCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, | 954 DoCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, |
| 968 height, depth, format, imageSize, data); | 955 height, depth, format, imageSize, data); |
| 969 return error::kNoError; | 956 return error::kNoError; |
| 970 } | 957 } |
| 971 | 958 |
| 972 error::Error GLES2DecoderImpl::HandleCopyBufferSubData( | 959 error::Error GLES2DecoderImpl::HandleCopyBufferSubData( |
| 973 uint32_t immediate_data_size, | 960 uint32_t immediate_data_size, |
| 974 const void* cmd_data) { | 961 const volatile void* cmd_data) { |
| 975 if (!unsafe_es3_apis_enabled()) | 962 if (!unsafe_es3_apis_enabled()) |
| 976 return error::kUnknownCommand; | 963 return error::kUnknownCommand; |
| 977 const gles2::cmds::CopyBufferSubData& c = | 964 const volatile gles2::cmds::CopyBufferSubData& c = |
| 978 *static_cast<const gles2::cmds::CopyBufferSubData*>(cmd_data); | 965 *static_cast<const volatile gles2::cmds::CopyBufferSubData*>(cmd_data); |
| 979 (void)c; | |
| 980 GLenum readtarget = static_cast<GLenum>(c.readtarget); | 966 GLenum readtarget = static_cast<GLenum>(c.readtarget); |
| 981 GLenum writetarget = static_cast<GLenum>(c.writetarget); | 967 GLenum writetarget = static_cast<GLenum>(c.writetarget); |
| 982 GLintptr readoffset = static_cast<GLintptr>(c.readoffset); | 968 GLintptr readoffset = static_cast<GLintptr>(c.readoffset); |
| 983 GLintptr writeoffset = static_cast<GLintptr>(c.writeoffset); | 969 GLintptr writeoffset = static_cast<GLintptr>(c.writeoffset); |
| 984 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); | 970 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); |
| 985 if (!validators_->buffer_target.IsValid(readtarget)) { | 971 if (!validators_->buffer_target.IsValid(readtarget)) { |
| 986 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyBufferSubData", readtarget, | 972 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyBufferSubData", readtarget, |
| 987 "readtarget"); | 973 "readtarget"); |
| 988 return error::kNoError; | 974 return error::kNoError; |
| 989 } | 975 } |
| 990 if (!validators_->buffer_target.IsValid(writetarget)) { | 976 if (!validators_->buffer_target.IsValid(writetarget)) { |
| 991 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyBufferSubData", writetarget, | 977 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyBufferSubData", writetarget, |
| 992 "writetarget"); | 978 "writetarget"); |
| 993 return error::kNoError; | 979 return error::kNoError; |
| 994 } | 980 } |
| 995 if (size < 0) { | 981 if (size < 0) { |
| 996 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyBufferSubData", "size < 0"); | 982 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyBufferSubData", "size < 0"); |
| 997 return error::kNoError; | 983 return error::kNoError; |
| 998 } | 984 } |
| 999 glCopyBufferSubData(readtarget, writetarget, readoffset, writeoffset, size); | 985 glCopyBufferSubData(readtarget, writetarget, readoffset, writeoffset, size); |
| 1000 return error::kNoError; | 986 return error::kNoError; |
| 1001 } | 987 } |
| 1002 | 988 |
| 1003 error::Error GLES2DecoderImpl::HandleCopyTexImage2D( | 989 error::Error GLES2DecoderImpl::HandleCopyTexImage2D( |
| 1004 uint32_t immediate_data_size, | 990 uint32_t immediate_data_size, |
| 1005 const void* cmd_data) { | 991 const volatile void* cmd_data) { |
| 1006 const gles2::cmds::CopyTexImage2D& c = | 992 const volatile gles2::cmds::CopyTexImage2D& c = |
| 1007 *static_cast<const gles2::cmds::CopyTexImage2D*>(cmd_data); | 993 *static_cast<const volatile gles2::cmds::CopyTexImage2D*>(cmd_data); |
| 1008 (void)c; | |
| 1009 error::Error error; | 994 error::Error error; |
| 1010 error = WillAccessBoundFramebufferForRead(); | 995 error = WillAccessBoundFramebufferForRead(); |
| 1011 if (error != error::kNoError) | 996 if (error != error::kNoError) |
| 1012 return error; | 997 return error; |
| 1013 GLenum target = static_cast<GLenum>(c.target); | 998 GLenum target = static_cast<GLenum>(c.target); |
| 1014 GLint level = static_cast<GLint>(c.level); | 999 GLint level = static_cast<GLint>(c.level); |
| 1015 GLenum internalformat = static_cast<GLenum>(c.internalformat); | 1000 GLenum internalformat = static_cast<GLenum>(c.internalformat); |
| 1016 GLint x = static_cast<GLint>(c.x); | 1001 GLint x = static_cast<GLint>(c.x); |
| 1017 GLint y = static_cast<GLint>(c.y); | 1002 GLint y = static_cast<GLint>(c.y); |
| 1018 GLsizei width = static_cast<GLsizei>(c.width); | 1003 GLsizei width = static_cast<GLsizei>(c.width); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1034 if (height < 0) { | 1019 if (height < 0) { |
| 1035 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexImage2D", "height < 0"); | 1020 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexImage2D", "height < 0"); |
| 1036 return error::kNoError; | 1021 return error::kNoError; |
| 1037 } | 1022 } |
| 1038 DoCopyTexImage2D(target, level, internalformat, x, y, width, height, border); | 1023 DoCopyTexImage2D(target, level, internalformat, x, y, width, height, border); |
| 1039 return error::kNoError; | 1024 return error::kNoError; |
| 1040 } | 1025 } |
| 1041 | 1026 |
| 1042 error::Error GLES2DecoderImpl::HandleCopyTexSubImage2D( | 1027 error::Error GLES2DecoderImpl::HandleCopyTexSubImage2D( |
| 1043 uint32_t immediate_data_size, | 1028 uint32_t immediate_data_size, |
| 1044 const void* cmd_data) { | 1029 const volatile void* cmd_data) { |
| 1045 const gles2::cmds::CopyTexSubImage2D& c = | 1030 const volatile gles2::cmds::CopyTexSubImage2D& c = |
| 1046 *static_cast<const gles2::cmds::CopyTexSubImage2D*>(cmd_data); | 1031 *static_cast<const volatile gles2::cmds::CopyTexSubImage2D*>(cmd_data); |
| 1047 (void)c; | |
| 1048 error::Error error; | 1032 error::Error error; |
| 1049 error = WillAccessBoundFramebufferForRead(); | 1033 error = WillAccessBoundFramebufferForRead(); |
| 1050 if (error != error::kNoError) | 1034 if (error != error::kNoError) |
| 1051 return error; | 1035 return error; |
| 1052 GLenum target = static_cast<GLenum>(c.target); | 1036 GLenum target = static_cast<GLenum>(c.target); |
| 1053 GLint level = static_cast<GLint>(c.level); | 1037 GLint level = static_cast<GLint>(c.level); |
| 1054 GLint xoffset = static_cast<GLint>(c.xoffset); | 1038 GLint xoffset = static_cast<GLint>(c.xoffset); |
| 1055 GLint yoffset = static_cast<GLint>(c.yoffset); | 1039 GLint yoffset = static_cast<GLint>(c.yoffset); |
| 1056 GLint x = static_cast<GLint>(c.x); | 1040 GLint x = static_cast<GLint>(c.x); |
| 1057 GLint y = static_cast<GLint>(c.y); | 1041 GLint y = static_cast<GLint>(c.y); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1068 if (height < 0) { | 1052 if (height < 0) { |
| 1069 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexSubImage2D", "height < 0"); | 1053 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexSubImage2D", "height < 0"); |
| 1070 return error::kNoError; | 1054 return error::kNoError; |
| 1071 } | 1055 } |
| 1072 DoCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); | 1056 DoCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); |
| 1073 return error::kNoError; | 1057 return error::kNoError; |
| 1074 } | 1058 } |
| 1075 | 1059 |
| 1076 error::Error GLES2DecoderImpl::HandleCopyTexSubImage3D( | 1060 error::Error GLES2DecoderImpl::HandleCopyTexSubImage3D( |
| 1077 uint32_t immediate_data_size, | 1061 uint32_t immediate_data_size, |
| 1078 const void* cmd_data) { | 1062 const volatile void* cmd_data) { |
| 1079 if (!unsafe_es3_apis_enabled()) | 1063 if (!unsafe_es3_apis_enabled()) |
| 1080 return error::kUnknownCommand; | 1064 return error::kUnknownCommand; |
| 1081 const gles2::cmds::CopyTexSubImage3D& c = | 1065 const volatile gles2::cmds::CopyTexSubImage3D& c = |
| 1082 *static_cast<const gles2::cmds::CopyTexSubImage3D*>(cmd_data); | 1066 *static_cast<const volatile gles2::cmds::CopyTexSubImage3D*>(cmd_data); |
| 1083 (void)c; | |
| 1084 error::Error error; | 1067 error::Error error; |
| 1085 error = WillAccessBoundFramebufferForRead(); | 1068 error = WillAccessBoundFramebufferForRead(); |
| 1086 if (error != error::kNoError) | 1069 if (error != error::kNoError) |
| 1087 return error; | 1070 return error; |
| 1088 GLenum target = static_cast<GLenum>(c.target); | 1071 GLenum target = static_cast<GLenum>(c.target); |
| 1089 GLint level = static_cast<GLint>(c.level); | 1072 GLint level = static_cast<GLint>(c.level); |
| 1090 GLint xoffset = static_cast<GLint>(c.xoffset); | 1073 GLint xoffset = static_cast<GLint>(c.xoffset); |
| 1091 GLint yoffset = static_cast<GLint>(c.yoffset); | 1074 GLint yoffset = static_cast<GLint>(c.yoffset); |
| 1092 GLint zoffset = static_cast<GLint>(c.zoffset); | 1075 GLint zoffset = static_cast<GLint>(c.zoffset); |
| 1093 GLint x = static_cast<GLint>(c.x); | 1076 GLint x = static_cast<GLint>(c.x); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1104 } | 1087 } |
| 1105 if (height < 0) { | 1088 if (height < 0) { |
| 1106 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexSubImage3D", "height < 0"); | 1089 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexSubImage3D", "height < 0"); |
| 1107 return error::kNoError; | 1090 return error::kNoError; |
| 1108 } | 1091 } |
| 1109 DoCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, | 1092 DoCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, |
| 1110 height); | 1093 height); |
| 1111 return error::kNoError; | 1094 return error::kNoError; |
| 1112 } | 1095 } |
| 1113 | 1096 |
| 1114 error::Error GLES2DecoderImpl::HandleCreateProgram(uint32_t immediate_data_size, | 1097 error::Error GLES2DecoderImpl::HandleCreateProgram( |
| 1115 const void* cmd_data) { | 1098 uint32_t immediate_data_size, |
| 1116 const gles2::cmds::CreateProgram& c = | 1099 const volatile void* cmd_data) { |
| 1117 *static_cast<const gles2::cmds::CreateProgram*>(cmd_data); | 1100 const volatile gles2::cmds::CreateProgram& c = |
| 1118 (void)c; | 1101 *static_cast<const volatile gles2::cmds::CreateProgram*>(cmd_data); |
| 1119 uint32_t client_id = c.client_id; | 1102 uint32_t client_id = c.client_id; |
| 1120 if (GetProgram(client_id)) { | 1103 if (GetProgram(client_id)) { |
| 1121 return error::kInvalidArguments; | 1104 return error::kInvalidArguments; |
| 1122 } | 1105 } |
| 1123 GLuint service_id = glCreateProgram(); | 1106 GLuint service_id = glCreateProgram(); |
| 1124 if (service_id) { | 1107 if (service_id) { |
| 1125 CreateProgram(client_id, service_id); | 1108 CreateProgram(client_id, service_id); |
| 1126 } | 1109 } |
| 1127 return error::kNoError; | 1110 return error::kNoError; |
| 1128 } | 1111 } |
| 1129 | 1112 |
| 1130 error::Error GLES2DecoderImpl::HandleCreateShader(uint32_t immediate_data_size, | 1113 error::Error GLES2DecoderImpl::HandleCreateShader( |
| 1131 const void* cmd_data) { | 1114 uint32_t immediate_data_size, |
| 1132 const gles2::cmds::CreateShader& c = | 1115 const volatile void* cmd_data) { |
| 1133 *static_cast<const gles2::cmds::CreateShader*>(cmd_data); | 1116 const volatile gles2::cmds::CreateShader& c = |
| 1134 (void)c; | 1117 *static_cast<const volatile gles2::cmds::CreateShader*>(cmd_data); |
| 1135 GLenum type = static_cast<GLenum>(c.type); | 1118 GLenum type = static_cast<GLenum>(c.type); |
| 1136 if (!validators_->shader_type.IsValid(type)) { | 1119 if (!validators_->shader_type.IsValid(type)) { |
| 1137 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCreateShader", type, "type"); | 1120 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCreateShader", type, "type"); |
| 1138 return error::kNoError; | 1121 return error::kNoError; |
| 1139 } | 1122 } |
| 1140 uint32_t client_id = c.client_id; | 1123 uint32_t client_id = c.client_id; |
| 1141 if (GetShader(client_id)) { | 1124 if (GetShader(client_id)) { |
| 1142 return error::kInvalidArguments; | 1125 return error::kInvalidArguments; |
| 1143 } | 1126 } |
| 1144 GLuint service_id = glCreateShader(type); | 1127 GLuint service_id = glCreateShader(type); |
| 1145 if (service_id) { | 1128 if (service_id) { |
| 1146 CreateShader(client_id, service_id, type); | 1129 CreateShader(client_id, service_id, type); |
| 1147 } | 1130 } |
| 1148 return error::kNoError; | 1131 return error::kNoError; |
| 1149 } | 1132 } |
| 1150 | 1133 |
| 1151 error::Error GLES2DecoderImpl::HandleCullFace(uint32_t immediate_data_size, | 1134 error::Error GLES2DecoderImpl::HandleCullFace(uint32_t immediate_data_size, |
| 1152 const void* cmd_data) { | 1135 const volatile void* cmd_data) { |
| 1153 const gles2::cmds::CullFace& c = | 1136 const volatile gles2::cmds::CullFace& c = |
| 1154 *static_cast<const gles2::cmds::CullFace*>(cmd_data); | 1137 *static_cast<const volatile gles2::cmds::CullFace*>(cmd_data); |
| 1155 (void)c; | |
| 1156 GLenum mode = static_cast<GLenum>(c.mode); | 1138 GLenum mode = static_cast<GLenum>(c.mode); |
| 1157 if (!validators_->face_type.IsValid(mode)) { | 1139 if (!validators_->face_type.IsValid(mode)) { |
| 1158 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCullFace", mode, "mode"); | 1140 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCullFace", mode, "mode"); |
| 1159 return error::kNoError; | 1141 return error::kNoError; |
| 1160 } | 1142 } |
| 1161 if (state_.cull_mode != mode) { | 1143 if (state_.cull_mode != mode) { |
| 1162 state_.cull_mode = mode; | 1144 state_.cull_mode = mode; |
| 1163 glCullFace(mode); | 1145 glCullFace(mode); |
| 1164 } | 1146 } |
| 1165 return error::kNoError; | 1147 return error::kNoError; |
| 1166 } | 1148 } |
| 1167 | 1149 |
| 1168 error::Error GLES2DecoderImpl::HandleDeleteBuffersImmediate( | 1150 error::Error GLES2DecoderImpl::HandleDeleteBuffersImmediate( |
| 1169 uint32_t immediate_data_size, | 1151 uint32_t immediate_data_size, |
| 1170 const void* cmd_data) { | 1152 const volatile void* cmd_data) { |
| 1171 const gles2::cmds::DeleteBuffersImmediate& c = | 1153 const volatile gles2::cmds::DeleteBuffersImmediate& c = |
| 1172 *static_cast<const gles2::cmds::DeleteBuffersImmediate*>(cmd_data); | 1154 *static_cast<const volatile gles2::cmds::DeleteBuffersImmediate*>( |
| 1173 (void)c; | 1155 cmd_data); |
| 1174 GLsizei n = static_cast<GLsizei>(c.n); | 1156 GLsizei n = static_cast<GLsizei>(c.n); |
| 1175 uint32_t data_size; | 1157 uint32_t data_size; |
| 1176 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 1158 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 1177 return error::kOutOfBounds; | 1159 return error::kOutOfBounds; |
| 1178 } | 1160 } |
| 1179 const GLuint* buffers = | 1161 volatile const GLuint* buffers = GetImmediateDataAs<volatile const GLuint*>( |
| 1180 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 1162 c, data_size, immediate_data_size); |
| 1181 if (buffers == NULL) { | 1163 if (buffers == NULL) { |
| 1182 return error::kOutOfBounds; | 1164 return error::kOutOfBounds; |
| 1183 } | 1165 } |
| 1184 DeleteBuffersHelper(n, buffers); | 1166 DeleteBuffersHelper(n, buffers); |
| 1185 return error::kNoError; | 1167 return error::kNoError; |
| 1186 } | 1168 } |
| 1187 | 1169 |
| 1188 error::Error GLES2DecoderImpl::HandleDeleteFramebuffersImmediate( | 1170 error::Error GLES2DecoderImpl::HandleDeleteFramebuffersImmediate( |
| 1189 uint32_t immediate_data_size, | 1171 uint32_t immediate_data_size, |
| 1190 const void* cmd_data) { | 1172 const volatile void* cmd_data) { |
| 1191 const gles2::cmds::DeleteFramebuffersImmediate& c = | 1173 const volatile gles2::cmds::DeleteFramebuffersImmediate& c = |
| 1192 *static_cast<const gles2::cmds::DeleteFramebuffersImmediate*>(cmd_data); | 1174 *static_cast<const volatile gles2::cmds::DeleteFramebuffersImmediate*>( |
| 1193 (void)c; | 1175 cmd_data); |
| 1194 GLsizei n = static_cast<GLsizei>(c.n); | 1176 GLsizei n = static_cast<GLsizei>(c.n); |
| 1195 uint32_t data_size; | 1177 uint32_t data_size; |
| 1196 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 1178 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 1197 return error::kOutOfBounds; | 1179 return error::kOutOfBounds; |
| 1198 } | 1180 } |
| 1199 const GLuint* framebuffers = | 1181 volatile const GLuint* framebuffers = |
| 1200 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 1182 GetImmediateDataAs<volatile const GLuint*>(c, data_size, |
| 1183 immediate_data_size); |
| 1201 if (framebuffers == NULL) { | 1184 if (framebuffers == NULL) { |
| 1202 return error::kOutOfBounds; | 1185 return error::kOutOfBounds; |
| 1203 } | 1186 } |
| 1204 DeleteFramebuffersHelper(n, framebuffers); | 1187 DeleteFramebuffersHelper(n, framebuffers); |
| 1205 return error::kNoError; | 1188 return error::kNoError; |
| 1206 } | 1189 } |
| 1207 | 1190 |
| 1208 error::Error GLES2DecoderImpl::HandleDeleteRenderbuffersImmediate( | 1191 error::Error GLES2DecoderImpl::HandleDeleteRenderbuffersImmediate( |
| 1209 uint32_t immediate_data_size, | 1192 uint32_t immediate_data_size, |
| 1210 const void* cmd_data) { | 1193 const volatile void* cmd_data) { |
| 1211 const gles2::cmds::DeleteRenderbuffersImmediate& c = | 1194 const volatile gles2::cmds::DeleteRenderbuffersImmediate& c = |
| 1212 *static_cast<const gles2::cmds::DeleteRenderbuffersImmediate*>(cmd_data); | 1195 *static_cast<const volatile gles2::cmds::DeleteRenderbuffersImmediate*>( |
| 1213 (void)c; | 1196 cmd_data); |
| 1214 GLsizei n = static_cast<GLsizei>(c.n); | 1197 GLsizei n = static_cast<GLsizei>(c.n); |
| 1215 uint32_t data_size; | 1198 uint32_t data_size; |
| 1216 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 1199 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 1217 return error::kOutOfBounds; | 1200 return error::kOutOfBounds; |
| 1218 } | 1201 } |
| 1219 const GLuint* renderbuffers = | 1202 volatile const GLuint* renderbuffers = |
| 1220 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 1203 GetImmediateDataAs<volatile const GLuint*>(c, data_size, |
| 1204 immediate_data_size); |
| 1221 if (renderbuffers == NULL) { | 1205 if (renderbuffers == NULL) { |
| 1222 return error::kOutOfBounds; | 1206 return error::kOutOfBounds; |
| 1223 } | 1207 } |
| 1224 DeleteRenderbuffersHelper(n, renderbuffers); | 1208 DeleteRenderbuffersHelper(n, renderbuffers); |
| 1225 return error::kNoError; | 1209 return error::kNoError; |
| 1226 } | 1210 } |
| 1227 | 1211 |
| 1228 error::Error GLES2DecoderImpl::HandleDeleteSamplersImmediate( | 1212 error::Error GLES2DecoderImpl::HandleDeleteSamplersImmediate( |
| 1229 uint32_t immediate_data_size, | 1213 uint32_t immediate_data_size, |
| 1230 const void* cmd_data) { | 1214 const volatile void* cmd_data) { |
| 1231 if (!unsafe_es3_apis_enabled()) | 1215 if (!unsafe_es3_apis_enabled()) |
| 1232 return error::kUnknownCommand; | 1216 return error::kUnknownCommand; |
| 1233 const gles2::cmds::DeleteSamplersImmediate& c = | 1217 const volatile gles2::cmds::DeleteSamplersImmediate& c = |
| 1234 *static_cast<const gles2::cmds::DeleteSamplersImmediate*>(cmd_data); | 1218 *static_cast<const volatile gles2::cmds::DeleteSamplersImmediate*>( |
| 1235 (void)c; | 1219 cmd_data); |
| 1236 GLsizei n = static_cast<GLsizei>(c.n); | 1220 GLsizei n = static_cast<GLsizei>(c.n); |
| 1237 uint32_t data_size; | 1221 uint32_t data_size; |
| 1238 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 1222 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 1239 return error::kOutOfBounds; | 1223 return error::kOutOfBounds; |
| 1240 } | 1224 } |
| 1241 const GLuint* samplers = | 1225 volatile const GLuint* samplers = GetImmediateDataAs<volatile const GLuint*>( |
| 1242 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 1226 c, data_size, immediate_data_size); |
| 1243 if (samplers == NULL) { | 1227 if (samplers == NULL) { |
| 1244 return error::kOutOfBounds; | 1228 return error::kOutOfBounds; |
| 1245 } | 1229 } |
| 1246 DeleteSamplersHelper(n, samplers); | 1230 DeleteSamplersHelper(n, samplers); |
| 1247 return error::kNoError; | 1231 return error::kNoError; |
| 1248 } | 1232 } |
| 1249 | 1233 |
| 1250 error::Error GLES2DecoderImpl::HandleDeleteSync(uint32_t immediate_data_size, | 1234 error::Error GLES2DecoderImpl::HandleDeleteSync(uint32_t immediate_data_size, |
| 1251 const void* cmd_data) { | 1235 const volatile void* cmd_data) { |
| 1252 if (!unsafe_es3_apis_enabled()) | 1236 if (!unsafe_es3_apis_enabled()) |
| 1253 return error::kUnknownCommand; | 1237 return error::kUnknownCommand; |
| 1254 const gles2::cmds::DeleteSync& c = | 1238 const volatile gles2::cmds::DeleteSync& c = |
| 1255 *static_cast<const gles2::cmds::DeleteSync*>(cmd_data); | 1239 *static_cast<const volatile gles2::cmds::DeleteSync*>(cmd_data); |
| 1256 (void)c; | |
| 1257 GLuint sync = c.sync; | 1240 GLuint sync = c.sync; |
| 1258 DeleteSyncHelper(sync); | 1241 DeleteSyncHelper(sync); |
| 1259 return error::kNoError; | 1242 return error::kNoError; |
| 1260 } | 1243 } |
| 1261 | 1244 |
| 1262 error::Error GLES2DecoderImpl::HandleDeleteTexturesImmediate( | 1245 error::Error GLES2DecoderImpl::HandleDeleteTexturesImmediate( |
| 1263 uint32_t immediate_data_size, | 1246 uint32_t immediate_data_size, |
| 1264 const void* cmd_data) { | 1247 const volatile void* cmd_data) { |
| 1265 const gles2::cmds::DeleteTexturesImmediate& c = | 1248 const volatile gles2::cmds::DeleteTexturesImmediate& c = |
| 1266 *static_cast<const gles2::cmds::DeleteTexturesImmediate*>(cmd_data); | 1249 *static_cast<const volatile gles2::cmds::DeleteTexturesImmediate*>( |
| 1267 (void)c; | 1250 cmd_data); |
| 1268 GLsizei n = static_cast<GLsizei>(c.n); | 1251 GLsizei n = static_cast<GLsizei>(c.n); |
| 1269 uint32_t data_size; | 1252 uint32_t data_size; |
| 1270 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 1253 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 1271 return error::kOutOfBounds; | 1254 return error::kOutOfBounds; |
| 1272 } | 1255 } |
| 1273 const GLuint* textures = | 1256 volatile const GLuint* textures = GetImmediateDataAs<volatile const GLuint*>( |
| 1274 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 1257 c, data_size, immediate_data_size); |
| 1275 if (textures == NULL) { | 1258 if (textures == NULL) { |
| 1276 return error::kOutOfBounds; | 1259 return error::kOutOfBounds; |
| 1277 } | 1260 } |
| 1278 DeleteTexturesHelper(n, textures); | 1261 DeleteTexturesHelper(n, textures); |
| 1279 return error::kNoError; | 1262 return error::kNoError; |
| 1280 } | 1263 } |
| 1281 | 1264 |
| 1282 error::Error GLES2DecoderImpl::HandleDeleteTransformFeedbacksImmediate( | 1265 error::Error GLES2DecoderImpl::HandleDeleteTransformFeedbacksImmediate( |
| 1283 uint32_t immediate_data_size, | 1266 uint32_t immediate_data_size, |
| 1284 const void* cmd_data) { | 1267 const volatile void* cmd_data) { |
| 1285 if (!unsafe_es3_apis_enabled()) | 1268 if (!unsafe_es3_apis_enabled()) |
| 1286 return error::kUnknownCommand; | 1269 return error::kUnknownCommand; |
| 1287 const gles2::cmds::DeleteTransformFeedbacksImmediate& c = | 1270 const volatile gles2::cmds::DeleteTransformFeedbacksImmediate& c = |
| 1288 *static_cast<const gles2::cmds::DeleteTransformFeedbacksImmediate*>( | 1271 *static_cast< |
| 1272 const volatile gles2::cmds::DeleteTransformFeedbacksImmediate*>( |
| 1289 cmd_data); | 1273 cmd_data); |
| 1290 (void)c; | |
| 1291 GLsizei n = static_cast<GLsizei>(c.n); | 1274 GLsizei n = static_cast<GLsizei>(c.n); |
| 1292 uint32_t data_size; | 1275 uint32_t data_size; |
| 1293 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 1276 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 1294 return error::kOutOfBounds; | 1277 return error::kOutOfBounds; |
| 1295 } | 1278 } |
| 1296 const GLuint* ids = | 1279 volatile const GLuint* ids = GetImmediateDataAs<volatile const GLuint*>( |
| 1297 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 1280 c, data_size, immediate_data_size); |
| 1298 if (ids == NULL) { | 1281 if (ids == NULL) { |
| 1299 return error::kOutOfBounds; | 1282 return error::kOutOfBounds; |
| 1300 } | 1283 } |
| 1301 DeleteTransformFeedbacksHelper(n, ids); | 1284 DeleteTransformFeedbacksHelper(n, ids); |
| 1302 return error::kNoError; | 1285 return error::kNoError; |
| 1303 } | 1286 } |
| 1304 | 1287 |
| 1305 error::Error GLES2DecoderImpl::HandleDepthFunc(uint32_t immediate_data_size, | 1288 error::Error GLES2DecoderImpl::HandleDepthFunc(uint32_t immediate_data_size, |
| 1306 const void* cmd_data) { | 1289 const volatile void* cmd_data) { |
| 1307 const gles2::cmds::DepthFunc& c = | 1290 const volatile gles2::cmds::DepthFunc& c = |
| 1308 *static_cast<const gles2::cmds::DepthFunc*>(cmd_data); | 1291 *static_cast<const volatile gles2::cmds::DepthFunc*>(cmd_data); |
| 1309 (void)c; | |
| 1310 GLenum func = static_cast<GLenum>(c.func); | 1292 GLenum func = static_cast<GLenum>(c.func); |
| 1311 if (!validators_->cmp_function.IsValid(func)) { | 1293 if (!validators_->cmp_function.IsValid(func)) { |
| 1312 LOCAL_SET_GL_ERROR_INVALID_ENUM("glDepthFunc", func, "func"); | 1294 LOCAL_SET_GL_ERROR_INVALID_ENUM("glDepthFunc", func, "func"); |
| 1313 return error::kNoError; | 1295 return error::kNoError; |
| 1314 } | 1296 } |
| 1315 if (state_.depth_func != func) { | 1297 if (state_.depth_func != func) { |
| 1316 state_.depth_func = func; | 1298 state_.depth_func = func; |
| 1317 glDepthFunc(func); | 1299 glDepthFunc(func); |
| 1318 } | 1300 } |
| 1319 return error::kNoError; | 1301 return error::kNoError; |
| 1320 } | 1302 } |
| 1321 | 1303 |
| 1322 error::Error GLES2DecoderImpl::HandleDepthMask(uint32_t immediate_data_size, | 1304 error::Error GLES2DecoderImpl::HandleDepthMask(uint32_t immediate_data_size, |
| 1323 const void* cmd_data) { | 1305 const volatile void* cmd_data) { |
| 1324 const gles2::cmds::DepthMask& c = | 1306 const volatile gles2::cmds::DepthMask& c = |
| 1325 *static_cast<const gles2::cmds::DepthMask*>(cmd_data); | 1307 *static_cast<const volatile gles2::cmds::DepthMask*>(cmd_data); |
| 1326 (void)c; | |
| 1327 GLboolean flag = static_cast<GLboolean>(c.flag); | 1308 GLboolean flag = static_cast<GLboolean>(c.flag); |
| 1328 if (state_.depth_mask != flag) { | 1309 if (state_.depth_mask != flag) { |
| 1329 state_.depth_mask = flag; | 1310 state_.depth_mask = flag; |
| 1330 framebuffer_state_.clear_state_dirty = true; | 1311 framebuffer_state_.clear_state_dirty = true; |
| 1331 } | 1312 } |
| 1332 return error::kNoError; | 1313 return error::kNoError; |
| 1333 } | 1314 } |
| 1334 | 1315 |
| 1335 error::Error GLES2DecoderImpl::HandleDepthRangef(uint32_t immediate_data_size, | 1316 error::Error GLES2DecoderImpl::HandleDepthRangef( |
| 1336 const void* cmd_data) { | 1317 uint32_t immediate_data_size, |
| 1337 const gles2::cmds::DepthRangef& c = | 1318 const volatile void* cmd_data) { |
| 1338 *static_cast<const gles2::cmds::DepthRangef*>(cmd_data); | 1319 const volatile gles2::cmds::DepthRangef& c = |
| 1339 (void)c; | 1320 *static_cast<const volatile gles2::cmds::DepthRangef*>(cmd_data); |
| 1340 GLclampf zNear = static_cast<GLclampf>(c.zNear); | 1321 GLclampf zNear = static_cast<GLclampf>(c.zNear); |
| 1341 GLclampf zFar = static_cast<GLclampf>(c.zFar); | 1322 GLclampf zFar = static_cast<GLclampf>(c.zFar); |
| 1342 DoDepthRangef(zNear, zFar); | 1323 DoDepthRangef(zNear, zFar); |
| 1343 return error::kNoError; | 1324 return error::kNoError; |
| 1344 } | 1325 } |
| 1345 | 1326 |
| 1346 error::Error GLES2DecoderImpl::HandleDetachShader(uint32_t immediate_data_size, | 1327 error::Error GLES2DecoderImpl::HandleDetachShader( |
| 1347 const void* cmd_data) { | 1328 uint32_t immediate_data_size, |
| 1348 const gles2::cmds::DetachShader& c = | 1329 const volatile void* cmd_data) { |
| 1349 *static_cast<const gles2::cmds::DetachShader*>(cmd_data); | 1330 const volatile gles2::cmds::DetachShader& c = |
| 1350 (void)c; | 1331 *static_cast<const volatile gles2::cmds::DetachShader*>(cmd_data); |
| 1351 GLuint program = c.program; | 1332 GLuint program = c.program; |
| 1352 GLuint shader = c.shader; | 1333 GLuint shader = c.shader; |
| 1353 DoDetachShader(program, shader); | 1334 DoDetachShader(program, shader); |
| 1354 return error::kNoError; | 1335 return error::kNoError; |
| 1355 } | 1336 } |
| 1356 | 1337 |
| 1357 error::Error GLES2DecoderImpl::HandleDisable(uint32_t immediate_data_size, | 1338 error::Error GLES2DecoderImpl::HandleDisable(uint32_t immediate_data_size, |
| 1358 const void* cmd_data) { | 1339 const volatile void* cmd_data) { |
| 1359 const gles2::cmds::Disable& c = | 1340 const volatile gles2::cmds::Disable& c = |
| 1360 *static_cast<const gles2::cmds::Disable*>(cmd_data); | 1341 *static_cast<const volatile gles2::cmds::Disable*>(cmd_data); |
| 1361 (void)c; | |
| 1362 GLenum cap = static_cast<GLenum>(c.cap); | 1342 GLenum cap = static_cast<GLenum>(c.cap); |
| 1363 if (!validators_->capability.IsValid(cap)) { | 1343 if (!validators_->capability.IsValid(cap)) { |
| 1364 LOCAL_SET_GL_ERROR_INVALID_ENUM("glDisable", cap, "cap"); | 1344 LOCAL_SET_GL_ERROR_INVALID_ENUM("glDisable", cap, "cap"); |
| 1365 return error::kNoError; | 1345 return error::kNoError; |
| 1366 } | 1346 } |
| 1367 DoDisable(cap); | 1347 DoDisable(cap); |
| 1368 return error::kNoError; | 1348 return error::kNoError; |
| 1369 } | 1349 } |
| 1370 | 1350 |
| 1371 error::Error GLES2DecoderImpl::HandleDisableVertexAttribArray( | 1351 error::Error GLES2DecoderImpl::HandleDisableVertexAttribArray( |
| 1372 uint32_t immediate_data_size, | 1352 uint32_t immediate_data_size, |
| 1373 const void* cmd_data) { | 1353 const volatile void* cmd_data) { |
| 1374 const gles2::cmds::DisableVertexAttribArray& c = | 1354 const volatile gles2::cmds::DisableVertexAttribArray& c = |
| 1375 *static_cast<const gles2::cmds::DisableVertexAttribArray*>(cmd_data); | 1355 *static_cast<const volatile gles2::cmds::DisableVertexAttribArray*>( |
| 1376 (void)c; | 1356 cmd_data); |
| 1377 GLuint index = static_cast<GLuint>(c.index); | 1357 GLuint index = static_cast<GLuint>(c.index); |
| 1378 DoDisableVertexAttribArray(index); | 1358 DoDisableVertexAttribArray(index); |
| 1379 return error::kNoError; | 1359 return error::kNoError; |
| 1380 } | 1360 } |
| 1381 | 1361 |
| 1382 error::Error GLES2DecoderImpl::HandleEnable(uint32_t immediate_data_size, | 1362 error::Error GLES2DecoderImpl::HandleEnable(uint32_t immediate_data_size, |
| 1383 const void* cmd_data) { | 1363 const volatile void* cmd_data) { |
| 1384 const gles2::cmds::Enable& c = | 1364 const volatile gles2::cmds::Enable& c = |
| 1385 *static_cast<const gles2::cmds::Enable*>(cmd_data); | 1365 *static_cast<const volatile gles2::cmds::Enable*>(cmd_data); |
| 1386 (void)c; | |
| 1387 GLenum cap = static_cast<GLenum>(c.cap); | 1366 GLenum cap = static_cast<GLenum>(c.cap); |
| 1388 if (!validators_->capability.IsValid(cap)) { | 1367 if (!validators_->capability.IsValid(cap)) { |
| 1389 LOCAL_SET_GL_ERROR_INVALID_ENUM("glEnable", cap, "cap"); | 1368 LOCAL_SET_GL_ERROR_INVALID_ENUM("glEnable", cap, "cap"); |
| 1390 return error::kNoError; | 1369 return error::kNoError; |
| 1391 } | 1370 } |
| 1392 DoEnable(cap); | 1371 DoEnable(cap); |
| 1393 return error::kNoError; | 1372 return error::kNoError; |
| 1394 } | 1373 } |
| 1395 | 1374 |
| 1396 error::Error GLES2DecoderImpl::HandleEnableVertexAttribArray( | 1375 error::Error GLES2DecoderImpl::HandleEnableVertexAttribArray( |
| 1397 uint32_t immediate_data_size, | 1376 uint32_t immediate_data_size, |
| 1398 const void* cmd_data) { | 1377 const volatile void* cmd_data) { |
| 1399 const gles2::cmds::EnableVertexAttribArray& c = | 1378 const volatile gles2::cmds::EnableVertexAttribArray& c = |
| 1400 *static_cast<const gles2::cmds::EnableVertexAttribArray*>(cmd_data); | 1379 *static_cast<const volatile gles2::cmds::EnableVertexAttribArray*>( |
| 1401 (void)c; | 1380 cmd_data); |
| 1402 GLuint index = static_cast<GLuint>(c.index); | 1381 GLuint index = static_cast<GLuint>(c.index); |
| 1403 DoEnableVertexAttribArray(index); | 1382 DoEnableVertexAttribArray(index); |
| 1404 return error::kNoError; | 1383 return error::kNoError; |
| 1405 } | 1384 } |
| 1406 | 1385 |
| 1407 error::Error GLES2DecoderImpl::HandleFenceSync(uint32_t immediate_data_size, | 1386 error::Error GLES2DecoderImpl::HandleFenceSync(uint32_t immediate_data_size, |
| 1408 const void* cmd_data) { | 1387 const volatile void* cmd_data) { |
| 1409 if (!unsafe_es3_apis_enabled()) | 1388 if (!unsafe_es3_apis_enabled()) |
| 1410 return error::kUnknownCommand; | 1389 return error::kUnknownCommand; |
| 1411 const gles2::cmds::FenceSync& c = | 1390 const volatile gles2::cmds::FenceSync& c = |
| 1412 *static_cast<const gles2::cmds::FenceSync*>(cmd_data); | 1391 *static_cast<const volatile gles2::cmds::FenceSync*>(cmd_data); |
| 1413 (void)c; | |
| 1414 GLenum condition = static_cast<GLenum>(c.condition); | 1392 GLenum condition = static_cast<GLenum>(c.condition); |
| 1415 GLbitfield flags = static_cast<GLbitfield>(c.flags); | 1393 GLbitfield flags = static_cast<GLbitfield>(c.flags); |
| 1416 uint32_t client_id = c.client_id; | 1394 uint32_t client_id = c.client_id; |
| 1417 GLsync service_id = 0; | 1395 GLsync service_id = 0; |
| 1418 if (group_->GetSyncServiceId(client_id, &service_id)) { | 1396 if (group_->GetSyncServiceId(client_id, &service_id)) { |
| 1419 return error::kInvalidArguments; | 1397 return error::kInvalidArguments; |
| 1420 } | 1398 } |
| 1421 service_id = DoFenceSync(condition, flags); | 1399 service_id = DoFenceSync(condition, flags); |
| 1422 if (service_id) { | 1400 if (service_id) { |
| 1423 group_->AddSyncId(client_id, service_id); | 1401 group_->AddSyncId(client_id, service_id); |
| 1424 } | 1402 } |
| 1425 return error::kNoError; | 1403 return error::kNoError; |
| 1426 } | 1404 } |
| 1427 | 1405 |
| 1428 error::Error GLES2DecoderImpl::HandleFinish(uint32_t immediate_data_size, | 1406 error::Error GLES2DecoderImpl::HandleFinish(uint32_t immediate_data_size, |
| 1429 const void* cmd_data) { | 1407 const volatile void* cmd_data) { |
| 1430 const gles2::cmds::Finish& c = | |
| 1431 *static_cast<const gles2::cmds::Finish*>(cmd_data); | |
| 1432 (void)c; | |
| 1433 error::Error error; | 1408 error::Error error; |
| 1434 error = WillAccessBoundFramebufferForRead(); | 1409 error = WillAccessBoundFramebufferForRead(); |
| 1435 if (error != error::kNoError) | 1410 if (error != error::kNoError) |
| 1436 return error; | 1411 return error; |
| 1437 DoFinish(); | 1412 DoFinish(); |
| 1438 return error::kNoError; | 1413 return error::kNoError; |
| 1439 } | 1414 } |
| 1440 | 1415 |
| 1441 error::Error GLES2DecoderImpl::HandleFlush(uint32_t immediate_data_size, | 1416 error::Error GLES2DecoderImpl::HandleFlush(uint32_t immediate_data_size, |
| 1442 const void* cmd_data) { | 1417 const volatile void* cmd_data) { |
| 1443 const gles2::cmds::Flush& c = | |
| 1444 *static_cast<const gles2::cmds::Flush*>(cmd_data); | |
| 1445 (void)c; | |
| 1446 DoFlush(); | 1418 DoFlush(); |
| 1447 return error::kNoError; | 1419 return error::kNoError; |
| 1448 } | 1420 } |
| 1449 | 1421 |
| 1450 error::Error GLES2DecoderImpl::HandleFramebufferRenderbuffer( | 1422 error::Error GLES2DecoderImpl::HandleFramebufferRenderbuffer( |
| 1451 uint32_t immediate_data_size, | 1423 uint32_t immediate_data_size, |
| 1452 const void* cmd_data) { | 1424 const volatile void* cmd_data) { |
| 1453 const gles2::cmds::FramebufferRenderbuffer& c = | 1425 const volatile gles2::cmds::FramebufferRenderbuffer& c = |
| 1454 *static_cast<const gles2::cmds::FramebufferRenderbuffer*>(cmd_data); | 1426 *static_cast<const volatile gles2::cmds::FramebufferRenderbuffer*>( |
| 1455 (void)c; | 1427 cmd_data); |
| 1456 GLenum target = static_cast<GLenum>(c.target); | 1428 GLenum target = static_cast<GLenum>(c.target); |
| 1457 GLenum attachment = static_cast<GLenum>(c.attachment); | 1429 GLenum attachment = static_cast<GLenum>(c.attachment); |
| 1458 GLenum renderbuffertarget = static_cast<GLenum>(c.renderbuffertarget); | 1430 GLenum renderbuffertarget = static_cast<GLenum>(c.renderbuffertarget); |
| 1459 GLuint renderbuffer = c.renderbuffer; | 1431 GLuint renderbuffer = c.renderbuffer; |
| 1460 if (!validators_->framebuffer_target.IsValid(target)) { | 1432 if (!validators_->framebuffer_target.IsValid(target)) { |
| 1461 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer", target, | 1433 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer", target, |
| 1462 "target"); | 1434 "target"); |
| 1463 return error::kNoError; | 1435 return error::kNoError; |
| 1464 } | 1436 } |
| 1465 if (!validators_->attachment.IsValid(attachment)) { | 1437 if (!validators_->attachment.IsValid(attachment)) { |
| 1466 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer", attachment, | 1438 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer", attachment, |
| 1467 "attachment"); | 1439 "attachment"); |
| 1468 return error::kNoError; | 1440 return error::kNoError; |
| 1469 } | 1441 } |
| 1470 if (!validators_->render_buffer_target.IsValid(renderbuffertarget)) { | 1442 if (!validators_->render_buffer_target.IsValid(renderbuffertarget)) { |
| 1471 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer", | 1443 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer", |
| 1472 renderbuffertarget, "renderbuffertarget"); | 1444 renderbuffertarget, "renderbuffertarget"); |
| 1473 return error::kNoError; | 1445 return error::kNoError; |
| 1474 } | 1446 } |
| 1475 DoFramebufferRenderbuffer(target, attachment, renderbuffertarget, | 1447 DoFramebufferRenderbuffer(target, attachment, renderbuffertarget, |
| 1476 renderbuffer); | 1448 renderbuffer); |
| 1477 return error::kNoError; | 1449 return error::kNoError; |
| 1478 } | 1450 } |
| 1479 | 1451 |
| 1480 error::Error GLES2DecoderImpl::HandleFramebufferTexture2D( | 1452 error::Error GLES2DecoderImpl::HandleFramebufferTexture2D( |
| 1481 uint32_t immediate_data_size, | 1453 uint32_t immediate_data_size, |
| 1482 const void* cmd_data) { | 1454 const volatile void* cmd_data) { |
| 1483 const gles2::cmds::FramebufferTexture2D& c = | 1455 const volatile gles2::cmds::FramebufferTexture2D& c = |
| 1484 *static_cast<const gles2::cmds::FramebufferTexture2D*>(cmd_data); | 1456 *static_cast<const volatile gles2::cmds::FramebufferTexture2D*>(cmd_data); |
| 1485 (void)c; | |
| 1486 GLenum target = static_cast<GLenum>(c.target); | 1457 GLenum target = static_cast<GLenum>(c.target); |
| 1487 GLenum attachment = static_cast<GLenum>(c.attachment); | 1458 GLenum attachment = static_cast<GLenum>(c.attachment); |
| 1488 GLenum textarget = static_cast<GLenum>(c.textarget); | 1459 GLenum textarget = static_cast<GLenum>(c.textarget); |
| 1489 GLuint texture = c.texture; | 1460 GLuint texture = c.texture; |
| 1490 GLint level = static_cast<GLint>(c.level); | 1461 GLint level = static_cast<GLint>(c.level); |
| 1491 if (!validators_->framebuffer_target.IsValid(target)) { | 1462 if (!validators_->framebuffer_target.IsValid(target)) { |
| 1492 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", target, "target"); | 1463 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", target, "target"); |
| 1493 return error::kNoError; | 1464 return error::kNoError; |
| 1494 } | 1465 } |
| 1495 if (!validators_->attachment.IsValid(attachment)) { | 1466 if (!validators_->attachment.IsValid(attachment)) { |
| 1496 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", attachment, | 1467 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", attachment, |
| 1497 "attachment"); | 1468 "attachment"); |
| 1498 return error::kNoError; | 1469 return error::kNoError; |
| 1499 } | 1470 } |
| 1500 if (!validators_->texture_target.IsValid(textarget)) { | 1471 if (!validators_->texture_target.IsValid(textarget)) { |
| 1501 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", textarget, | 1472 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", textarget, |
| 1502 "textarget"); | 1473 "textarget"); |
| 1503 return error::kNoError; | 1474 return error::kNoError; |
| 1504 } | 1475 } |
| 1505 DoFramebufferTexture2D(target, attachment, textarget, texture, level); | 1476 DoFramebufferTexture2D(target, attachment, textarget, texture, level); |
| 1506 return error::kNoError; | 1477 return error::kNoError; |
| 1507 } | 1478 } |
| 1508 | 1479 |
| 1509 error::Error GLES2DecoderImpl::HandleFramebufferTextureLayer( | 1480 error::Error GLES2DecoderImpl::HandleFramebufferTextureLayer( |
| 1510 uint32_t immediate_data_size, | 1481 uint32_t immediate_data_size, |
| 1511 const void* cmd_data) { | 1482 const volatile void* cmd_data) { |
| 1512 if (!unsafe_es3_apis_enabled()) | 1483 if (!unsafe_es3_apis_enabled()) |
| 1513 return error::kUnknownCommand; | 1484 return error::kUnknownCommand; |
| 1514 const gles2::cmds::FramebufferTextureLayer& c = | 1485 const volatile gles2::cmds::FramebufferTextureLayer& c = |
| 1515 *static_cast<const gles2::cmds::FramebufferTextureLayer*>(cmd_data); | 1486 *static_cast<const volatile gles2::cmds::FramebufferTextureLayer*>( |
| 1516 (void)c; | 1487 cmd_data); |
| 1517 GLenum target = static_cast<GLenum>(c.target); | 1488 GLenum target = static_cast<GLenum>(c.target); |
| 1518 GLenum attachment = static_cast<GLenum>(c.attachment); | 1489 GLenum attachment = static_cast<GLenum>(c.attachment); |
| 1519 GLuint texture = c.texture; | 1490 GLuint texture = c.texture; |
| 1520 GLint level = static_cast<GLint>(c.level); | 1491 GLint level = static_cast<GLint>(c.level); |
| 1521 GLint layer = static_cast<GLint>(c.layer); | 1492 GLint layer = static_cast<GLint>(c.layer); |
| 1522 if (!validators_->framebuffer_target.IsValid(target)) { | 1493 if (!validators_->framebuffer_target.IsValid(target)) { |
| 1523 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTextureLayer", target, | 1494 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTextureLayer", target, |
| 1524 "target"); | 1495 "target"); |
| 1525 return error::kNoError; | 1496 return error::kNoError; |
| 1526 } | 1497 } |
| 1527 if (!validators_->attachment.IsValid(attachment)) { | 1498 if (!validators_->attachment.IsValid(attachment)) { |
| 1528 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTextureLayer", attachment, | 1499 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTextureLayer", attachment, |
| 1529 "attachment"); | 1500 "attachment"); |
| 1530 return error::kNoError; | 1501 return error::kNoError; |
| 1531 } | 1502 } |
| 1532 DoFramebufferTextureLayer(target, attachment, texture, level, layer); | 1503 DoFramebufferTextureLayer(target, attachment, texture, level, layer); |
| 1533 return error::kNoError; | 1504 return error::kNoError; |
| 1534 } | 1505 } |
| 1535 | 1506 |
| 1536 error::Error GLES2DecoderImpl::HandleFrontFace(uint32_t immediate_data_size, | 1507 error::Error GLES2DecoderImpl::HandleFrontFace(uint32_t immediate_data_size, |
| 1537 const void* cmd_data) { | 1508 const volatile void* cmd_data) { |
| 1538 const gles2::cmds::FrontFace& c = | 1509 const volatile gles2::cmds::FrontFace& c = |
| 1539 *static_cast<const gles2::cmds::FrontFace*>(cmd_data); | 1510 *static_cast<const volatile gles2::cmds::FrontFace*>(cmd_data); |
| 1540 (void)c; | |
| 1541 GLenum mode = static_cast<GLenum>(c.mode); | 1511 GLenum mode = static_cast<GLenum>(c.mode); |
| 1542 if (!validators_->face_mode.IsValid(mode)) { | 1512 if (!validators_->face_mode.IsValid(mode)) { |
| 1543 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFrontFace", mode, "mode"); | 1513 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFrontFace", mode, "mode"); |
| 1544 return error::kNoError; | 1514 return error::kNoError; |
| 1545 } | 1515 } |
| 1546 if (state_.front_face != mode) { | 1516 if (state_.front_face != mode) { |
| 1547 state_.front_face = mode; | 1517 state_.front_face = mode; |
| 1548 glFrontFace(mode); | 1518 glFrontFace(mode); |
| 1549 } | 1519 } |
| 1550 return error::kNoError; | 1520 return error::kNoError; |
| 1551 } | 1521 } |
| 1552 | 1522 |
| 1553 error::Error GLES2DecoderImpl::HandleGenBuffersImmediate( | 1523 error::Error GLES2DecoderImpl::HandleGenBuffersImmediate( |
| 1554 uint32_t immediate_data_size, | 1524 uint32_t immediate_data_size, |
| 1555 const void* cmd_data) { | 1525 const volatile void* cmd_data) { |
| 1556 const gles2::cmds::GenBuffersImmediate& c = | 1526 const volatile gles2::cmds::GenBuffersImmediate& c = |
| 1557 *static_cast<const gles2::cmds::GenBuffersImmediate*>(cmd_data); | 1527 *static_cast<const volatile gles2::cmds::GenBuffersImmediate*>(cmd_data); |
| 1558 (void)c; | |
| 1559 GLsizei n = static_cast<GLsizei>(c.n); | 1528 GLsizei n = static_cast<GLsizei>(c.n); |
| 1560 uint32_t data_size; | 1529 uint32_t data_size; |
| 1561 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 1530 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 1562 return error::kOutOfBounds; | 1531 return error::kOutOfBounds; |
| 1563 } | 1532 } |
| 1564 GLuint* buffers = | 1533 volatile GLuint* buffers = |
| 1565 GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); | 1534 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size); |
| 1566 if (buffers == NULL) { | 1535 if (buffers == NULL) { |
| 1567 return error::kOutOfBounds; | 1536 return error::kOutOfBounds; |
| 1568 } | 1537 } |
| 1569 auto buffers_copy = base::MakeUnique<GLuint[]>(n); | 1538 auto buffers_copy = base::MakeUnique<GLuint[]>(n); |
| 1570 GLuint* buffers_safe = buffers_copy.get(); | 1539 GLuint* buffers_safe = buffers_copy.get(); |
| 1571 std::copy(buffers, buffers + n, buffers_safe); | 1540 std::copy(buffers, buffers + n, buffers_safe); |
| 1572 if (!CheckUniqueAndNonNullIds(n, buffers_safe) || | 1541 if (!CheckUniqueAndNonNullIds(n, buffers_safe) || |
| 1573 !GenBuffersHelper(n, buffers_safe)) { | 1542 !GenBuffersHelper(n, buffers_safe)) { |
| 1574 return error::kInvalidArguments; | 1543 return error::kInvalidArguments; |
| 1575 } | 1544 } |
| 1576 return error::kNoError; | 1545 return error::kNoError; |
| 1577 } | 1546 } |
| 1578 | 1547 |
| 1579 error::Error GLES2DecoderImpl::HandleGenerateMipmap( | 1548 error::Error GLES2DecoderImpl::HandleGenerateMipmap( |
| 1580 uint32_t immediate_data_size, | 1549 uint32_t immediate_data_size, |
| 1581 const void* cmd_data) { | 1550 const volatile void* cmd_data) { |
| 1582 const gles2::cmds::GenerateMipmap& c = | 1551 const volatile gles2::cmds::GenerateMipmap& c = |
| 1583 *static_cast<const gles2::cmds::GenerateMipmap*>(cmd_data); | 1552 *static_cast<const volatile gles2::cmds::GenerateMipmap*>(cmd_data); |
| 1584 (void)c; | |
| 1585 GLenum target = static_cast<GLenum>(c.target); | 1553 GLenum target = static_cast<GLenum>(c.target); |
| 1586 if (!validators_->texture_bind_target.IsValid(target)) { | 1554 if (!validators_->texture_bind_target.IsValid(target)) { |
| 1587 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGenerateMipmap", target, "target"); | 1555 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGenerateMipmap", target, "target"); |
| 1588 return error::kNoError; | 1556 return error::kNoError; |
| 1589 } | 1557 } |
| 1590 DoGenerateMipmap(target); | 1558 DoGenerateMipmap(target); |
| 1591 return error::kNoError; | 1559 return error::kNoError; |
| 1592 } | 1560 } |
| 1593 | 1561 |
| 1594 error::Error GLES2DecoderImpl::HandleGenFramebuffersImmediate( | 1562 error::Error GLES2DecoderImpl::HandleGenFramebuffersImmediate( |
| 1595 uint32_t immediate_data_size, | 1563 uint32_t immediate_data_size, |
| 1596 const void* cmd_data) { | 1564 const volatile void* cmd_data) { |
| 1597 const gles2::cmds::GenFramebuffersImmediate& c = | 1565 const volatile gles2::cmds::GenFramebuffersImmediate& c = |
| 1598 *static_cast<const gles2::cmds::GenFramebuffersImmediate*>(cmd_data); | 1566 *static_cast<const volatile gles2::cmds::GenFramebuffersImmediate*>( |
| 1599 (void)c; | 1567 cmd_data); |
| 1600 GLsizei n = static_cast<GLsizei>(c.n); | 1568 GLsizei n = static_cast<GLsizei>(c.n); |
| 1601 uint32_t data_size; | 1569 uint32_t data_size; |
| 1602 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 1570 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 1603 return error::kOutOfBounds; | 1571 return error::kOutOfBounds; |
| 1604 } | 1572 } |
| 1605 GLuint* framebuffers = | 1573 volatile GLuint* framebuffers = |
| 1606 GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); | 1574 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size); |
| 1607 if (framebuffers == NULL) { | 1575 if (framebuffers == NULL) { |
| 1608 return error::kOutOfBounds; | 1576 return error::kOutOfBounds; |
| 1609 } | 1577 } |
| 1610 auto framebuffers_copy = base::MakeUnique<GLuint[]>(n); | 1578 auto framebuffers_copy = base::MakeUnique<GLuint[]>(n); |
| 1611 GLuint* framebuffers_safe = framebuffers_copy.get(); | 1579 GLuint* framebuffers_safe = framebuffers_copy.get(); |
| 1612 std::copy(framebuffers, framebuffers + n, framebuffers_safe); | 1580 std::copy(framebuffers, framebuffers + n, framebuffers_safe); |
| 1613 if (!CheckUniqueAndNonNullIds(n, framebuffers_safe) || | 1581 if (!CheckUniqueAndNonNullIds(n, framebuffers_safe) || |
| 1614 !GenFramebuffersHelper(n, framebuffers_safe)) { | 1582 !GenFramebuffersHelper(n, framebuffers_safe)) { |
| 1615 return error::kInvalidArguments; | 1583 return error::kInvalidArguments; |
| 1616 } | 1584 } |
| 1617 return error::kNoError; | 1585 return error::kNoError; |
| 1618 } | 1586 } |
| 1619 | 1587 |
| 1620 error::Error GLES2DecoderImpl::HandleGenRenderbuffersImmediate( | 1588 error::Error GLES2DecoderImpl::HandleGenRenderbuffersImmediate( |
| 1621 uint32_t immediate_data_size, | 1589 uint32_t immediate_data_size, |
| 1622 const void* cmd_data) { | 1590 const volatile void* cmd_data) { |
| 1623 const gles2::cmds::GenRenderbuffersImmediate& c = | 1591 const volatile gles2::cmds::GenRenderbuffersImmediate& c = |
| 1624 *static_cast<const gles2::cmds::GenRenderbuffersImmediate*>(cmd_data); | 1592 *static_cast<const volatile gles2::cmds::GenRenderbuffersImmediate*>( |
| 1625 (void)c; | 1593 cmd_data); |
| 1626 GLsizei n = static_cast<GLsizei>(c.n); | 1594 GLsizei n = static_cast<GLsizei>(c.n); |
| 1627 uint32_t data_size; | 1595 uint32_t data_size; |
| 1628 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 1596 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 1629 return error::kOutOfBounds; | 1597 return error::kOutOfBounds; |
| 1630 } | 1598 } |
| 1631 GLuint* renderbuffers = | 1599 volatile GLuint* renderbuffers = |
| 1632 GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); | 1600 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size); |
| 1633 if (renderbuffers == NULL) { | 1601 if (renderbuffers == NULL) { |
| 1634 return error::kOutOfBounds; | 1602 return error::kOutOfBounds; |
| 1635 } | 1603 } |
| 1636 auto renderbuffers_copy = base::MakeUnique<GLuint[]>(n); | 1604 auto renderbuffers_copy = base::MakeUnique<GLuint[]>(n); |
| 1637 GLuint* renderbuffers_safe = renderbuffers_copy.get(); | 1605 GLuint* renderbuffers_safe = renderbuffers_copy.get(); |
| 1638 std::copy(renderbuffers, renderbuffers + n, renderbuffers_safe); | 1606 std::copy(renderbuffers, renderbuffers + n, renderbuffers_safe); |
| 1639 if (!CheckUniqueAndNonNullIds(n, renderbuffers_safe) || | 1607 if (!CheckUniqueAndNonNullIds(n, renderbuffers_safe) || |
| 1640 !GenRenderbuffersHelper(n, renderbuffers_safe)) { | 1608 !GenRenderbuffersHelper(n, renderbuffers_safe)) { |
| 1641 return error::kInvalidArguments; | 1609 return error::kInvalidArguments; |
| 1642 } | 1610 } |
| 1643 return error::kNoError; | 1611 return error::kNoError; |
| 1644 } | 1612 } |
| 1645 | 1613 |
| 1646 error::Error GLES2DecoderImpl::HandleGenSamplersImmediate( | 1614 error::Error GLES2DecoderImpl::HandleGenSamplersImmediate( |
| 1647 uint32_t immediate_data_size, | 1615 uint32_t immediate_data_size, |
| 1648 const void* cmd_data) { | 1616 const volatile void* cmd_data) { |
| 1649 if (!unsafe_es3_apis_enabled()) | 1617 if (!unsafe_es3_apis_enabled()) |
| 1650 return error::kUnknownCommand; | 1618 return error::kUnknownCommand; |
| 1651 const gles2::cmds::GenSamplersImmediate& c = | 1619 const volatile gles2::cmds::GenSamplersImmediate& c = |
| 1652 *static_cast<const gles2::cmds::GenSamplersImmediate*>(cmd_data); | 1620 *static_cast<const volatile gles2::cmds::GenSamplersImmediate*>(cmd_data); |
| 1653 (void)c; | |
| 1654 GLsizei n = static_cast<GLsizei>(c.n); | 1621 GLsizei n = static_cast<GLsizei>(c.n); |
| 1655 uint32_t data_size; | 1622 uint32_t data_size; |
| 1656 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 1623 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 1657 return error::kOutOfBounds; | 1624 return error::kOutOfBounds; |
| 1658 } | 1625 } |
| 1659 GLuint* samplers = | 1626 volatile GLuint* samplers = |
| 1660 GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); | 1627 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size); |
| 1661 if (samplers == NULL) { | 1628 if (samplers == NULL) { |
| 1662 return error::kOutOfBounds; | 1629 return error::kOutOfBounds; |
| 1663 } | 1630 } |
| 1664 auto samplers_copy = base::MakeUnique<GLuint[]>(n); | 1631 auto samplers_copy = base::MakeUnique<GLuint[]>(n); |
| 1665 GLuint* samplers_safe = samplers_copy.get(); | 1632 GLuint* samplers_safe = samplers_copy.get(); |
| 1666 std::copy(samplers, samplers + n, samplers_safe); | 1633 std::copy(samplers, samplers + n, samplers_safe); |
| 1667 if (!CheckUniqueAndNonNullIds(n, samplers_safe) || | 1634 if (!CheckUniqueAndNonNullIds(n, samplers_safe) || |
| 1668 !GenSamplersHelper(n, samplers_safe)) { | 1635 !GenSamplersHelper(n, samplers_safe)) { |
| 1669 return error::kInvalidArguments; | 1636 return error::kInvalidArguments; |
| 1670 } | 1637 } |
| 1671 return error::kNoError; | 1638 return error::kNoError; |
| 1672 } | 1639 } |
| 1673 | 1640 |
| 1674 error::Error GLES2DecoderImpl::HandleGenTexturesImmediate( | 1641 error::Error GLES2DecoderImpl::HandleGenTexturesImmediate( |
| 1675 uint32_t immediate_data_size, | 1642 uint32_t immediate_data_size, |
| 1676 const void* cmd_data) { | 1643 const volatile void* cmd_data) { |
| 1677 const gles2::cmds::GenTexturesImmediate& c = | 1644 const volatile gles2::cmds::GenTexturesImmediate& c = |
| 1678 *static_cast<const gles2::cmds::GenTexturesImmediate*>(cmd_data); | 1645 *static_cast<const volatile gles2::cmds::GenTexturesImmediate*>(cmd_data); |
| 1679 (void)c; | |
| 1680 GLsizei n = static_cast<GLsizei>(c.n); | 1646 GLsizei n = static_cast<GLsizei>(c.n); |
| 1681 uint32_t data_size; | 1647 uint32_t data_size; |
| 1682 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 1648 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 1683 return error::kOutOfBounds; | 1649 return error::kOutOfBounds; |
| 1684 } | 1650 } |
| 1685 GLuint* textures = | 1651 volatile GLuint* textures = |
| 1686 GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); | 1652 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size); |
| 1687 if (textures == NULL) { | 1653 if (textures == NULL) { |
| 1688 return error::kOutOfBounds; | 1654 return error::kOutOfBounds; |
| 1689 } | 1655 } |
| 1690 auto textures_copy = base::MakeUnique<GLuint[]>(n); | 1656 auto textures_copy = base::MakeUnique<GLuint[]>(n); |
| 1691 GLuint* textures_safe = textures_copy.get(); | 1657 GLuint* textures_safe = textures_copy.get(); |
| 1692 std::copy(textures, textures + n, textures_safe); | 1658 std::copy(textures, textures + n, textures_safe); |
| 1693 if (!CheckUniqueAndNonNullIds(n, textures_safe) || | 1659 if (!CheckUniqueAndNonNullIds(n, textures_safe) || |
| 1694 !GenTexturesHelper(n, textures_safe)) { | 1660 !GenTexturesHelper(n, textures_safe)) { |
| 1695 return error::kInvalidArguments; | 1661 return error::kInvalidArguments; |
| 1696 } | 1662 } |
| 1697 return error::kNoError; | 1663 return error::kNoError; |
| 1698 } | 1664 } |
| 1699 | 1665 |
| 1700 error::Error GLES2DecoderImpl::HandleGenTransformFeedbacksImmediate( | 1666 error::Error GLES2DecoderImpl::HandleGenTransformFeedbacksImmediate( |
| 1701 uint32_t immediate_data_size, | 1667 uint32_t immediate_data_size, |
| 1702 const void* cmd_data) { | 1668 const volatile void* cmd_data) { |
| 1703 if (!unsafe_es3_apis_enabled()) | 1669 if (!unsafe_es3_apis_enabled()) |
| 1704 return error::kUnknownCommand; | 1670 return error::kUnknownCommand; |
| 1705 const gles2::cmds::GenTransformFeedbacksImmediate& c = | 1671 const volatile gles2::cmds::GenTransformFeedbacksImmediate& c = |
| 1706 *static_cast<const gles2::cmds::GenTransformFeedbacksImmediate*>( | 1672 *static_cast<const volatile gles2::cmds::GenTransformFeedbacksImmediate*>( |
| 1707 cmd_data); | 1673 cmd_data); |
| 1708 (void)c; | |
| 1709 GLsizei n = static_cast<GLsizei>(c.n); | 1674 GLsizei n = static_cast<GLsizei>(c.n); |
| 1710 uint32_t data_size; | 1675 uint32_t data_size; |
| 1711 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 1676 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 1712 return error::kOutOfBounds; | 1677 return error::kOutOfBounds; |
| 1713 } | 1678 } |
| 1714 GLuint* ids = GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); | 1679 volatile GLuint* ids = |
| 1680 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size); |
| 1715 if (ids == NULL) { | 1681 if (ids == NULL) { |
| 1716 return error::kOutOfBounds; | 1682 return error::kOutOfBounds; |
| 1717 } | 1683 } |
| 1718 auto ids_copy = base::MakeUnique<GLuint[]>(n); | 1684 auto ids_copy = base::MakeUnique<GLuint[]>(n); |
| 1719 GLuint* ids_safe = ids_copy.get(); | 1685 GLuint* ids_safe = ids_copy.get(); |
| 1720 std::copy(ids, ids + n, ids_safe); | 1686 std::copy(ids, ids + n, ids_safe); |
| 1721 if (!CheckUniqueAndNonNullIds(n, ids_safe) || | 1687 if (!CheckUniqueAndNonNullIds(n, ids_safe) || |
| 1722 !GenTransformFeedbacksHelper(n, ids_safe)) { | 1688 !GenTransformFeedbacksHelper(n, ids_safe)) { |
| 1723 return error::kInvalidArguments; | 1689 return error::kInvalidArguments; |
| 1724 } | 1690 } |
| 1725 return error::kNoError; | 1691 return error::kNoError; |
| 1726 } | 1692 } |
| 1727 | 1693 |
| 1728 error::Error GLES2DecoderImpl::HandleGetBooleanv(uint32_t immediate_data_size, | 1694 error::Error GLES2DecoderImpl::HandleGetBooleanv( |
| 1729 const void* cmd_data) { | 1695 uint32_t immediate_data_size, |
| 1730 const gles2::cmds::GetBooleanv& c = | 1696 const volatile void* cmd_data) { |
| 1731 *static_cast<const gles2::cmds::GetBooleanv*>(cmd_data); | 1697 const volatile gles2::cmds::GetBooleanv& c = |
| 1732 (void)c; | 1698 *static_cast<const volatile gles2::cmds::GetBooleanv*>(cmd_data); |
| 1733 GLenum pname = static_cast<GLenum>(c.pname); | 1699 GLenum pname = static_cast<GLenum>(c.pname); |
| 1734 typedef cmds::GetBooleanv::Result Result; | 1700 typedef cmds::GetBooleanv::Result Result; |
| 1735 GLsizei num_values = 0; | 1701 GLsizei num_values = 0; |
| 1736 GetNumValuesReturnedForGLGet(pname, &num_values); | 1702 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 1737 Result* result = GetSharedMemoryAs<Result*>( | 1703 Result* result = GetSharedMemoryAs<Result*>( |
| 1738 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 1704 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 1739 GLboolean* params = result ? result->GetData() : NULL; | 1705 GLboolean* params = result ? result->GetData() : NULL; |
| 1740 if (!validators_->g_l_state.IsValid(pname)) { | 1706 if (!validators_->g_l_state.IsValid(pname)) { |
| 1741 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBooleanv", pname, "pname"); | 1707 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBooleanv", pname, "pname"); |
| 1742 return error::kNoError; | 1708 return error::kNoError; |
| 1743 } | 1709 } |
| 1744 if (params == NULL) { | 1710 if (params == NULL) { |
| 1745 return error::kOutOfBounds; | 1711 return error::kOutOfBounds; |
| 1746 } | 1712 } |
| 1747 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetBooleanv"); | 1713 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetBooleanv"); |
| 1748 // Check that the client initialized the result. | 1714 // Check that the client initialized the result. |
| 1749 if (result->size != 0) { | 1715 if (result->size != 0) { |
| 1750 return error::kInvalidArguments; | 1716 return error::kInvalidArguments; |
| 1751 } | 1717 } |
| 1752 DoGetBooleanv(pname, params); | 1718 DoGetBooleanv(pname, params); |
| 1753 GLenum error = LOCAL_PEEK_GL_ERROR("GetBooleanv"); | 1719 GLenum error = LOCAL_PEEK_GL_ERROR("GetBooleanv"); |
| 1754 if (error == GL_NO_ERROR) { | 1720 if (error == GL_NO_ERROR) { |
| 1755 result->SetNumResults(num_values); | 1721 result->SetNumResults(num_values); |
| 1756 } | 1722 } |
| 1757 return error::kNoError; | 1723 return error::kNoError; |
| 1758 } | 1724 } |
| 1759 | 1725 |
| 1760 error::Error GLES2DecoderImpl::HandleGetBufferParameteri64v( | 1726 error::Error GLES2DecoderImpl::HandleGetBufferParameteri64v( |
| 1761 uint32_t immediate_data_size, | 1727 uint32_t immediate_data_size, |
| 1762 const void* cmd_data) { | 1728 const volatile void* cmd_data) { |
| 1763 if (!unsafe_es3_apis_enabled()) | 1729 if (!unsafe_es3_apis_enabled()) |
| 1764 return error::kUnknownCommand; | 1730 return error::kUnknownCommand; |
| 1765 const gles2::cmds::GetBufferParameteri64v& c = | 1731 const volatile gles2::cmds::GetBufferParameteri64v& c = |
| 1766 *static_cast<const gles2::cmds::GetBufferParameteri64v*>(cmd_data); | 1732 *static_cast<const volatile gles2::cmds::GetBufferParameteri64v*>( |
| 1767 (void)c; | 1733 cmd_data); |
| 1768 GLenum target = static_cast<GLenum>(c.target); | 1734 GLenum target = static_cast<GLenum>(c.target); |
| 1769 GLenum pname = static_cast<GLenum>(c.pname); | 1735 GLenum pname = static_cast<GLenum>(c.pname); |
| 1770 typedef cmds::GetBufferParameteri64v::Result Result; | 1736 typedef cmds::GetBufferParameteri64v::Result Result; |
| 1771 GLsizei num_values = 0; | 1737 GLsizei num_values = 0; |
| 1772 GetNumValuesReturnedForGLGet(pname, &num_values); | 1738 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 1773 Result* result = GetSharedMemoryAs<Result*>( | 1739 Result* result = GetSharedMemoryAs<Result*>( |
| 1774 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 1740 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 1775 GLint64* params = result ? result->GetData() : NULL; | 1741 GLint64* params = result ? result->GetData() : NULL; |
| 1776 if (!validators_->buffer_target.IsValid(target)) { | 1742 if (!validators_->buffer_target.IsValid(target)) { |
| 1777 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteri64v", target, | 1743 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteri64v", target, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1788 // Check that the client initialized the result. | 1754 // Check that the client initialized the result. |
| 1789 if (result->size != 0) { | 1755 if (result->size != 0) { |
| 1790 return error::kInvalidArguments; | 1756 return error::kInvalidArguments; |
| 1791 } | 1757 } |
| 1792 DoGetBufferParameteri64v(target, pname, params); | 1758 DoGetBufferParameteri64v(target, pname, params); |
| 1793 result->SetNumResults(num_values); | 1759 result->SetNumResults(num_values); |
| 1794 return error::kNoError; | 1760 return error::kNoError; |
| 1795 } | 1761 } |
| 1796 error::Error GLES2DecoderImpl::HandleGetBufferParameteriv( | 1762 error::Error GLES2DecoderImpl::HandleGetBufferParameteriv( |
| 1797 uint32_t immediate_data_size, | 1763 uint32_t immediate_data_size, |
| 1798 const void* cmd_data) { | 1764 const volatile void* cmd_data) { |
| 1799 const gles2::cmds::GetBufferParameteriv& c = | 1765 const volatile gles2::cmds::GetBufferParameteriv& c = |
| 1800 *static_cast<const gles2::cmds::GetBufferParameteriv*>(cmd_data); | 1766 *static_cast<const volatile gles2::cmds::GetBufferParameteriv*>(cmd_data); |
| 1801 (void)c; | |
| 1802 GLenum target = static_cast<GLenum>(c.target); | 1767 GLenum target = static_cast<GLenum>(c.target); |
| 1803 GLenum pname = static_cast<GLenum>(c.pname); | 1768 GLenum pname = static_cast<GLenum>(c.pname); |
| 1804 typedef cmds::GetBufferParameteriv::Result Result; | 1769 typedef cmds::GetBufferParameteriv::Result Result; |
| 1805 GLsizei num_values = 0; | 1770 GLsizei num_values = 0; |
| 1806 GetNumValuesReturnedForGLGet(pname, &num_values); | 1771 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 1807 Result* result = GetSharedMemoryAs<Result*>( | 1772 Result* result = GetSharedMemoryAs<Result*>( |
| 1808 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 1773 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 1809 GLint* params = result ? result->GetData() : NULL; | 1774 GLint* params = result ? result->GetData() : NULL; |
| 1810 if (!validators_->buffer_target.IsValid(target)) { | 1775 if (!validators_->buffer_target.IsValid(target)) { |
| 1811 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteriv", target, "target"); | 1776 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteriv", target, "target"); |
| 1812 return error::kNoError; | 1777 return error::kNoError; |
| 1813 } | 1778 } |
| 1814 if (!validators_->buffer_parameter.IsValid(pname)) { | 1779 if (!validators_->buffer_parameter.IsValid(pname)) { |
| 1815 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteriv", pname, "pname"); | 1780 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteriv", pname, "pname"); |
| 1816 return error::kNoError; | 1781 return error::kNoError; |
| 1817 } | 1782 } |
| 1818 if (params == NULL) { | 1783 if (params == NULL) { |
| 1819 return error::kOutOfBounds; | 1784 return error::kOutOfBounds; |
| 1820 } | 1785 } |
| 1821 // Check that the client initialized the result. | 1786 // Check that the client initialized the result. |
| 1822 if (result->size != 0) { | 1787 if (result->size != 0) { |
| 1823 return error::kInvalidArguments; | 1788 return error::kInvalidArguments; |
| 1824 } | 1789 } |
| 1825 DoGetBufferParameteriv(target, pname, params); | 1790 DoGetBufferParameteriv(target, pname, params); |
| 1826 result->SetNumResults(num_values); | 1791 result->SetNumResults(num_values); |
| 1827 return error::kNoError; | 1792 return error::kNoError; |
| 1828 } | 1793 } |
| 1829 error::Error GLES2DecoderImpl::HandleGetError(uint32_t immediate_data_size, | 1794 error::Error GLES2DecoderImpl::HandleGetError(uint32_t immediate_data_size, |
| 1830 const void* cmd_data) { | 1795 const volatile void* cmd_data) { |
| 1831 const gles2::cmds::GetError& c = | 1796 const volatile gles2::cmds::GetError& c = |
| 1832 *static_cast<const gles2::cmds::GetError*>(cmd_data); | 1797 *static_cast<const volatile gles2::cmds::GetError*>(cmd_data); |
| 1833 (void)c; | |
| 1834 typedef cmds::GetError::Result Result; | 1798 typedef cmds::GetError::Result Result; |
| 1835 Result* result_dst = GetSharedMemoryAs<Result*>( | 1799 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 1836 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 1800 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 1837 if (!result_dst) { | 1801 if (!result_dst) { |
| 1838 return error::kOutOfBounds; | 1802 return error::kOutOfBounds; |
| 1839 } | 1803 } |
| 1840 *result_dst = GetErrorState()->GetGLError(); | 1804 *result_dst = GetErrorState()->GetGLError(); |
| 1841 return error::kNoError; | 1805 return error::kNoError; |
| 1842 } | 1806 } |
| 1843 | 1807 |
| 1844 error::Error GLES2DecoderImpl::HandleGetFloatv(uint32_t immediate_data_size, | 1808 error::Error GLES2DecoderImpl::HandleGetFloatv(uint32_t immediate_data_size, |
| 1845 const void* cmd_data) { | 1809 const volatile void* cmd_data) { |
| 1846 const gles2::cmds::GetFloatv& c = | 1810 const volatile gles2::cmds::GetFloatv& c = |
| 1847 *static_cast<const gles2::cmds::GetFloatv*>(cmd_data); | 1811 *static_cast<const volatile gles2::cmds::GetFloatv*>(cmd_data); |
| 1848 (void)c; | |
| 1849 GLenum pname = static_cast<GLenum>(c.pname); | 1812 GLenum pname = static_cast<GLenum>(c.pname); |
| 1850 typedef cmds::GetFloatv::Result Result; | 1813 typedef cmds::GetFloatv::Result Result; |
| 1851 GLsizei num_values = 0; | 1814 GLsizei num_values = 0; |
| 1852 GetNumValuesReturnedForGLGet(pname, &num_values); | 1815 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 1853 Result* result = GetSharedMemoryAs<Result*>( | 1816 Result* result = GetSharedMemoryAs<Result*>( |
| 1854 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 1817 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 1855 GLfloat* params = result ? result->GetData() : NULL; | 1818 GLfloat* params = result ? result->GetData() : NULL; |
| 1856 if (!validators_->g_l_state.IsValid(pname)) { | 1819 if (!validators_->g_l_state.IsValid(pname)) { |
| 1857 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetFloatv", pname, "pname"); | 1820 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetFloatv", pname, "pname"); |
| 1858 return error::kNoError; | 1821 return error::kNoError; |
| 1859 } | 1822 } |
| 1860 if (params == NULL) { | 1823 if (params == NULL) { |
| 1861 return error::kOutOfBounds; | 1824 return error::kOutOfBounds; |
| 1862 } | 1825 } |
| 1863 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetFloatv"); | 1826 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetFloatv"); |
| 1864 // Check that the client initialized the result. | 1827 // Check that the client initialized the result. |
| 1865 if (result->size != 0) { | 1828 if (result->size != 0) { |
| 1866 return error::kInvalidArguments; | 1829 return error::kInvalidArguments; |
| 1867 } | 1830 } |
| 1868 DoGetFloatv(pname, params); | 1831 DoGetFloatv(pname, params); |
| 1869 GLenum error = LOCAL_PEEK_GL_ERROR("GetFloatv"); | 1832 GLenum error = LOCAL_PEEK_GL_ERROR("GetFloatv"); |
| 1870 if (error == GL_NO_ERROR) { | 1833 if (error == GL_NO_ERROR) { |
| 1871 result->SetNumResults(num_values); | 1834 result->SetNumResults(num_values); |
| 1872 } | 1835 } |
| 1873 return error::kNoError; | 1836 return error::kNoError; |
| 1874 } | 1837 } |
| 1875 | 1838 |
| 1876 error::Error GLES2DecoderImpl::HandleGetFramebufferAttachmentParameteriv( | 1839 error::Error GLES2DecoderImpl::HandleGetFramebufferAttachmentParameteriv( |
| 1877 uint32_t immediate_data_size, | 1840 uint32_t immediate_data_size, |
| 1878 const void* cmd_data) { | 1841 const volatile void* cmd_data) { |
| 1879 const gles2::cmds::GetFramebufferAttachmentParameteriv& c = | 1842 const volatile gles2::cmds::GetFramebufferAttachmentParameteriv& c = |
| 1880 *static_cast<const gles2::cmds::GetFramebufferAttachmentParameteriv*>( | 1843 *static_cast< |
| 1844 const volatile gles2::cmds::GetFramebufferAttachmentParameteriv*>( |
| 1881 cmd_data); | 1845 cmd_data); |
| 1882 (void)c; | |
| 1883 GLenum target = static_cast<GLenum>(c.target); | 1846 GLenum target = static_cast<GLenum>(c.target); |
| 1884 GLenum attachment = static_cast<GLenum>(c.attachment); | 1847 GLenum attachment = static_cast<GLenum>(c.attachment); |
| 1885 GLenum pname = static_cast<GLenum>(c.pname); | 1848 GLenum pname = static_cast<GLenum>(c.pname); |
| 1886 typedef cmds::GetFramebufferAttachmentParameteriv::Result Result; | 1849 typedef cmds::GetFramebufferAttachmentParameteriv::Result Result; |
| 1887 GLsizei num_values = 0; | 1850 GLsizei num_values = 0; |
| 1888 GetNumValuesReturnedForGLGet(pname, &num_values); | 1851 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 1889 Result* result = GetSharedMemoryAs<Result*>( | 1852 Result* result = GetSharedMemoryAs<Result*>( |
| 1890 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 1853 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 1891 GLint* params = result ? result->GetData() : NULL; | 1854 GLint* params = result ? result->GetData() : NULL; |
| 1892 if (!validators_->framebuffer_target.IsValid(target)) { | 1855 if (!validators_->framebuffer_target.IsValid(target)) { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1913 return error::kInvalidArguments; | 1876 return error::kInvalidArguments; |
| 1914 } | 1877 } |
| 1915 DoGetFramebufferAttachmentParameteriv(target, attachment, pname, params); | 1878 DoGetFramebufferAttachmentParameteriv(target, attachment, pname, params); |
| 1916 GLenum error = LOCAL_PEEK_GL_ERROR("GetFramebufferAttachmentParameteriv"); | 1879 GLenum error = LOCAL_PEEK_GL_ERROR("GetFramebufferAttachmentParameteriv"); |
| 1917 if (error == GL_NO_ERROR) { | 1880 if (error == GL_NO_ERROR) { |
| 1918 result->SetNumResults(num_values); | 1881 result->SetNumResults(num_values); |
| 1919 } | 1882 } |
| 1920 return error::kNoError; | 1883 return error::kNoError; |
| 1921 } | 1884 } |
| 1922 | 1885 |
| 1923 error::Error GLES2DecoderImpl::HandleGetInteger64v(uint32_t immediate_data_size, | 1886 error::Error GLES2DecoderImpl::HandleGetInteger64v( |
| 1924 const void* cmd_data) { | 1887 uint32_t immediate_data_size, |
| 1888 const volatile void* cmd_data) { |
| 1925 if (!unsafe_es3_apis_enabled()) | 1889 if (!unsafe_es3_apis_enabled()) |
| 1926 return error::kUnknownCommand; | 1890 return error::kUnknownCommand; |
| 1927 const gles2::cmds::GetInteger64v& c = | 1891 const volatile gles2::cmds::GetInteger64v& c = |
| 1928 *static_cast<const gles2::cmds::GetInteger64v*>(cmd_data); | 1892 *static_cast<const volatile gles2::cmds::GetInteger64v*>(cmd_data); |
| 1929 (void)c; | |
| 1930 GLenum pname = static_cast<GLenum>(c.pname); | 1893 GLenum pname = static_cast<GLenum>(c.pname); |
| 1931 typedef cmds::GetInteger64v::Result Result; | 1894 typedef cmds::GetInteger64v::Result Result; |
| 1932 GLsizei num_values = 0; | 1895 GLsizei num_values = 0; |
| 1933 GetNumValuesReturnedForGLGet(pname, &num_values); | 1896 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 1934 Result* result = GetSharedMemoryAs<Result*>( | 1897 Result* result = GetSharedMemoryAs<Result*>( |
| 1935 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 1898 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 1936 GLint64* params = result ? result->GetData() : NULL; | 1899 GLint64* params = result ? result->GetData() : NULL; |
| 1937 if (!validators_->g_l_state.IsValid(pname)) { | 1900 if (!validators_->g_l_state.IsValid(pname)) { |
| 1938 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInteger64v", pname, "pname"); | 1901 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInteger64v", pname, "pname"); |
| 1939 return error::kNoError; | 1902 return error::kNoError; |
| 1940 } | 1903 } |
| 1941 if (params == NULL) { | 1904 if (params == NULL) { |
| 1942 return error::kOutOfBounds; | 1905 return error::kOutOfBounds; |
| 1943 } | 1906 } |
| 1944 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetInteger64v"); | 1907 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetInteger64v"); |
| 1945 // Check that the client initialized the result. | 1908 // Check that the client initialized the result. |
| 1946 if (result->size != 0) { | 1909 if (result->size != 0) { |
| 1947 return error::kInvalidArguments; | 1910 return error::kInvalidArguments; |
| 1948 } | 1911 } |
| 1949 DoGetInteger64v(pname, params); | 1912 DoGetInteger64v(pname, params); |
| 1950 GLenum error = LOCAL_PEEK_GL_ERROR("GetInteger64v"); | 1913 GLenum error = LOCAL_PEEK_GL_ERROR("GetInteger64v"); |
| 1951 if (error == GL_NO_ERROR) { | 1914 if (error == GL_NO_ERROR) { |
| 1952 result->SetNumResults(num_values); | 1915 result->SetNumResults(num_values); |
| 1953 } | 1916 } |
| 1954 return error::kNoError; | 1917 return error::kNoError; |
| 1955 } | 1918 } |
| 1956 | 1919 |
| 1957 error::Error GLES2DecoderImpl::HandleGetIntegeri_v(uint32_t immediate_data_size, | 1920 error::Error GLES2DecoderImpl::HandleGetIntegeri_v( |
| 1958 const void* cmd_data) { | 1921 uint32_t immediate_data_size, |
| 1922 const volatile void* cmd_data) { |
| 1959 if (!unsafe_es3_apis_enabled()) | 1923 if (!unsafe_es3_apis_enabled()) |
| 1960 return error::kUnknownCommand; | 1924 return error::kUnknownCommand; |
| 1961 const gles2::cmds::GetIntegeri_v& c = | 1925 const volatile gles2::cmds::GetIntegeri_v& c = |
| 1962 *static_cast<const gles2::cmds::GetIntegeri_v*>(cmd_data); | 1926 *static_cast<const volatile gles2::cmds::GetIntegeri_v*>(cmd_data); |
| 1963 (void)c; | |
| 1964 GLenum pname = static_cast<GLenum>(c.pname); | 1927 GLenum pname = static_cast<GLenum>(c.pname); |
| 1965 GLuint index = static_cast<GLuint>(c.index); | 1928 GLuint index = static_cast<GLuint>(c.index); |
| 1966 typedef cmds::GetIntegeri_v::Result Result; | 1929 typedef cmds::GetIntegeri_v::Result Result; |
| 1967 GLsizei num_values = 0; | 1930 GLsizei num_values = 0; |
| 1968 GetNumValuesReturnedForGLGet(pname, &num_values); | 1931 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 1969 Result* result = GetSharedMemoryAs<Result*>(c.data_shm_id, c.data_shm_offset, | 1932 Result* result = GetSharedMemoryAs<Result*>(c.data_shm_id, c.data_shm_offset, |
| 1970 Result::ComputeSize(num_values)); | 1933 Result::ComputeSize(num_values)); |
| 1971 GLint* data = result ? result->GetData() : NULL; | 1934 GLint* data = result ? result->GetData() : NULL; |
| 1972 if (!validators_->indexed_g_l_state.IsValid(pname)) { | 1935 if (!validators_->indexed_g_l_state.IsValid(pname)) { |
| 1973 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetIntegeri_v", pname, "pname"); | 1936 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetIntegeri_v", pname, "pname"); |
| 1974 return error::kNoError; | 1937 return error::kNoError; |
| 1975 } | 1938 } |
| 1976 if (data == NULL) { | 1939 if (data == NULL) { |
| 1977 return error::kOutOfBounds; | 1940 return error::kOutOfBounds; |
| 1978 } | 1941 } |
| 1979 // Check that the client initialized the result. | 1942 // Check that the client initialized the result. |
| 1980 if (result->size != 0) { | 1943 if (result->size != 0) { |
| 1981 return error::kInvalidArguments; | 1944 return error::kInvalidArguments; |
| 1982 } | 1945 } |
| 1983 DoGetIntegeri_v(pname, index, data); | 1946 DoGetIntegeri_v(pname, index, data); |
| 1984 result->SetNumResults(num_values); | 1947 result->SetNumResults(num_values); |
| 1985 return error::kNoError; | 1948 return error::kNoError; |
| 1986 } | 1949 } |
| 1987 error::Error GLES2DecoderImpl::HandleGetInteger64i_v( | 1950 error::Error GLES2DecoderImpl::HandleGetInteger64i_v( |
| 1988 uint32_t immediate_data_size, | 1951 uint32_t immediate_data_size, |
| 1989 const void* cmd_data) { | 1952 const volatile void* cmd_data) { |
| 1990 if (!unsafe_es3_apis_enabled()) | 1953 if (!unsafe_es3_apis_enabled()) |
| 1991 return error::kUnknownCommand; | 1954 return error::kUnknownCommand; |
| 1992 const gles2::cmds::GetInteger64i_v& c = | 1955 const volatile gles2::cmds::GetInteger64i_v& c = |
| 1993 *static_cast<const gles2::cmds::GetInteger64i_v*>(cmd_data); | 1956 *static_cast<const volatile gles2::cmds::GetInteger64i_v*>(cmd_data); |
| 1994 (void)c; | |
| 1995 GLenum pname = static_cast<GLenum>(c.pname); | 1957 GLenum pname = static_cast<GLenum>(c.pname); |
| 1996 GLuint index = static_cast<GLuint>(c.index); | 1958 GLuint index = static_cast<GLuint>(c.index); |
| 1997 typedef cmds::GetInteger64i_v::Result Result; | 1959 typedef cmds::GetInteger64i_v::Result Result; |
| 1998 GLsizei num_values = 0; | 1960 GLsizei num_values = 0; |
| 1999 GetNumValuesReturnedForGLGet(pname, &num_values); | 1961 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 2000 Result* result = GetSharedMemoryAs<Result*>(c.data_shm_id, c.data_shm_offset, | 1962 Result* result = GetSharedMemoryAs<Result*>(c.data_shm_id, c.data_shm_offset, |
| 2001 Result::ComputeSize(num_values)); | 1963 Result::ComputeSize(num_values)); |
| 2002 GLint64* data = result ? result->GetData() : NULL; | 1964 GLint64* data = result ? result->GetData() : NULL; |
| 2003 if (!validators_->indexed_g_l_state.IsValid(pname)) { | 1965 if (!validators_->indexed_g_l_state.IsValid(pname)) { |
| 2004 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInteger64i_v", pname, "pname"); | 1966 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInteger64i_v", pname, "pname"); |
| 2005 return error::kNoError; | 1967 return error::kNoError; |
| 2006 } | 1968 } |
| 2007 if (data == NULL) { | 1969 if (data == NULL) { |
| 2008 return error::kOutOfBounds; | 1970 return error::kOutOfBounds; |
| 2009 } | 1971 } |
| 2010 // Check that the client initialized the result. | 1972 // Check that the client initialized the result. |
| 2011 if (result->size != 0) { | 1973 if (result->size != 0) { |
| 2012 return error::kInvalidArguments; | 1974 return error::kInvalidArguments; |
| 2013 } | 1975 } |
| 2014 DoGetInteger64i_v(pname, index, data); | 1976 DoGetInteger64i_v(pname, index, data); |
| 2015 result->SetNumResults(num_values); | 1977 result->SetNumResults(num_values); |
| 2016 return error::kNoError; | 1978 return error::kNoError; |
| 2017 } | 1979 } |
| 2018 error::Error GLES2DecoderImpl::HandleGetIntegerv(uint32_t immediate_data_size, | 1980 error::Error GLES2DecoderImpl::HandleGetIntegerv( |
| 2019 const void* cmd_data) { | 1981 uint32_t immediate_data_size, |
| 2020 const gles2::cmds::GetIntegerv& c = | 1982 const volatile void* cmd_data) { |
| 2021 *static_cast<const gles2::cmds::GetIntegerv*>(cmd_data); | 1983 const volatile gles2::cmds::GetIntegerv& c = |
| 2022 (void)c; | 1984 *static_cast<const volatile gles2::cmds::GetIntegerv*>(cmd_data); |
| 2023 GLenum pname = static_cast<GLenum>(c.pname); | 1985 GLenum pname = static_cast<GLenum>(c.pname); |
| 2024 typedef cmds::GetIntegerv::Result Result; | 1986 typedef cmds::GetIntegerv::Result Result; |
| 2025 GLsizei num_values = 0; | 1987 GLsizei num_values = 0; |
| 2026 GetNumValuesReturnedForGLGet(pname, &num_values); | 1988 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 2027 Result* result = GetSharedMemoryAs<Result*>( | 1989 Result* result = GetSharedMemoryAs<Result*>( |
| 2028 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 1990 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 2029 GLint* params = result ? result->GetData() : NULL; | 1991 GLint* params = result ? result->GetData() : NULL; |
| 2030 if (!validators_->g_l_state.IsValid(pname)) { | 1992 if (!validators_->g_l_state.IsValid(pname)) { |
| 2031 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetIntegerv", pname, "pname"); | 1993 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetIntegerv", pname, "pname"); |
| 2032 return error::kNoError; | 1994 return error::kNoError; |
| 2033 } | 1995 } |
| 2034 if (params == NULL) { | 1996 if (params == NULL) { |
| 2035 return error::kOutOfBounds; | 1997 return error::kOutOfBounds; |
| 2036 } | 1998 } |
| 2037 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetIntegerv"); | 1999 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetIntegerv"); |
| 2038 // Check that the client initialized the result. | 2000 // Check that the client initialized the result. |
| 2039 if (result->size != 0) { | 2001 if (result->size != 0) { |
| 2040 return error::kInvalidArguments; | 2002 return error::kInvalidArguments; |
| 2041 } | 2003 } |
| 2042 DoGetIntegerv(pname, params); | 2004 DoGetIntegerv(pname, params); |
| 2043 GLenum error = LOCAL_PEEK_GL_ERROR("GetIntegerv"); | 2005 GLenum error = LOCAL_PEEK_GL_ERROR("GetIntegerv"); |
| 2044 if (error == GL_NO_ERROR) { | 2006 if (error == GL_NO_ERROR) { |
| 2045 result->SetNumResults(num_values); | 2007 result->SetNumResults(num_values); |
| 2046 } | 2008 } |
| 2047 return error::kNoError; | 2009 return error::kNoError; |
| 2048 } | 2010 } |
| 2049 | 2011 |
| 2050 error::Error GLES2DecoderImpl::HandleGetProgramiv(uint32_t immediate_data_size, | 2012 error::Error GLES2DecoderImpl::HandleGetProgramiv( |
| 2051 const void* cmd_data) { | 2013 uint32_t immediate_data_size, |
| 2052 const gles2::cmds::GetProgramiv& c = | 2014 const volatile void* cmd_data) { |
| 2053 *static_cast<const gles2::cmds::GetProgramiv*>(cmd_data); | 2015 const volatile gles2::cmds::GetProgramiv& c = |
| 2054 (void)c; | 2016 *static_cast<const volatile gles2::cmds::GetProgramiv*>(cmd_data); |
| 2055 GLuint program = c.program; | 2017 GLuint program = c.program; |
| 2056 GLenum pname = static_cast<GLenum>(c.pname); | 2018 GLenum pname = static_cast<GLenum>(c.pname); |
| 2057 typedef cmds::GetProgramiv::Result Result; | 2019 typedef cmds::GetProgramiv::Result Result; |
| 2058 GLsizei num_values = 0; | 2020 GLsizei num_values = 0; |
| 2059 GetNumValuesReturnedForGLGet(pname, &num_values); | 2021 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 2060 Result* result = GetSharedMemoryAs<Result*>( | 2022 Result* result = GetSharedMemoryAs<Result*>( |
| 2061 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 2023 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 2062 GLint* params = result ? result->GetData() : NULL; | 2024 GLint* params = result ? result->GetData() : NULL; |
| 2063 if (!validators_->program_parameter.IsValid(pname)) { | 2025 if (!validators_->program_parameter.IsValid(pname)) { |
| 2064 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetProgramiv", pname, "pname"); | 2026 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetProgramiv", pname, "pname"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2075 DoGetProgramiv(program, pname, params); | 2037 DoGetProgramiv(program, pname, params); |
| 2076 GLenum error = LOCAL_PEEK_GL_ERROR("GetProgramiv"); | 2038 GLenum error = LOCAL_PEEK_GL_ERROR("GetProgramiv"); |
| 2077 if (error == GL_NO_ERROR) { | 2039 if (error == GL_NO_ERROR) { |
| 2078 result->SetNumResults(num_values); | 2040 result->SetNumResults(num_values); |
| 2079 } | 2041 } |
| 2080 return error::kNoError; | 2042 return error::kNoError; |
| 2081 } | 2043 } |
| 2082 | 2044 |
| 2083 error::Error GLES2DecoderImpl::HandleGetRenderbufferParameteriv( | 2045 error::Error GLES2DecoderImpl::HandleGetRenderbufferParameteriv( |
| 2084 uint32_t immediate_data_size, | 2046 uint32_t immediate_data_size, |
| 2085 const void* cmd_data) { | 2047 const volatile void* cmd_data) { |
| 2086 const gles2::cmds::GetRenderbufferParameteriv& c = | 2048 const volatile gles2::cmds::GetRenderbufferParameteriv& c = |
| 2087 *static_cast<const gles2::cmds::GetRenderbufferParameteriv*>(cmd_data); | 2049 *static_cast<const volatile gles2::cmds::GetRenderbufferParameteriv*>( |
| 2088 (void)c; | 2050 cmd_data); |
| 2089 GLenum target = static_cast<GLenum>(c.target); | 2051 GLenum target = static_cast<GLenum>(c.target); |
| 2090 GLenum pname = static_cast<GLenum>(c.pname); | 2052 GLenum pname = static_cast<GLenum>(c.pname); |
| 2091 typedef cmds::GetRenderbufferParameteriv::Result Result; | 2053 typedef cmds::GetRenderbufferParameteriv::Result Result; |
| 2092 GLsizei num_values = 0; | 2054 GLsizei num_values = 0; |
| 2093 GetNumValuesReturnedForGLGet(pname, &num_values); | 2055 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 2094 Result* result = GetSharedMemoryAs<Result*>( | 2056 Result* result = GetSharedMemoryAs<Result*>( |
| 2095 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 2057 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 2096 GLint* params = result ? result->GetData() : NULL; | 2058 GLint* params = result ? result->GetData() : NULL; |
| 2097 if (!validators_->render_buffer_target.IsValid(target)) { | 2059 if (!validators_->render_buffer_target.IsValid(target)) { |
| 2098 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetRenderbufferParameteriv", target, | 2060 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetRenderbufferParameteriv", target, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2115 DoGetRenderbufferParameteriv(target, pname, params); | 2077 DoGetRenderbufferParameteriv(target, pname, params); |
| 2116 GLenum error = LOCAL_PEEK_GL_ERROR("GetRenderbufferParameteriv"); | 2078 GLenum error = LOCAL_PEEK_GL_ERROR("GetRenderbufferParameteriv"); |
| 2117 if (error == GL_NO_ERROR) { | 2079 if (error == GL_NO_ERROR) { |
| 2118 result->SetNumResults(num_values); | 2080 result->SetNumResults(num_values); |
| 2119 } | 2081 } |
| 2120 return error::kNoError; | 2082 return error::kNoError; |
| 2121 } | 2083 } |
| 2122 | 2084 |
| 2123 error::Error GLES2DecoderImpl::HandleGetSamplerParameterfv( | 2085 error::Error GLES2DecoderImpl::HandleGetSamplerParameterfv( |
| 2124 uint32_t immediate_data_size, | 2086 uint32_t immediate_data_size, |
| 2125 const void* cmd_data) { | 2087 const volatile void* cmd_data) { |
| 2126 if (!unsafe_es3_apis_enabled()) | 2088 if (!unsafe_es3_apis_enabled()) |
| 2127 return error::kUnknownCommand; | 2089 return error::kUnknownCommand; |
| 2128 const gles2::cmds::GetSamplerParameterfv& c = | 2090 const volatile gles2::cmds::GetSamplerParameterfv& c = |
| 2129 *static_cast<const gles2::cmds::GetSamplerParameterfv*>(cmd_data); | 2091 *static_cast<const volatile gles2::cmds::GetSamplerParameterfv*>( |
| 2130 (void)c; | 2092 cmd_data); |
| 2131 GLuint sampler = c.sampler; | 2093 GLuint sampler = c.sampler; |
| 2132 GLenum pname = static_cast<GLenum>(c.pname); | 2094 GLenum pname = static_cast<GLenum>(c.pname); |
| 2133 typedef cmds::GetSamplerParameterfv::Result Result; | 2095 typedef cmds::GetSamplerParameterfv::Result Result; |
| 2134 GLsizei num_values = 0; | 2096 GLsizei num_values = 0; |
| 2135 GetNumValuesReturnedForGLGet(pname, &num_values); | 2097 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 2136 Result* result = GetSharedMemoryAs<Result*>( | 2098 Result* result = GetSharedMemoryAs<Result*>( |
| 2137 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 2099 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 2138 GLfloat* params = result ? result->GetData() : NULL; | 2100 GLfloat* params = result ? result->GetData() : NULL; |
| 2139 if (!validators_->sampler_parameter.IsValid(pname)) { | 2101 if (!validators_->sampler_parameter.IsValid(pname)) { |
| 2140 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetSamplerParameterfv", pname, "pname"); | 2102 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetSamplerParameterfv", pname, "pname"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2151 DoGetSamplerParameterfv(sampler, pname, params); | 2113 DoGetSamplerParameterfv(sampler, pname, params); |
| 2152 GLenum error = LOCAL_PEEK_GL_ERROR("GetSamplerParameterfv"); | 2114 GLenum error = LOCAL_PEEK_GL_ERROR("GetSamplerParameterfv"); |
| 2153 if (error == GL_NO_ERROR) { | 2115 if (error == GL_NO_ERROR) { |
| 2154 result->SetNumResults(num_values); | 2116 result->SetNumResults(num_values); |
| 2155 } | 2117 } |
| 2156 return error::kNoError; | 2118 return error::kNoError; |
| 2157 } | 2119 } |
| 2158 | 2120 |
| 2159 error::Error GLES2DecoderImpl::HandleGetSamplerParameteriv( | 2121 error::Error GLES2DecoderImpl::HandleGetSamplerParameteriv( |
| 2160 uint32_t immediate_data_size, | 2122 uint32_t immediate_data_size, |
| 2161 const void* cmd_data) { | 2123 const volatile void* cmd_data) { |
| 2162 if (!unsafe_es3_apis_enabled()) | 2124 if (!unsafe_es3_apis_enabled()) |
| 2163 return error::kUnknownCommand; | 2125 return error::kUnknownCommand; |
| 2164 const gles2::cmds::GetSamplerParameteriv& c = | 2126 const volatile gles2::cmds::GetSamplerParameteriv& c = |
| 2165 *static_cast<const gles2::cmds::GetSamplerParameteriv*>(cmd_data); | 2127 *static_cast<const volatile gles2::cmds::GetSamplerParameteriv*>( |
| 2166 (void)c; | 2128 cmd_data); |
| 2167 GLuint sampler = c.sampler; | 2129 GLuint sampler = c.sampler; |
| 2168 GLenum pname = static_cast<GLenum>(c.pname); | 2130 GLenum pname = static_cast<GLenum>(c.pname); |
| 2169 typedef cmds::GetSamplerParameteriv::Result Result; | 2131 typedef cmds::GetSamplerParameteriv::Result Result; |
| 2170 GLsizei num_values = 0; | 2132 GLsizei num_values = 0; |
| 2171 GetNumValuesReturnedForGLGet(pname, &num_values); | 2133 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 2172 Result* result = GetSharedMemoryAs<Result*>( | 2134 Result* result = GetSharedMemoryAs<Result*>( |
| 2173 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 2135 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 2174 GLint* params = result ? result->GetData() : NULL; | 2136 GLint* params = result ? result->GetData() : NULL; |
| 2175 if (!validators_->sampler_parameter.IsValid(pname)) { | 2137 if (!validators_->sampler_parameter.IsValid(pname)) { |
| 2176 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetSamplerParameteriv", pname, "pname"); | 2138 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetSamplerParameteriv", pname, "pname"); |
| 2177 return error::kNoError; | 2139 return error::kNoError; |
| 2178 } | 2140 } |
| 2179 if (params == NULL) { | 2141 if (params == NULL) { |
| 2180 return error::kOutOfBounds; | 2142 return error::kOutOfBounds; |
| 2181 } | 2143 } |
| 2182 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetSamplerParameteriv"); | 2144 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetSamplerParameteriv"); |
| 2183 // Check that the client initialized the result. | 2145 // Check that the client initialized the result. |
| 2184 if (result->size != 0) { | 2146 if (result->size != 0) { |
| 2185 return error::kInvalidArguments; | 2147 return error::kInvalidArguments; |
| 2186 } | 2148 } |
| 2187 DoGetSamplerParameteriv(sampler, pname, params); | 2149 DoGetSamplerParameteriv(sampler, pname, params); |
| 2188 GLenum error = LOCAL_PEEK_GL_ERROR("GetSamplerParameteriv"); | 2150 GLenum error = LOCAL_PEEK_GL_ERROR("GetSamplerParameteriv"); |
| 2189 if (error == GL_NO_ERROR) { | 2151 if (error == GL_NO_ERROR) { |
| 2190 result->SetNumResults(num_values); | 2152 result->SetNumResults(num_values); |
| 2191 } | 2153 } |
| 2192 return error::kNoError; | 2154 return error::kNoError; |
| 2193 } | 2155 } |
| 2194 | 2156 |
| 2195 error::Error GLES2DecoderImpl::HandleGetShaderiv(uint32_t immediate_data_size, | 2157 error::Error GLES2DecoderImpl::HandleGetShaderiv( |
| 2196 const void* cmd_data) { | 2158 uint32_t immediate_data_size, |
| 2197 const gles2::cmds::GetShaderiv& c = | 2159 const volatile void* cmd_data) { |
| 2198 *static_cast<const gles2::cmds::GetShaderiv*>(cmd_data); | 2160 const volatile gles2::cmds::GetShaderiv& c = |
| 2199 (void)c; | 2161 *static_cast<const volatile gles2::cmds::GetShaderiv*>(cmd_data); |
| 2200 GLuint shader = c.shader; | 2162 GLuint shader = c.shader; |
| 2201 GLenum pname = static_cast<GLenum>(c.pname); | 2163 GLenum pname = static_cast<GLenum>(c.pname); |
| 2202 typedef cmds::GetShaderiv::Result Result; | 2164 typedef cmds::GetShaderiv::Result Result; |
| 2203 GLsizei num_values = 0; | 2165 GLsizei num_values = 0; |
| 2204 GetNumValuesReturnedForGLGet(pname, &num_values); | 2166 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 2205 Result* result = GetSharedMemoryAs<Result*>( | 2167 Result* result = GetSharedMemoryAs<Result*>( |
| 2206 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 2168 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 2207 GLint* params = result ? result->GetData() : NULL; | 2169 GLint* params = result ? result->GetData() : NULL; |
| 2208 if (!validators_->shader_parameter.IsValid(pname)) { | 2170 if (!validators_->shader_parameter.IsValid(pname)) { |
| 2209 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetShaderiv", pname, "pname"); | 2171 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetShaderiv", pname, "pname"); |
| 2210 return error::kNoError; | 2172 return error::kNoError; |
| 2211 } | 2173 } |
| 2212 if (params == NULL) { | 2174 if (params == NULL) { |
| 2213 return error::kOutOfBounds; | 2175 return error::kOutOfBounds; |
| 2214 } | 2176 } |
| 2215 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetShaderiv"); | 2177 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetShaderiv"); |
| 2216 // Check that the client initialized the result. | 2178 // Check that the client initialized the result. |
| 2217 if (result->size != 0) { | 2179 if (result->size != 0) { |
| 2218 return error::kInvalidArguments; | 2180 return error::kInvalidArguments; |
| 2219 } | 2181 } |
| 2220 DoGetShaderiv(shader, pname, params); | 2182 DoGetShaderiv(shader, pname, params); |
| 2221 GLenum error = LOCAL_PEEK_GL_ERROR("GetShaderiv"); | 2183 GLenum error = LOCAL_PEEK_GL_ERROR("GetShaderiv"); |
| 2222 if (error == GL_NO_ERROR) { | 2184 if (error == GL_NO_ERROR) { |
| 2223 result->SetNumResults(num_values); | 2185 result->SetNumResults(num_values); |
| 2224 } | 2186 } |
| 2225 return error::kNoError; | 2187 return error::kNoError; |
| 2226 } | 2188 } |
| 2227 | 2189 |
| 2228 error::Error GLES2DecoderImpl::HandleGetSynciv(uint32_t immediate_data_size, | 2190 error::Error GLES2DecoderImpl::HandleGetSynciv(uint32_t immediate_data_size, |
| 2229 const void* cmd_data) { | 2191 const volatile void* cmd_data) { |
| 2230 if (!unsafe_es3_apis_enabled()) | 2192 if (!unsafe_es3_apis_enabled()) |
| 2231 return error::kUnknownCommand; | 2193 return error::kUnknownCommand; |
| 2232 const gles2::cmds::GetSynciv& c = | 2194 const volatile gles2::cmds::GetSynciv& c = |
| 2233 *static_cast<const gles2::cmds::GetSynciv*>(cmd_data); | 2195 *static_cast<const volatile gles2::cmds::GetSynciv*>(cmd_data); |
| 2234 (void)c; | |
| 2235 GLuint sync = static_cast<GLuint>(c.sync); | 2196 GLuint sync = static_cast<GLuint>(c.sync); |
| 2236 GLenum pname = static_cast<GLenum>(c.pname); | 2197 GLenum pname = static_cast<GLenum>(c.pname); |
| 2237 typedef cmds::GetSynciv::Result Result; | 2198 typedef cmds::GetSynciv::Result Result; |
| 2238 GLsizei num_values = 0; | 2199 GLsizei num_values = 0; |
| 2239 GetNumValuesReturnedForGLGet(pname, &num_values); | 2200 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 2240 Result* result = GetSharedMemoryAs<Result*>( | 2201 Result* result = GetSharedMemoryAs<Result*>( |
| 2241 c.values_shm_id, c.values_shm_offset, Result::ComputeSize(num_values)); | 2202 c.values_shm_id, c.values_shm_offset, Result::ComputeSize(num_values)); |
| 2242 GLint* values = result ? result->GetData() : NULL; | 2203 GLint* values = result ? result->GetData() : NULL; |
| 2243 if (!validators_->sync_parameter.IsValid(pname)) { | 2204 if (!validators_->sync_parameter.IsValid(pname)) { |
| 2244 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetSynciv", pname, "pname"); | 2205 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetSynciv", pname, "pname"); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2260 glGetSynciv(service_sync, pname, num_values, nullptr, values); | 2221 glGetSynciv(service_sync, pname, num_values, nullptr, values); |
| 2261 GLenum error = LOCAL_PEEK_GL_ERROR("GetSynciv"); | 2222 GLenum error = LOCAL_PEEK_GL_ERROR("GetSynciv"); |
| 2262 if (error == GL_NO_ERROR) { | 2223 if (error == GL_NO_ERROR) { |
| 2263 result->SetNumResults(num_values); | 2224 result->SetNumResults(num_values); |
| 2264 } | 2225 } |
| 2265 return error::kNoError; | 2226 return error::kNoError; |
| 2266 } | 2227 } |
| 2267 | 2228 |
| 2268 error::Error GLES2DecoderImpl::HandleGetTexParameterfv( | 2229 error::Error GLES2DecoderImpl::HandleGetTexParameterfv( |
| 2269 uint32_t immediate_data_size, | 2230 uint32_t immediate_data_size, |
| 2270 const void* cmd_data) { | 2231 const volatile void* cmd_data) { |
| 2271 const gles2::cmds::GetTexParameterfv& c = | 2232 const volatile gles2::cmds::GetTexParameterfv& c = |
| 2272 *static_cast<const gles2::cmds::GetTexParameterfv*>(cmd_data); | 2233 *static_cast<const volatile gles2::cmds::GetTexParameterfv*>(cmd_data); |
| 2273 (void)c; | |
| 2274 GLenum target = static_cast<GLenum>(c.target); | 2234 GLenum target = static_cast<GLenum>(c.target); |
| 2275 GLenum pname = static_cast<GLenum>(c.pname); | 2235 GLenum pname = static_cast<GLenum>(c.pname); |
| 2276 typedef cmds::GetTexParameterfv::Result Result; | 2236 typedef cmds::GetTexParameterfv::Result Result; |
| 2277 GLsizei num_values = 0; | 2237 GLsizei num_values = 0; |
| 2278 GetNumValuesReturnedForGLGet(pname, &num_values); | 2238 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 2279 Result* result = GetSharedMemoryAs<Result*>( | 2239 Result* result = GetSharedMemoryAs<Result*>( |
| 2280 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 2240 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 2281 GLfloat* params = result ? result->GetData() : NULL; | 2241 GLfloat* params = result ? result->GetData() : NULL; |
| 2282 if (!validators_->get_tex_param_target.IsValid(target)) { | 2242 if (!validators_->get_tex_param_target.IsValid(target)) { |
| 2283 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetTexParameterfv", target, "target"); | 2243 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetTexParameterfv", target, "target"); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2298 DoGetTexParameterfv(target, pname, params); | 2258 DoGetTexParameterfv(target, pname, params); |
| 2299 GLenum error = LOCAL_PEEK_GL_ERROR("GetTexParameterfv"); | 2259 GLenum error = LOCAL_PEEK_GL_ERROR("GetTexParameterfv"); |
| 2300 if (error == GL_NO_ERROR) { | 2260 if (error == GL_NO_ERROR) { |
| 2301 result->SetNumResults(num_values); | 2261 result->SetNumResults(num_values); |
| 2302 } | 2262 } |
| 2303 return error::kNoError; | 2263 return error::kNoError; |
| 2304 } | 2264 } |
| 2305 | 2265 |
| 2306 error::Error GLES2DecoderImpl::HandleGetTexParameteriv( | 2266 error::Error GLES2DecoderImpl::HandleGetTexParameteriv( |
| 2307 uint32_t immediate_data_size, | 2267 uint32_t immediate_data_size, |
| 2308 const void* cmd_data) { | 2268 const volatile void* cmd_data) { |
| 2309 const gles2::cmds::GetTexParameteriv& c = | 2269 const volatile gles2::cmds::GetTexParameteriv& c = |
| 2310 *static_cast<const gles2::cmds::GetTexParameteriv*>(cmd_data); | 2270 *static_cast<const volatile gles2::cmds::GetTexParameteriv*>(cmd_data); |
| 2311 (void)c; | |
| 2312 GLenum target = static_cast<GLenum>(c.target); | 2271 GLenum target = static_cast<GLenum>(c.target); |
| 2313 GLenum pname = static_cast<GLenum>(c.pname); | 2272 GLenum pname = static_cast<GLenum>(c.pname); |
| 2314 typedef cmds::GetTexParameteriv::Result Result; | 2273 typedef cmds::GetTexParameteriv::Result Result; |
| 2315 GLsizei num_values = 0; | 2274 GLsizei num_values = 0; |
| 2316 GetNumValuesReturnedForGLGet(pname, &num_values); | 2275 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 2317 Result* result = GetSharedMemoryAs<Result*>( | 2276 Result* result = GetSharedMemoryAs<Result*>( |
| 2318 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 2277 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 2319 GLint* params = result ? result->GetData() : NULL; | 2278 GLint* params = result ? result->GetData() : NULL; |
| 2320 if (!validators_->get_tex_param_target.IsValid(target)) { | 2279 if (!validators_->get_tex_param_target.IsValid(target)) { |
| 2321 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetTexParameteriv", target, "target"); | 2280 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetTexParameteriv", target, "target"); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2336 DoGetTexParameteriv(target, pname, params); | 2295 DoGetTexParameteriv(target, pname, params); |
| 2337 GLenum error = LOCAL_PEEK_GL_ERROR("GetTexParameteriv"); | 2296 GLenum error = LOCAL_PEEK_GL_ERROR("GetTexParameteriv"); |
| 2338 if (error == GL_NO_ERROR) { | 2297 if (error == GL_NO_ERROR) { |
| 2339 result->SetNumResults(num_values); | 2298 result->SetNumResults(num_values); |
| 2340 } | 2299 } |
| 2341 return error::kNoError; | 2300 return error::kNoError; |
| 2342 } | 2301 } |
| 2343 | 2302 |
| 2344 error::Error GLES2DecoderImpl::HandleGetVertexAttribfv( | 2303 error::Error GLES2DecoderImpl::HandleGetVertexAttribfv( |
| 2345 uint32_t immediate_data_size, | 2304 uint32_t immediate_data_size, |
| 2346 const void* cmd_data) { | 2305 const volatile void* cmd_data) { |
| 2347 const gles2::cmds::GetVertexAttribfv& c = | 2306 const volatile gles2::cmds::GetVertexAttribfv& c = |
| 2348 *static_cast<const gles2::cmds::GetVertexAttribfv*>(cmd_data); | 2307 *static_cast<const volatile gles2::cmds::GetVertexAttribfv*>(cmd_data); |
| 2349 (void)c; | |
| 2350 GLuint index = static_cast<GLuint>(c.index); | 2308 GLuint index = static_cast<GLuint>(c.index); |
| 2351 GLenum pname = static_cast<GLenum>(c.pname); | 2309 GLenum pname = static_cast<GLenum>(c.pname); |
| 2352 typedef cmds::GetVertexAttribfv::Result Result; | 2310 typedef cmds::GetVertexAttribfv::Result Result; |
| 2353 GLsizei num_values = 0; | 2311 GLsizei num_values = 0; |
| 2354 GetNumValuesReturnedForGLGet(pname, &num_values); | 2312 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 2355 Result* result = GetSharedMemoryAs<Result*>( | 2313 Result* result = GetSharedMemoryAs<Result*>( |
| 2356 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 2314 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 2357 GLfloat* params = result ? result->GetData() : NULL; | 2315 GLfloat* params = result ? result->GetData() : NULL; |
| 2358 if (!validators_->vertex_attribute.IsValid(pname)) { | 2316 if (!validators_->vertex_attribute.IsValid(pname)) { |
| 2359 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribfv", pname, "pname"); | 2317 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribfv", pname, "pname"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2370 DoGetVertexAttribfv(index, pname, params); | 2328 DoGetVertexAttribfv(index, pname, params); |
| 2371 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribfv"); | 2329 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribfv"); |
| 2372 if (error == GL_NO_ERROR) { | 2330 if (error == GL_NO_ERROR) { |
| 2373 result->SetNumResults(num_values); | 2331 result->SetNumResults(num_values); |
| 2374 } | 2332 } |
| 2375 return error::kNoError; | 2333 return error::kNoError; |
| 2376 } | 2334 } |
| 2377 | 2335 |
| 2378 error::Error GLES2DecoderImpl::HandleGetVertexAttribiv( | 2336 error::Error GLES2DecoderImpl::HandleGetVertexAttribiv( |
| 2379 uint32_t immediate_data_size, | 2337 uint32_t immediate_data_size, |
| 2380 const void* cmd_data) { | 2338 const volatile void* cmd_data) { |
| 2381 const gles2::cmds::GetVertexAttribiv& c = | 2339 const volatile gles2::cmds::GetVertexAttribiv& c = |
| 2382 *static_cast<const gles2::cmds::GetVertexAttribiv*>(cmd_data); | 2340 *static_cast<const volatile gles2::cmds::GetVertexAttribiv*>(cmd_data); |
| 2383 (void)c; | |
| 2384 GLuint index = static_cast<GLuint>(c.index); | 2341 GLuint index = static_cast<GLuint>(c.index); |
| 2385 GLenum pname = static_cast<GLenum>(c.pname); | 2342 GLenum pname = static_cast<GLenum>(c.pname); |
| 2386 typedef cmds::GetVertexAttribiv::Result Result; | 2343 typedef cmds::GetVertexAttribiv::Result Result; |
| 2387 GLsizei num_values = 0; | 2344 GLsizei num_values = 0; |
| 2388 GetNumValuesReturnedForGLGet(pname, &num_values); | 2345 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 2389 Result* result = GetSharedMemoryAs<Result*>( | 2346 Result* result = GetSharedMemoryAs<Result*>( |
| 2390 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 2347 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 2391 GLint* params = result ? result->GetData() : NULL; | 2348 GLint* params = result ? result->GetData() : NULL; |
| 2392 if (!validators_->vertex_attribute.IsValid(pname)) { | 2349 if (!validators_->vertex_attribute.IsValid(pname)) { |
| 2393 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribiv", pname, "pname"); | 2350 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribiv", pname, "pname"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2404 DoGetVertexAttribiv(index, pname, params); | 2361 DoGetVertexAttribiv(index, pname, params); |
| 2405 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribiv"); | 2362 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribiv"); |
| 2406 if (error == GL_NO_ERROR) { | 2363 if (error == GL_NO_ERROR) { |
| 2407 result->SetNumResults(num_values); | 2364 result->SetNumResults(num_values); |
| 2408 } | 2365 } |
| 2409 return error::kNoError; | 2366 return error::kNoError; |
| 2410 } | 2367 } |
| 2411 | 2368 |
| 2412 error::Error GLES2DecoderImpl::HandleGetVertexAttribIiv( | 2369 error::Error GLES2DecoderImpl::HandleGetVertexAttribIiv( |
| 2413 uint32_t immediate_data_size, | 2370 uint32_t immediate_data_size, |
| 2414 const void* cmd_data) { | 2371 const volatile void* cmd_data) { |
| 2415 if (!unsafe_es3_apis_enabled()) | 2372 if (!unsafe_es3_apis_enabled()) |
| 2416 return error::kUnknownCommand; | 2373 return error::kUnknownCommand; |
| 2417 const gles2::cmds::GetVertexAttribIiv& c = | 2374 const volatile gles2::cmds::GetVertexAttribIiv& c = |
| 2418 *static_cast<const gles2::cmds::GetVertexAttribIiv*>(cmd_data); | 2375 *static_cast<const volatile gles2::cmds::GetVertexAttribIiv*>(cmd_data); |
| 2419 (void)c; | |
| 2420 GLuint index = static_cast<GLuint>(c.index); | 2376 GLuint index = static_cast<GLuint>(c.index); |
| 2421 GLenum pname = static_cast<GLenum>(c.pname); | 2377 GLenum pname = static_cast<GLenum>(c.pname); |
| 2422 typedef cmds::GetVertexAttribIiv::Result Result; | 2378 typedef cmds::GetVertexAttribIiv::Result Result; |
| 2423 GLsizei num_values = 0; | 2379 GLsizei num_values = 0; |
| 2424 GetNumValuesReturnedForGLGet(pname, &num_values); | 2380 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 2425 Result* result = GetSharedMemoryAs<Result*>( | 2381 Result* result = GetSharedMemoryAs<Result*>( |
| 2426 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 2382 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 2427 GLint* params = result ? result->GetData() : NULL; | 2383 GLint* params = result ? result->GetData() : NULL; |
| 2428 if (!validators_->vertex_attribute.IsValid(pname)) { | 2384 if (!validators_->vertex_attribute.IsValid(pname)) { |
| 2429 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribIiv", pname, "pname"); | 2385 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribIiv", pname, "pname"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2440 DoGetVertexAttribIiv(index, pname, params); | 2396 DoGetVertexAttribIiv(index, pname, params); |
| 2441 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribIiv"); | 2397 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribIiv"); |
| 2442 if (error == GL_NO_ERROR) { | 2398 if (error == GL_NO_ERROR) { |
| 2443 result->SetNumResults(num_values); | 2399 result->SetNumResults(num_values); |
| 2444 } | 2400 } |
| 2445 return error::kNoError; | 2401 return error::kNoError; |
| 2446 } | 2402 } |
| 2447 | 2403 |
| 2448 error::Error GLES2DecoderImpl::HandleGetVertexAttribIuiv( | 2404 error::Error GLES2DecoderImpl::HandleGetVertexAttribIuiv( |
| 2449 uint32_t immediate_data_size, | 2405 uint32_t immediate_data_size, |
| 2450 const void* cmd_data) { | 2406 const volatile void* cmd_data) { |
| 2451 if (!unsafe_es3_apis_enabled()) | 2407 if (!unsafe_es3_apis_enabled()) |
| 2452 return error::kUnknownCommand; | 2408 return error::kUnknownCommand; |
| 2453 const gles2::cmds::GetVertexAttribIuiv& c = | 2409 const volatile gles2::cmds::GetVertexAttribIuiv& c = |
| 2454 *static_cast<const gles2::cmds::GetVertexAttribIuiv*>(cmd_data); | 2410 *static_cast<const volatile gles2::cmds::GetVertexAttribIuiv*>(cmd_data); |
| 2455 (void)c; | |
| 2456 GLuint index = static_cast<GLuint>(c.index); | 2411 GLuint index = static_cast<GLuint>(c.index); |
| 2457 GLenum pname = static_cast<GLenum>(c.pname); | 2412 GLenum pname = static_cast<GLenum>(c.pname); |
| 2458 typedef cmds::GetVertexAttribIuiv::Result Result; | 2413 typedef cmds::GetVertexAttribIuiv::Result Result; |
| 2459 GLsizei num_values = 0; | 2414 GLsizei num_values = 0; |
| 2460 GetNumValuesReturnedForGLGet(pname, &num_values); | 2415 GetNumValuesReturnedForGLGet(pname, &num_values); |
| 2461 Result* result = GetSharedMemoryAs<Result*>( | 2416 Result* result = GetSharedMemoryAs<Result*>( |
| 2462 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); | 2417 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); |
| 2463 GLuint* params = result ? result->GetData() : NULL; | 2418 GLuint* params = result ? result->GetData() : NULL; |
| 2464 if (!validators_->vertex_attribute.IsValid(pname)) { | 2419 if (!validators_->vertex_attribute.IsValid(pname)) { |
| 2465 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribIuiv", pname, "pname"); | 2420 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribIuiv", pname, "pname"); |
| 2466 return error::kNoError; | 2421 return error::kNoError; |
| 2467 } | 2422 } |
| 2468 if (params == NULL) { | 2423 if (params == NULL) { |
| 2469 return error::kOutOfBounds; | 2424 return error::kOutOfBounds; |
| 2470 } | 2425 } |
| 2471 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetVertexAttribIuiv"); | 2426 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetVertexAttribIuiv"); |
| 2472 // Check that the client initialized the result. | 2427 // Check that the client initialized the result. |
| 2473 if (result->size != 0) { | 2428 if (result->size != 0) { |
| 2474 return error::kInvalidArguments; | 2429 return error::kInvalidArguments; |
| 2475 } | 2430 } |
| 2476 DoGetVertexAttribIuiv(index, pname, params); | 2431 DoGetVertexAttribIuiv(index, pname, params); |
| 2477 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribIuiv"); | 2432 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribIuiv"); |
| 2478 if (error == GL_NO_ERROR) { | 2433 if (error == GL_NO_ERROR) { |
| 2479 result->SetNumResults(num_values); | 2434 result->SetNumResults(num_values); |
| 2480 } | 2435 } |
| 2481 return error::kNoError; | 2436 return error::kNoError; |
| 2482 } | 2437 } |
| 2483 | 2438 |
| 2484 error::Error GLES2DecoderImpl::HandleHint(uint32_t immediate_data_size, | 2439 error::Error GLES2DecoderImpl::HandleHint(uint32_t immediate_data_size, |
| 2485 const void* cmd_data) { | 2440 const volatile void* cmd_data) { |
| 2486 const gles2::cmds::Hint& c = *static_cast<const gles2::cmds::Hint*>(cmd_data); | 2441 const volatile gles2::cmds::Hint& c = |
| 2487 (void)c; | 2442 *static_cast<const volatile gles2::cmds::Hint*>(cmd_data); |
| 2488 GLenum target = static_cast<GLenum>(c.target); | 2443 GLenum target = static_cast<GLenum>(c.target); |
| 2489 GLenum mode = static_cast<GLenum>(c.mode); | 2444 GLenum mode = static_cast<GLenum>(c.mode); |
| 2490 if (!validators_->hint_target.IsValid(target)) { | 2445 if (!validators_->hint_target.IsValid(target)) { |
| 2491 LOCAL_SET_GL_ERROR_INVALID_ENUM("glHint", target, "target"); | 2446 LOCAL_SET_GL_ERROR_INVALID_ENUM("glHint", target, "target"); |
| 2492 return error::kNoError; | 2447 return error::kNoError; |
| 2493 } | 2448 } |
| 2494 if (!validators_->hint_mode.IsValid(mode)) { | 2449 if (!validators_->hint_mode.IsValid(mode)) { |
| 2495 LOCAL_SET_GL_ERROR_INVALID_ENUM("glHint", mode, "mode"); | 2450 LOCAL_SET_GL_ERROR_INVALID_ENUM("glHint", mode, "mode"); |
| 2496 return error::kNoError; | 2451 return error::kNoError; |
| 2497 } | 2452 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2513 } | 2468 } |
| 2514 break; | 2469 break; |
| 2515 default: | 2470 default: |
| 2516 NOTREACHED(); | 2471 NOTREACHED(); |
| 2517 } | 2472 } |
| 2518 return error::kNoError; | 2473 return error::kNoError; |
| 2519 } | 2474 } |
| 2520 | 2475 |
| 2521 error::Error GLES2DecoderImpl::HandleInvalidateFramebufferImmediate( | 2476 error::Error GLES2DecoderImpl::HandleInvalidateFramebufferImmediate( |
| 2522 uint32_t immediate_data_size, | 2477 uint32_t immediate_data_size, |
| 2523 const void* cmd_data) { | 2478 const volatile void* cmd_data) { |
| 2524 if (!unsafe_es3_apis_enabled()) | 2479 if (!unsafe_es3_apis_enabled()) |
| 2525 return error::kUnknownCommand; | 2480 return error::kUnknownCommand; |
| 2526 const gles2::cmds::InvalidateFramebufferImmediate& c = | 2481 const volatile gles2::cmds::InvalidateFramebufferImmediate& c = |
| 2527 *static_cast<const gles2::cmds::InvalidateFramebufferImmediate*>( | 2482 *static_cast<const volatile gles2::cmds::InvalidateFramebufferImmediate*>( |
| 2528 cmd_data); | 2483 cmd_data); |
| 2529 (void)c; | |
| 2530 GLenum target = static_cast<GLenum>(c.target); | 2484 GLenum target = static_cast<GLenum>(c.target); |
| 2531 GLsizei count = static_cast<GLsizei>(c.count); | 2485 GLsizei count = static_cast<GLsizei>(c.count); |
| 2532 uint32_t data_size = 0; | 2486 uint32_t data_size = 0; |
| 2533 if (count >= 0 && | 2487 if (count >= 0 && |
| 2534 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { | 2488 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { |
| 2535 return error::kOutOfBounds; | 2489 return error::kOutOfBounds; |
| 2536 } | 2490 } |
| 2537 if (data_size > immediate_data_size) { | 2491 if (data_size > immediate_data_size) { |
| 2538 return error::kOutOfBounds; | 2492 return error::kOutOfBounds; |
| 2539 } | 2493 } |
| 2540 const GLenum* attachments = | 2494 volatile const GLenum* attachments = |
| 2541 GetImmediateDataAs<const GLenum*>(c, data_size, immediate_data_size); | 2495 GetImmediateDataAs<volatile const GLenum*>(c, data_size, |
| 2496 immediate_data_size); |
| 2542 if (!validators_->framebuffer_target.IsValid(target)) { | 2497 if (!validators_->framebuffer_target.IsValid(target)) { |
| 2543 LOCAL_SET_GL_ERROR_INVALID_ENUM("glInvalidateFramebuffer", target, | 2498 LOCAL_SET_GL_ERROR_INVALID_ENUM("glInvalidateFramebuffer", target, |
| 2544 "target"); | 2499 "target"); |
| 2545 return error::kNoError; | 2500 return error::kNoError; |
| 2546 } | 2501 } |
| 2547 if (count < 0) { | 2502 if (count < 0) { |
| 2548 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glInvalidateFramebuffer", | 2503 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glInvalidateFramebuffer", |
| 2549 "count < 0"); | 2504 "count < 0"); |
| 2550 return error::kNoError; | 2505 return error::kNoError; |
| 2551 } | 2506 } |
| 2552 if (attachments == NULL) { | 2507 if (attachments == NULL) { |
| 2553 return error::kOutOfBounds; | 2508 return error::kOutOfBounds; |
| 2554 } | 2509 } |
| 2555 DoInvalidateFramebuffer(target, count, attachments); | 2510 DoInvalidateFramebuffer(target, count, attachments); |
| 2556 return error::kNoError; | 2511 return error::kNoError; |
| 2557 } | 2512 } |
| 2558 | 2513 |
| 2559 error::Error GLES2DecoderImpl::HandleInvalidateSubFramebufferImmediate( | 2514 error::Error GLES2DecoderImpl::HandleInvalidateSubFramebufferImmediate( |
| 2560 uint32_t immediate_data_size, | 2515 uint32_t immediate_data_size, |
| 2561 const void* cmd_data) { | 2516 const volatile void* cmd_data) { |
| 2562 if (!unsafe_es3_apis_enabled()) | 2517 if (!unsafe_es3_apis_enabled()) |
| 2563 return error::kUnknownCommand; | 2518 return error::kUnknownCommand; |
| 2564 const gles2::cmds::InvalidateSubFramebufferImmediate& c = | 2519 const volatile gles2::cmds::InvalidateSubFramebufferImmediate& c = |
| 2565 *static_cast<const gles2::cmds::InvalidateSubFramebufferImmediate*>( | 2520 *static_cast< |
| 2521 const volatile gles2::cmds::InvalidateSubFramebufferImmediate*>( |
| 2566 cmd_data); | 2522 cmd_data); |
| 2567 (void)c; | |
| 2568 GLenum target = static_cast<GLenum>(c.target); | 2523 GLenum target = static_cast<GLenum>(c.target); |
| 2569 GLsizei count = static_cast<GLsizei>(c.count); | 2524 GLsizei count = static_cast<GLsizei>(c.count); |
| 2570 uint32_t data_size = 0; | 2525 uint32_t data_size = 0; |
| 2571 if (count >= 0 && | 2526 if (count >= 0 && |
| 2572 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { | 2527 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { |
| 2573 return error::kOutOfBounds; | 2528 return error::kOutOfBounds; |
| 2574 } | 2529 } |
| 2575 if (data_size > immediate_data_size) { | 2530 if (data_size > immediate_data_size) { |
| 2576 return error::kOutOfBounds; | 2531 return error::kOutOfBounds; |
| 2577 } | 2532 } |
| 2578 const GLenum* attachments = | 2533 volatile const GLenum* attachments = |
| 2579 GetImmediateDataAs<const GLenum*>(c, data_size, immediate_data_size); | 2534 GetImmediateDataAs<volatile const GLenum*>(c, data_size, |
| 2535 immediate_data_size); |
| 2580 GLint x = static_cast<GLint>(c.x); | 2536 GLint x = static_cast<GLint>(c.x); |
| 2581 GLint y = static_cast<GLint>(c.y); | 2537 GLint y = static_cast<GLint>(c.y); |
| 2582 GLsizei width = static_cast<GLsizei>(c.width); | 2538 GLsizei width = static_cast<GLsizei>(c.width); |
| 2583 GLsizei height = static_cast<GLsizei>(c.height); | 2539 GLsizei height = static_cast<GLsizei>(c.height); |
| 2584 if (!validators_->framebuffer_target.IsValid(target)) { | 2540 if (!validators_->framebuffer_target.IsValid(target)) { |
| 2585 LOCAL_SET_GL_ERROR_INVALID_ENUM("glInvalidateSubFramebuffer", target, | 2541 LOCAL_SET_GL_ERROR_INVALID_ENUM("glInvalidateSubFramebuffer", target, |
| 2586 "target"); | 2542 "target"); |
| 2587 return error::kNoError; | 2543 return error::kNoError; |
| 2588 } | 2544 } |
| 2589 if (count < 0) { | 2545 if (count < 0) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2602 if (height < 0) { | 2558 if (height < 0) { |
| 2603 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glInvalidateSubFramebuffer", | 2559 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glInvalidateSubFramebuffer", |
| 2604 "height < 0"); | 2560 "height < 0"); |
| 2605 return error::kNoError; | 2561 return error::kNoError; |
| 2606 } | 2562 } |
| 2607 DoInvalidateSubFramebuffer(target, count, attachments, x, y, width, height); | 2563 DoInvalidateSubFramebuffer(target, count, attachments, x, y, width, height); |
| 2608 return error::kNoError; | 2564 return error::kNoError; |
| 2609 } | 2565 } |
| 2610 | 2566 |
| 2611 error::Error GLES2DecoderImpl::HandleIsBuffer(uint32_t immediate_data_size, | 2567 error::Error GLES2DecoderImpl::HandleIsBuffer(uint32_t immediate_data_size, |
| 2612 const void* cmd_data) { | 2568 const volatile void* cmd_data) { |
| 2613 const gles2::cmds::IsBuffer& c = | 2569 const volatile gles2::cmds::IsBuffer& c = |
| 2614 *static_cast<const gles2::cmds::IsBuffer*>(cmd_data); | 2570 *static_cast<const volatile gles2::cmds::IsBuffer*>(cmd_data); |
| 2615 (void)c; | |
| 2616 GLuint buffer = c.buffer; | 2571 GLuint buffer = c.buffer; |
| 2617 typedef cmds::IsBuffer::Result Result; | 2572 typedef cmds::IsBuffer::Result Result; |
| 2618 Result* result_dst = GetSharedMemoryAs<Result*>( | 2573 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 2619 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 2574 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 2620 if (!result_dst) { | 2575 if (!result_dst) { |
| 2621 return error::kOutOfBounds; | 2576 return error::kOutOfBounds; |
| 2622 } | 2577 } |
| 2623 *result_dst = DoIsBuffer(buffer); | 2578 *result_dst = DoIsBuffer(buffer); |
| 2624 return error::kNoError; | 2579 return error::kNoError; |
| 2625 } | 2580 } |
| 2626 | 2581 |
| 2627 error::Error GLES2DecoderImpl::HandleIsEnabled(uint32_t immediate_data_size, | 2582 error::Error GLES2DecoderImpl::HandleIsEnabled(uint32_t immediate_data_size, |
| 2628 const void* cmd_data) { | 2583 const volatile void* cmd_data) { |
| 2629 const gles2::cmds::IsEnabled& c = | 2584 const volatile gles2::cmds::IsEnabled& c = |
| 2630 *static_cast<const gles2::cmds::IsEnabled*>(cmd_data); | 2585 *static_cast<const volatile gles2::cmds::IsEnabled*>(cmd_data); |
| 2631 (void)c; | |
| 2632 GLenum cap = static_cast<GLenum>(c.cap); | 2586 GLenum cap = static_cast<GLenum>(c.cap); |
| 2633 typedef cmds::IsEnabled::Result Result; | 2587 typedef cmds::IsEnabled::Result Result; |
| 2634 Result* result_dst = GetSharedMemoryAs<Result*>( | 2588 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 2635 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 2589 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 2636 if (!result_dst) { | 2590 if (!result_dst) { |
| 2637 return error::kOutOfBounds; | 2591 return error::kOutOfBounds; |
| 2638 } | 2592 } |
| 2639 if (!validators_->capability.IsValid(cap)) { | 2593 if (!validators_->capability.IsValid(cap)) { |
| 2640 LOCAL_SET_GL_ERROR_INVALID_ENUM("glIsEnabled", cap, "cap"); | 2594 LOCAL_SET_GL_ERROR_INVALID_ENUM("glIsEnabled", cap, "cap"); |
| 2641 return error::kNoError; | 2595 return error::kNoError; |
| 2642 } | 2596 } |
| 2643 *result_dst = DoIsEnabled(cap); | 2597 *result_dst = DoIsEnabled(cap); |
| 2644 return error::kNoError; | 2598 return error::kNoError; |
| 2645 } | 2599 } |
| 2646 | 2600 |
| 2647 error::Error GLES2DecoderImpl::HandleIsFramebuffer(uint32_t immediate_data_size, | 2601 error::Error GLES2DecoderImpl::HandleIsFramebuffer( |
| 2648 const void* cmd_data) { | 2602 uint32_t immediate_data_size, |
| 2649 const gles2::cmds::IsFramebuffer& c = | 2603 const volatile void* cmd_data) { |
| 2650 *static_cast<const gles2::cmds::IsFramebuffer*>(cmd_data); | 2604 const volatile gles2::cmds::IsFramebuffer& c = |
| 2651 (void)c; | 2605 *static_cast<const volatile gles2::cmds::IsFramebuffer*>(cmd_data); |
| 2652 GLuint framebuffer = c.framebuffer; | 2606 GLuint framebuffer = c.framebuffer; |
| 2653 typedef cmds::IsFramebuffer::Result Result; | 2607 typedef cmds::IsFramebuffer::Result Result; |
| 2654 Result* result_dst = GetSharedMemoryAs<Result*>( | 2608 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 2655 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 2609 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 2656 if (!result_dst) { | 2610 if (!result_dst) { |
| 2657 return error::kOutOfBounds; | 2611 return error::kOutOfBounds; |
| 2658 } | 2612 } |
| 2659 *result_dst = DoIsFramebuffer(framebuffer); | 2613 *result_dst = DoIsFramebuffer(framebuffer); |
| 2660 return error::kNoError; | 2614 return error::kNoError; |
| 2661 } | 2615 } |
| 2662 | 2616 |
| 2663 error::Error GLES2DecoderImpl::HandleIsProgram(uint32_t immediate_data_size, | 2617 error::Error GLES2DecoderImpl::HandleIsProgram(uint32_t immediate_data_size, |
| 2664 const void* cmd_data) { | 2618 const volatile void* cmd_data) { |
| 2665 const gles2::cmds::IsProgram& c = | 2619 const volatile gles2::cmds::IsProgram& c = |
| 2666 *static_cast<const gles2::cmds::IsProgram*>(cmd_data); | 2620 *static_cast<const volatile gles2::cmds::IsProgram*>(cmd_data); |
| 2667 (void)c; | |
| 2668 GLuint program = c.program; | 2621 GLuint program = c.program; |
| 2669 typedef cmds::IsProgram::Result Result; | 2622 typedef cmds::IsProgram::Result Result; |
| 2670 Result* result_dst = GetSharedMemoryAs<Result*>( | 2623 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 2671 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 2624 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 2672 if (!result_dst) { | 2625 if (!result_dst) { |
| 2673 return error::kOutOfBounds; | 2626 return error::kOutOfBounds; |
| 2674 } | 2627 } |
| 2675 *result_dst = DoIsProgram(program); | 2628 *result_dst = DoIsProgram(program); |
| 2676 return error::kNoError; | 2629 return error::kNoError; |
| 2677 } | 2630 } |
| 2678 | 2631 |
| 2679 error::Error GLES2DecoderImpl::HandleIsRenderbuffer( | 2632 error::Error GLES2DecoderImpl::HandleIsRenderbuffer( |
| 2680 uint32_t immediate_data_size, | 2633 uint32_t immediate_data_size, |
| 2681 const void* cmd_data) { | 2634 const volatile void* cmd_data) { |
| 2682 const gles2::cmds::IsRenderbuffer& c = | 2635 const volatile gles2::cmds::IsRenderbuffer& c = |
| 2683 *static_cast<const gles2::cmds::IsRenderbuffer*>(cmd_data); | 2636 *static_cast<const volatile gles2::cmds::IsRenderbuffer*>(cmd_data); |
| 2684 (void)c; | |
| 2685 GLuint renderbuffer = c.renderbuffer; | 2637 GLuint renderbuffer = c.renderbuffer; |
| 2686 typedef cmds::IsRenderbuffer::Result Result; | 2638 typedef cmds::IsRenderbuffer::Result Result; |
| 2687 Result* result_dst = GetSharedMemoryAs<Result*>( | 2639 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 2688 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 2640 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 2689 if (!result_dst) { | 2641 if (!result_dst) { |
| 2690 return error::kOutOfBounds; | 2642 return error::kOutOfBounds; |
| 2691 } | 2643 } |
| 2692 *result_dst = DoIsRenderbuffer(renderbuffer); | 2644 *result_dst = DoIsRenderbuffer(renderbuffer); |
| 2693 return error::kNoError; | 2645 return error::kNoError; |
| 2694 } | 2646 } |
| 2695 | 2647 |
| 2696 error::Error GLES2DecoderImpl::HandleIsSampler(uint32_t immediate_data_size, | 2648 error::Error GLES2DecoderImpl::HandleIsSampler(uint32_t immediate_data_size, |
| 2697 const void* cmd_data) { | 2649 const volatile void* cmd_data) { |
| 2698 if (!unsafe_es3_apis_enabled()) | 2650 if (!unsafe_es3_apis_enabled()) |
| 2699 return error::kUnknownCommand; | 2651 return error::kUnknownCommand; |
| 2700 const gles2::cmds::IsSampler& c = | 2652 const volatile gles2::cmds::IsSampler& c = |
| 2701 *static_cast<const gles2::cmds::IsSampler*>(cmd_data); | 2653 *static_cast<const volatile gles2::cmds::IsSampler*>(cmd_data); |
| 2702 (void)c; | |
| 2703 GLuint sampler = c.sampler; | 2654 GLuint sampler = c.sampler; |
| 2704 typedef cmds::IsSampler::Result Result; | 2655 typedef cmds::IsSampler::Result Result; |
| 2705 Result* result_dst = GetSharedMemoryAs<Result*>( | 2656 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 2706 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 2657 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 2707 if (!result_dst) { | 2658 if (!result_dst) { |
| 2708 return error::kOutOfBounds; | 2659 return error::kOutOfBounds; |
| 2709 } | 2660 } |
| 2710 *result_dst = DoIsSampler(sampler); | 2661 *result_dst = DoIsSampler(sampler); |
| 2711 return error::kNoError; | 2662 return error::kNoError; |
| 2712 } | 2663 } |
| 2713 | 2664 |
| 2714 error::Error GLES2DecoderImpl::HandleIsShader(uint32_t immediate_data_size, | 2665 error::Error GLES2DecoderImpl::HandleIsShader(uint32_t immediate_data_size, |
| 2715 const void* cmd_data) { | 2666 const volatile void* cmd_data) { |
| 2716 const gles2::cmds::IsShader& c = | 2667 const volatile gles2::cmds::IsShader& c = |
| 2717 *static_cast<const gles2::cmds::IsShader*>(cmd_data); | 2668 *static_cast<const volatile gles2::cmds::IsShader*>(cmd_data); |
| 2718 (void)c; | |
| 2719 GLuint shader = c.shader; | 2669 GLuint shader = c.shader; |
| 2720 typedef cmds::IsShader::Result Result; | 2670 typedef cmds::IsShader::Result Result; |
| 2721 Result* result_dst = GetSharedMemoryAs<Result*>( | 2671 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 2722 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 2672 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 2723 if (!result_dst) { | 2673 if (!result_dst) { |
| 2724 return error::kOutOfBounds; | 2674 return error::kOutOfBounds; |
| 2725 } | 2675 } |
| 2726 *result_dst = DoIsShader(shader); | 2676 *result_dst = DoIsShader(shader); |
| 2727 return error::kNoError; | 2677 return error::kNoError; |
| 2728 } | 2678 } |
| 2729 | 2679 |
| 2730 error::Error GLES2DecoderImpl::HandleIsSync(uint32_t immediate_data_size, | 2680 error::Error GLES2DecoderImpl::HandleIsSync(uint32_t immediate_data_size, |
| 2731 const void* cmd_data) { | 2681 const volatile void* cmd_data) { |
| 2732 if (!unsafe_es3_apis_enabled()) | 2682 if (!unsafe_es3_apis_enabled()) |
| 2733 return error::kUnknownCommand; | 2683 return error::kUnknownCommand; |
| 2734 const gles2::cmds::IsSync& c = | 2684 const volatile gles2::cmds::IsSync& c = |
| 2735 *static_cast<const gles2::cmds::IsSync*>(cmd_data); | 2685 *static_cast<const volatile gles2::cmds::IsSync*>(cmd_data); |
| 2736 (void)c; | |
| 2737 GLuint sync = c.sync; | 2686 GLuint sync = c.sync; |
| 2738 typedef cmds::IsSync::Result Result; | 2687 typedef cmds::IsSync::Result Result; |
| 2739 Result* result_dst = GetSharedMemoryAs<Result*>( | 2688 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 2740 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 2689 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 2741 if (!result_dst) { | 2690 if (!result_dst) { |
| 2742 return error::kOutOfBounds; | 2691 return error::kOutOfBounds; |
| 2743 } | 2692 } |
| 2744 *result_dst = DoIsSync(sync); | 2693 *result_dst = DoIsSync(sync); |
| 2745 return error::kNoError; | 2694 return error::kNoError; |
| 2746 } | 2695 } |
| 2747 | 2696 |
| 2748 error::Error GLES2DecoderImpl::HandleIsTexture(uint32_t immediate_data_size, | 2697 error::Error GLES2DecoderImpl::HandleIsTexture(uint32_t immediate_data_size, |
| 2749 const void* cmd_data) { | 2698 const volatile void* cmd_data) { |
| 2750 const gles2::cmds::IsTexture& c = | 2699 const volatile gles2::cmds::IsTexture& c = |
| 2751 *static_cast<const gles2::cmds::IsTexture*>(cmd_data); | 2700 *static_cast<const volatile gles2::cmds::IsTexture*>(cmd_data); |
| 2752 (void)c; | |
| 2753 GLuint texture = c.texture; | 2701 GLuint texture = c.texture; |
| 2754 typedef cmds::IsTexture::Result Result; | 2702 typedef cmds::IsTexture::Result Result; |
| 2755 Result* result_dst = GetSharedMemoryAs<Result*>( | 2703 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 2756 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 2704 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 2757 if (!result_dst) { | 2705 if (!result_dst) { |
| 2758 return error::kOutOfBounds; | 2706 return error::kOutOfBounds; |
| 2759 } | 2707 } |
| 2760 *result_dst = DoIsTexture(texture); | 2708 *result_dst = DoIsTexture(texture); |
| 2761 return error::kNoError; | 2709 return error::kNoError; |
| 2762 } | 2710 } |
| 2763 | 2711 |
| 2764 error::Error GLES2DecoderImpl::HandleIsTransformFeedback( | 2712 error::Error GLES2DecoderImpl::HandleIsTransformFeedback( |
| 2765 uint32_t immediate_data_size, | 2713 uint32_t immediate_data_size, |
| 2766 const void* cmd_data) { | 2714 const volatile void* cmd_data) { |
| 2767 if (!unsafe_es3_apis_enabled()) | 2715 if (!unsafe_es3_apis_enabled()) |
| 2768 return error::kUnknownCommand; | 2716 return error::kUnknownCommand; |
| 2769 const gles2::cmds::IsTransformFeedback& c = | 2717 const volatile gles2::cmds::IsTransformFeedback& c = |
| 2770 *static_cast<const gles2::cmds::IsTransformFeedback*>(cmd_data); | 2718 *static_cast<const volatile gles2::cmds::IsTransformFeedback*>(cmd_data); |
| 2771 (void)c; | |
| 2772 GLuint transformfeedback = c.transformfeedback; | 2719 GLuint transformfeedback = c.transformfeedback; |
| 2773 typedef cmds::IsTransformFeedback::Result Result; | 2720 typedef cmds::IsTransformFeedback::Result Result; |
| 2774 Result* result_dst = GetSharedMemoryAs<Result*>( | 2721 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 2775 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 2722 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 2776 if (!result_dst) { | 2723 if (!result_dst) { |
| 2777 return error::kOutOfBounds; | 2724 return error::kOutOfBounds; |
| 2778 } | 2725 } |
| 2779 *result_dst = DoIsTransformFeedback(transformfeedback); | 2726 *result_dst = DoIsTransformFeedback(transformfeedback); |
| 2780 return error::kNoError; | 2727 return error::kNoError; |
| 2781 } | 2728 } |
| 2782 | 2729 |
| 2783 error::Error GLES2DecoderImpl::HandleLineWidth(uint32_t immediate_data_size, | 2730 error::Error GLES2DecoderImpl::HandleLineWidth(uint32_t immediate_data_size, |
| 2784 const void* cmd_data) { | 2731 const volatile void* cmd_data) { |
| 2785 const gles2::cmds::LineWidth& c = | 2732 const volatile gles2::cmds::LineWidth& c = |
| 2786 *static_cast<const gles2::cmds::LineWidth*>(cmd_data); | 2733 *static_cast<const volatile gles2::cmds::LineWidth*>(cmd_data); |
| 2787 (void)c; | |
| 2788 GLfloat width = static_cast<GLfloat>(c.width); | 2734 GLfloat width = static_cast<GLfloat>(c.width); |
| 2789 if (width <= 0.0f || std::isnan(width)) { | 2735 if (width <= 0.0f || std::isnan(width)) { |
| 2790 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "LineWidth", "width out of range"); | 2736 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "LineWidth", "width out of range"); |
| 2791 return error::kNoError; | 2737 return error::kNoError; |
| 2792 } | 2738 } |
| 2793 if (state_.line_width != width) { | 2739 if (state_.line_width != width) { |
| 2794 state_.line_width = width; | 2740 state_.line_width = width; |
| 2795 DoLineWidth(width); | 2741 DoLineWidth(width); |
| 2796 } | 2742 } |
| 2797 return error::kNoError; | 2743 return error::kNoError; |
| 2798 } | 2744 } |
| 2799 | 2745 |
| 2800 error::Error GLES2DecoderImpl::HandleLinkProgram(uint32_t immediate_data_size, | 2746 error::Error GLES2DecoderImpl::HandleLinkProgram( |
| 2801 const void* cmd_data) { | 2747 uint32_t immediate_data_size, |
| 2802 const gles2::cmds::LinkProgram& c = | 2748 const volatile void* cmd_data) { |
| 2803 *static_cast<const gles2::cmds::LinkProgram*>(cmd_data); | 2749 const volatile gles2::cmds::LinkProgram& c = |
| 2804 (void)c; | 2750 *static_cast<const volatile gles2::cmds::LinkProgram*>(cmd_data); |
| 2805 GLuint program = c.program; | 2751 GLuint program = c.program; |
| 2806 DoLinkProgram(program); | 2752 DoLinkProgram(program); |
| 2807 return error::kNoError; | 2753 return error::kNoError; |
| 2808 } | 2754 } |
| 2809 | 2755 |
| 2810 error::Error GLES2DecoderImpl::HandlePauseTransformFeedback( | 2756 error::Error GLES2DecoderImpl::HandlePauseTransformFeedback( |
| 2811 uint32_t immediate_data_size, | 2757 uint32_t immediate_data_size, |
| 2812 const void* cmd_data) { | 2758 const volatile void* cmd_data) { |
| 2813 if (!unsafe_es3_apis_enabled()) | 2759 if (!unsafe_es3_apis_enabled()) |
| 2814 return error::kUnknownCommand; | 2760 return error::kUnknownCommand; |
| 2815 const gles2::cmds::PauseTransformFeedback& c = | |
| 2816 *static_cast<const gles2::cmds::PauseTransformFeedback*>(cmd_data); | |
| 2817 (void)c; | |
| 2818 DoPauseTransformFeedback(); | 2761 DoPauseTransformFeedback(); |
| 2819 return error::kNoError; | 2762 return error::kNoError; |
| 2820 } | 2763 } |
| 2821 | 2764 |
| 2822 error::Error GLES2DecoderImpl::HandlePolygonOffset(uint32_t immediate_data_size, | 2765 error::Error GLES2DecoderImpl::HandlePolygonOffset( |
| 2823 const void* cmd_data) { | 2766 uint32_t immediate_data_size, |
| 2824 const gles2::cmds::PolygonOffset& c = | 2767 const volatile void* cmd_data) { |
| 2825 *static_cast<const gles2::cmds::PolygonOffset*>(cmd_data); | 2768 const volatile gles2::cmds::PolygonOffset& c = |
| 2826 (void)c; | 2769 *static_cast<const volatile gles2::cmds::PolygonOffset*>(cmd_data); |
| 2827 GLfloat factor = static_cast<GLfloat>(c.factor); | 2770 GLfloat factor = static_cast<GLfloat>(c.factor); |
| 2828 GLfloat units = static_cast<GLfloat>(c.units); | 2771 GLfloat units = static_cast<GLfloat>(c.units); |
| 2829 if (state_.polygon_offset_factor != factor || | 2772 if (state_.polygon_offset_factor != factor || |
| 2830 state_.polygon_offset_units != units) { | 2773 state_.polygon_offset_units != units) { |
| 2831 state_.polygon_offset_factor = factor; | 2774 state_.polygon_offset_factor = factor; |
| 2832 state_.polygon_offset_units = units; | 2775 state_.polygon_offset_units = units; |
| 2833 glPolygonOffset(factor, units); | 2776 glPolygonOffset(factor, units); |
| 2834 } | 2777 } |
| 2835 return error::kNoError; | 2778 return error::kNoError; |
| 2836 } | 2779 } |
| 2837 | 2780 |
| 2838 error::Error GLES2DecoderImpl::HandleReadBuffer(uint32_t immediate_data_size, | 2781 error::Error GLES2DecoderImpl::HandleReadBuffer(uint32_t immediate_data_size, |
| 2839 const void* cmd_data) { | 2782 const volatile void* cmd_data) { |
| 2840 if (!unsafe_es3_apis_enabled()) | 2783 if (!unsafe_es3_apis_enabled()) |
| 2841 return error::kUnknownCommand; | 2784 return error::kUnknownCommand; |
| 2842 const gles2::cmds::ReadBuffer& c = | 2785 const volatile gles2::cmds::ReadBuffer& c = |
| 2843 *static_cast<const gles2::cmds::ReadBuffer*>(cmd_data); | 2786 *static_cast<const volatile gles2::cmds::ReadBuffer*>(cmd_data); |
| 2844 (void)c; | |
| 2845 GLenum src = static_cast<GLenum>(c.src); | 2787 GLenum src = static_cast<GLenum>(c.src); |
| 2846 if (!validators_->read_buffer.IsValid(src)) { | 2788 if (!validators_->read_buffer.IsValid(src)) { |
| 2847 LOCAL_SET_GL_ERROR_INVALID_ENUM("glReadBuffer", src, "src"); | 2789 LOCAL_SET_GL_ERROR_INVALID_ENUM("glReadBuffer", src, "src"); |
| 2848 return error::kNoError; | 2790 return error::kNoError; |
| 2849 } | 2791 } |
| 2850 DoReadBuffer(src); | 2792 DoReadBuffer(src); |
| 2851 return error::kNoError; | 2793 return error::kNoError; |
| 2852 } | 2794 } |
| 2853 | 2795 |
| 2854 error::Error GLES2DecoderImpl::HandleReleaseShaderCompiler( | 2796 error::Error GLES2DecoderImpl::HandleReleaseShaderCompiler( |
| 2855 uint32_t immediate_data_size, | 2797 uint32_t immediate_data_size, |
| 2856 const void* cmd_data) { | 2798 const volatile void* cmd_data) { |
| 2857 const gles2::cmds::ReleaseShaderCompiler& c = | |
| 2858 *static_cast<const gles2::cmds::ReleaseShaderCompiler*>(cmd_data); | |
| 2859 (void)c; | |
| 2860 DoReleaseShaderCompiler(); | 2799 DoReleaseShaderCompiler(); |
| 2861 return error::kNoError; | 2800 return error::kNoError; |
| 2862 } | 2801 } |
| 2863 | 2802 |
| 2864 error::Error GLES2DecoderImpl::HandleRenderbufferStorage( | 2803 error::Error GLES2DecoderImpl::HandleRenderbufferStorage( |
| 2865 uint32_t immediate_data_size, | 2804 uint32_t immediate_data_size, |
| 2866 const void* cmd_data) { | 2805 const volatile void* cmd_data) { |
| 2867 const gles2::cmds::RenderbufferStorage& c = | 2806 const volatile gles2::cmds::RenderbufferStorage& c = |
| 2868 *static_cast<const gles2::cmds::RenderbufferStorage*>(cmd_data); | 2807 *static_cast<const volatile gles2::cmds::RenderbufferStorage*>(cmd_data); |
| 2869 (void)c; | |
| 2870 GLenum target = static_cast<GLenum>(c.target); | 2808 GLenum target = static_cast<GLenum>(c.target); |
| 2871 GLenum internalformat = static_cast<GLenum>(c.internalformat); | 2809 GLenum internalformat = static_cast<GLenum>(c.internalformat); |
| 2872 GLsizei width = static_cast<GLsizei>(c.width); | 2810 GLsizei width = static_cast<GLsizei>(c.width); |
| 2873 GLsizei height = static_cast<GLsizei>(c.height); | 2811 GLsizei height = static_cast<GLsizei>(c.height); |
| 2874 if (!validators_->render_buffer_target.IsValid(target)) { | 2812 if (!validators_->render_buffer_target.IsValid(target)) { |
| 2875 LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorage", target, "target"); | 2813 LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorage", target, "target"); |
| 2876 return error::kNoError; | 2814 return error::kNoError; |
| 2877 } | 2815 } |
| 2878 if (!validators_->render_buffer_format.IsValid(internalformat)) { | 2816 if (!validators_->render_buffer_format.IsValid(internalformat)) { |
| 2879 LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorage", internalformat, | 2817 LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorage", internalformat, |
| 2880 "internalformat"); | 2818 "internalformat"); |
| 2881 return error::kNoError; | 2819 return error::kNoError; |
| 2882 } | 2820 } |
| 2883 if (width < 0) { | 2821 if (width < 0) { |
| 2884 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glRenderbufferStorage", "width < 0"); | 2822 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glRenderbufferStorage", "width < 0"); |
| 2885 return error::kNoError; | 2823 return error::kNoError; |
| 2886 } | 2824 } |
| 2887 if (height < 0) { | 2825 if (height < 0) { |
| 2888 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glRenderbufferStorage", "height < 0"); | 2826 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glRenderbufferStorage", "height < 0"); |
| 2889 return error::kNoError; | 2827 return error::kNoError; |
| 2890 } | 2828 } |
| 2891 DoRenderbufferStorage(target, internalformat, width, height); | 2829 DoRenderbufferStorage(target, internalformat, width, height); |
| 2892 return error::kNoError; | 2830 return error::kNoError; |
| 2893 } | 2831 } |
| 2894 | 2832 |
| 2895 error::Error GLES2DecoderImpl::HandleResumeTransformFeedback( | 2833 error::Error GLES2DecoderImpl::HandleResumeTransformFeedback( |
| 2896 uint32_t immediate_data_size, | 2834 uint32_t immediate_data_size, |
| 2897 const void* cmd_data) { | 2835 const volatile void* cmd_data) { |
| 2898 if (!unsafe_es3_apis_enabled()) | 2836 if (!unsafe_es3_apis_enabled()) |
| 2899 return error::kUnknownCommand; | 2837 return error::kUnknownCommand; |
| 2900 const gles2::cmds::ResumeTransformFeedback& c = | |
| 2901 *static_cast<const gles2::cmds::ResumeTransformFeedback*>(cmd_data); | |
| 2902 (void)c; | |
| 2903 DoResumeTransformFeedback(); | 2838 DoResumeTransformFeedback(); |
| 2904 return error::kNoError; | 2839 return error::kNoError; |
| 2905 } | 2840 } |
| 2906 | 2841 |
| 2907 error::Error GLES2DecoderImpl::HandleSampleCoverage( | 2842 error::Error GLES2DecoderImpl::HandleSampleCoverage( |
| 2908 uint32_t immediate_data_size, | 2843 uint32_t immediate_data_size, |
| 2909 const void* cmd_data) { | 2844 const volatile void* cmd_data) { |
| 2910 const gles2::cmds::SampleCoverage& c = | 2845 const volatile gles2::cmds::SampleCoverage& c = |
| 2911 *static_cast<const gles2::cmds::SampleCoverage*>(cmd_data); | 2846 *static_cast<const volatile gles2::cmds::SampleCoverage*>(cmd_data); |
| 2912 (void)c; | |
| 2913 GLclampf value = static_cast<GLclampf>(c.value); | 2847 GLclampf value = static_cast<GLclampf>(c.value); |
| 2914 GLboolean invert = static_cast<GLboolean>(c.invert); | 2848 GLboolean invert = static_cast<GLboolean>(c.invert); |
| 2915 DoSampleCoverage(value, invert); | 2849 DoSampleCoverage(value, invert); |
| 2916 return error::kNoError; | 2850 return error::kNoError; |
| 2917 } | 2851 } |
| 2918 | 2852 |
| 2919 error::Error GLES2DecoderImpl::HandleSamplerParameterf( | 2853 error::Error GLES2DecoderImpl::HandleSamplerParameterf( |
| 2920 uint32_t immediate_data_size, | 2854 uint32_t immediate_data_size, |
| 2921 const void* cmd_data) { | 2855 const volatile void* cmd_data) { |
| 2922 if (!unsafe_es3_apis_enabled()) | 2856 if (!unsafe_es3_apis_enabled()) |
| 2923 return error::kUnknownCommand; | 2857 return error::kUnknownCommand; |
| 2924 const gles2::cmds::SamplerParameterf& c = | 2858 const volatile gles2::cmds::SamplerParameterf& c = |
| 2925 *static_cast<const gles2::cmds::SamplerParameterf*>(cmd_data); | 2859 *static_cast<const volatile gles2::cmds::SamplerParameterf*>(cmd_data); |
| 2926 (void)c; | |
| 2927 GLuint sampler = c.sampler; | 2860 GLuint sampler = c.sampler; |
| 2928 GLenum pname = static_cast<GLenum>(c.pname); | 2861 GLenum pname = static_cast<GLenum>(c.pname); |
| 2929 GLfloat param = static_cast<GLfloat>(c.param); | 2862 GLfloat param = static_cast<GLfloat>(c.param); |
| 2930 if (!validators_->sampler_parameter.IsValid(pname)) { | 2863 if (!validators_->sampler_parameter.IsValid(pname)) { |
| 2931 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameterf", pname, "pname"); | 2864 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameterf", pname, "pname"); |
| 2932 return error::kNoError; | 2865 return error::kNoError; |
| 2933 } | 2866 } |
| 2934 DoSamplerParameterf(sampler, pname, param); | 2867 DoSamplerParameterf(sampler, pname, param); |
| 2935 return error::kNoError; | 2868 return error::kNoError; |
| 2936 } | 2869 } |
| 2937 | 2870 |
| 2938 error::Error GLES2DecoderImpl::HandleSamplerParameterfvImmediate( | 2871 error::Error GLES2DecoderImpl::HandleSamplerParameterfvImmediate( |
| 2939 uint32_t immediate_data_size, | 2872 uint32_t immediate_data_size, |
| 2940 const void* cmd_data) { | 2873 const volatile void* cmd_data) { |
| 2941 if (!unsafe_es3_apis_enabled()) | 2874 if (!unsafe_es3_apis_enabled()) |
| 2942 return error::kUnknownCommand; | 2875 return error::kUnknownCommand; |
| 2943 const gles2::cmds::SamplerParameterfvImmediate& c = | 2876 const volatile gles2::cmds::SamplerParameterfvImmediate& c = |
| 2944 *static_cast<const gles2::cmds::SamplerParameterfvImmediate*>(cmd_data); | 2877 *static_cast<const volatile gles2::cmds::SamplerParameterfvImmediate*>( |
| 2945 (void)c; | 2878 cmd_data); |
| 2946 GLuint sampler = c.sampler; | 2879 GLuint sampler = c.sampler; |
| 2947 GLenum pname = static_cast<GLenum>(c.pname); | 2880 GLenum pname = static_cast<GLenum>(c.pname); |
| 2948 uint32_t data_size; | 2881 uint32_t data_size; |
| 2949 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) { | 2882 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) { |
| 2950 return error::kOutOfBounds; | 2883 return error::kOutOfBounds; |
| 2951 } | 2884 } |
| 2952 if (data_size > immediate_data_size) { | 2885 if (data_size > immediate_data_size) { |
| 2953 return error::kOutOfBounds; | 2886 return error::kOutOfBounds; |
| 2954 } | 2887 } |
| 2955 const GLfloat* params = | 2888 volatile const GLfloat* params = GetImmediateDataAs<volatile const GLfloat*>( |
| 2956 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 2889 c, data_size, immediate_data_size); |
| 2957 if (!validators_->sampler_parameter.IsValid(pname)) { | 2890 if (!validators_->sampler_parameter.IsValid(pname)) { |
| 2958 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameterfv", pname, "pname"); | 2891 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameterfv", pname, "pname"); |
| 2959 return error::kNoError; | 2892 return error::kNoError; |
| 2960 } | 2893 } |
| 2961 if (params == NULL) { | 2894 if (params == NULL) { |
| 2962 return error::kOutOfBounds; | 2895 return error::kOutOfBounds; |
| 2963 } | 2896 } |
| 2964 DoSamplerParameterfv(sampler, pname, params); | 2897 DoSamplerParameterfv(sampler, pname, params); |
| 2965 return error::kNoError; | 2898 return error::kNoError; |
| 2966 } | 2899 } |
| 2967 | 2900 |
| 2968 error::Error GLES2DecoderImpl::HandleSamplerParameteri( | 2901 error::Error GLES2DecoderImpl::HandleSamplerParameteri( |
| 2969 uint32_t immediate_data_size, | 2902 uint32_t immediate_data_size, |
| 2970 const void* cmd_data) { | 2903 const volatile void* cmd_data) { |
| 2971 if (!unsafe_es3_apis_enabled()) | 2904 if (!unsafe_es3_apis_enabled()) |
| 2972 return error::kUnknownCommand; | 2905 return error::kUnknownCommand; |
| 2973 const gles2::cmds::SamplerParameteri& c = | 2906 const volatile gles2::cmds::SamplerParameteri& c = |
| 2974 *static_cast<const gles2::cmds::SamplerParameteri*>(cmd_data); | 2907 *static_cast<const volatile gles2::cmds::SamplerParameteri*>(cmd_data); |
| 2975 (void)c; | |
| 2976 GLuint sampler = c.sampler; | 2908 GLuint sampler = c.sampler; |
| 2977 GLenum pname = static_cast<GLenum>(c.pname); | 2909 GLenum pname = static_cast<GLenum>(c.pname); |
| 2978 GLint param = static_cast<GLint>(c.param); | 2910 GLint param = static_cast<GLint>(c.param); |
| 2979 if (!validators_->sampler_parameter.IsValid(pname)) { | 2911 if (!validators_->sampler_parameter.IsValid(pname)) { |
| 2980 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameteri", pname, "pname"); | 2912 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameteri", pname, "pname"); |
| 2981 return error::kNoError; | 2913 return error::kNoError; |
| 2982 } | 2914 } |
| 2983 DoSamplerParameteri(sampler, pname, param); | 2915 DoSamplerParameteri(sampler, pname, param); |
| 2984 return error::kNoError; | 2916 return error::kNoError; |
| 2985 } | 2917 } |
| 2986 | 2918 |
| 2987 error::Error GLES2DecoderImpl::HandleSamplerParameterivImmediate( | 2919 error::Error GLES2DecoderImpl::HandleSamplerParameterivImmediate( |
| 2988 uint32_t immediate_data_size, | 2920 uint32_t immediate_data_size, |
| 2989 const void* cmd_data) { | 2921 const volatile void* cmd_data) { |
| 2990 if (!unsafe_es3_apis_enabled()) | 2922 if (!unsafe_es3_apis_enabled()) |
| 2991 return error::kUnknownCommand; | 2923 return error::kUnknownCommand; |
| 2992 const gles2::cmds::SamplerParameterivImmediate& c = | 2924 const volatile gles2::cmds::SamplerParameterivImmediate& c = |
| 2993 *static_cast<const gles2::cmds::SamplerParameterivImmediate*>(cmd_data); | 2925 *static_cast<const volatile gles2::cmds::SamplerParameterivImmediate*>( |
| 2994 (void)c; | 2926 cmd_data); |
| 2995 GLuint sampler = c.sampler; | 2927 GLuint sampler = c.sampler; |
| 2996 GLenum pname = static_cast<GLenum>(c.pname); | 2928 GLenum pname = static_cast<GLenum>(c.pname); |
| 2997 uint32_t data_size; | 2929 uint32_t data_size; |
| 2998 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 1, &data_size)) { | 2930 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 1, &data_size)) { |
| 2999 return error::kOutOfBounds; | 2931 return error::kOutOfBounds; |
| 3000 } | 2932 } |
| 3001 if (data_size > immediate_data_size) { | 2933 if (data_size > immediate_data_size) { |
| 3002 return error::kOutOfBounds; | 2934 return error::kOutOfBounds; |
| 3003 } | 2935 } |
| 3004 const GLint* params = | 2936 volatile const GLint* params = GetImmediateDataAs<volatile const GLint*>( |
| 3005 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); | 2937 c, data_size, immediate_data_size); |
| 3006 if (!validators_->sampler_parameter.IsValid(pname)) { | 2938 if (!validators_->sampler_parameter.IsValid(pname)) { |
| 3007 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameteriv", pname, "pname"); | 2939 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameteriv", pname, "pname"); |
| 3008 return error::kNoError; | 2940 return error::kNoError; |
| 3009 } | 2941 } |
| 3010 if (params == NULL) { | 2942 if (params == NULL) { |
| 3011 return error::kOutOfBounds; | 2943 return error::kOutOfBounds; |
| 3012 } | 2944 } |
| 3013 DoSamplerParameteriv(sampler, pname, params); | 2945 DoSamplerParameteriv(sampler, pname, params); |
| 3014 return error::kNoError; | 2946 return error::kNoError; |
| 3015 } | 2947 } |
| 3016 | 2948 |
| 3017 error::Error GLES2DecoderImpl::HandleScissor(uint32_t immediate_data_size, | 2949 error::Error GLES2DecoderImpl::HandleScissor(uint32_t immediate_data_size, |
| 3018 const void* cmd_data) { | 2950 const volatile void* cmd_data) { |
| 3019 const gles2::cmds::Scissor& c = | 2951 const volatile gles2::cmds::Scissor& c = |
| 3020 *static_cast<const gles2::cmds::Scissor*>(cmd_data); | 2952 *static_cast<const volatile gles2::cmds::Scissor*>(cmd_data); |
| 3021 (void)c; | |
| 3022 GLint x = static_cast<GLint>(c.x); | 2953 GLint x = static_cast<GLint>(c.x); |
| 3023 GLint y = static_cast<GLint>(c.y); | 2954 GLint y = static_cast<GLint>(c.y); |
| 3024 GLsizei width = static_cast<GLsizei>(c.width); | 2955 GLsizei width = static_cast<GLsizei>(c.width); |
| 3025 GLsizei height = static_cast<GLsizei>(c.height); | 2956 GLsizei height = static_cast<GLsizei>(c.height); |
| 3026 if (width < 0) { | 2957 if (width < 0) { |
| 3027 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScissor", "width < 0"); | 2958 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScissor", "width < 0"); |
| 3028 return error::kNoError; | 2959 return error::kNoError; |
| 3029 } | 2960 } |
| 3030 if (height < 0) { | 2961 if (height < 0) { |
| 3031 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScissor", "height < 0"); | 2962 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScissor", "height < 0"); |
| 3032 return error::kNoError; | 2963 return error::kNoError; |
| 3033 } | 2964 } |
| 3034 if (state_.scissor_x != x || state_.scissor_y != y || | 2965 if (state_.scissor_x != x || state_.scissor_y != y || |
| 3035 state_.scissor_width != width || state_.scissor_height != height) { | 2966 state_.scissor_width != width || state_.scissor_height != height) { |
| 3036 state_.scissor_x = x; | 2967 state_.scissor_x = x; |
| 3037 state_.scissor_y = y; | 2968 state_.scissor_y = y; |
| 3038 state_.scissor_width = width; | 2969 state_.scissor_width = width; |
| 3039 state_.scissor_height = height; | 2970 state_.scissor_height = height; |
| 3040 glScissor(x, y, width, height); | 2971 glScissor(x, y, width, height); |
| 3041 } | 2972 } |
| 3042 return error::kNoError; | 2973 return error::kNoError; |
| 3043 } | 2974 } |
| 3044 | 2975 |
| 3045 error::Error GLES2DecoderImpl::HandleShaderSourceBucket( | 2976 error::Error GLES2DecoderImpl::HandleShaderSourceBucket( |
| 3046 uint32_t immediate_data_size, | 2977 uint32_t immediate_data_size, |
| 3047 const void* cmd_data) { | 2978 const volatile void* cmd_data) { |
| 3048 const gles2::cmds::ShaderSourceBucket& c = | 2979 const volatile gles2::cmds::ShaderSourceBucket& c = |
| 3049 *static_cast<const gles2::cmds::ShaderSourceBucket*>(cmd_data); | 2980 *static_cast<const volatile gles2::cmds::ShaderSourceBucket*>(cmd_data); |
| 3050 (void)c; | |
| 3051 GLuint shader = static_cast<GLuint>(c.shader); | 2981 GLuint shader = static_cast<GLuint>(c.shader); |
| 3052 | 2982 |
| 3053 Bucket* bucket = GetBucket(c.str_bucket_id); | 2983 Bucket* bucket = GetBucket(c.str_bucket_id); |
| 3054 if (!bucket) { | 2984 if (!bucket) { |
| 3055 return error::kInvalidArguments; | 2985 return error::kInvalidArguments; |
| 3056 } | 2986 } |
| 3057 GLsizei count = 0; | 2987 GLsizei count = 0; |
| 3058 std::vector<char*> strs; | 2988 std::vector<char*> strs; |
| 3059 std::vector<GLint> len; | 2989 std::vector<GLint> len; |
| 3060 if (!bucket->GetAsStrings(&count, &strs, &len)) { | 2990 if (!bucket->GetAsStrings(&count, &strs, &len)) { |
| 3061 return error::kInvalidArguments; | 2991 return error::kInvalidArguments; |
| 3062 } | 2992 } |
| 3063 const char** str = | 2993 const char** str = |
| 3064 strs.size() > 0 ? const_cast<const char**>(&strs[0]) : NULL; | 2994 strs.size() > 0 ? const_cast<const char**>(&strs[0]) : NULL; |
| 3065 const GLint* length = | 2995 const GLint* length = |
| 3066 len.size() > 0 ? const_cast<const GLint*>(&len[0]) : NULL; | 2996 len.size() > 0 ? const_cast<const GLint*>(&len[0]) : NULL; |
| 3067 (void)length; | 2997 (void)length; |
| 3068 DoShaderSource(shader, count, str, length); | 2998 DoShaderSource(shader, count, str, length); |
| 3069 return error::kNoError; | 2999 return error::kNoError; |
| 3070 } | 3000 } |
| 3071 | 3001 |
| 3072 error::Error GLES2DecoderImpl::HandleStencilFunc(uint32_t immediate_data_size, | 3002 error::Error GLES2DecoderImpl::HandleStencilFunc( |
| 3073 const void* cmd_data) { | 3003 uint32_t immediate_data_size, |
| 3074 const gles2::cmds::StencilFunc& c = | 3004 const volatile void* cmd_data) { |
| 3075 *static_cast<const gles2::cmds::StencilFunc*>(cmd_data); | 3005 const volatile gles2::cmds::StencilFunc& c = |
| 3076 (void)c; | 3006 *static_cast<const volatile gles2::cmds::StencilFunc*>(cmd_data); |
| 3077 GLenum func = static_cast<GLenum>(c.func); | 3007 GLenum func = static_cast<GLenum>(c.func); |
| 3078 GLint ref = static_cast<GLint>(c.ref); | 3008 GLint ref = static_cast<GLint>(c.ref); |
| 3079 GLuint mask = static_cast<GLuint>(c.mask); | 3009 GLuint mask = static_cast<GLuint>(c.mask); |
| 3080 if (!validators_->cmp_function.IsValid(func)) { | 3010 if (!validators_->cmp_function.IsValid(func)) { |
| 3081 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFunc", func, "func"); | 3011 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFunc", func, "func"); |
| 3082 return error::kNoError; | 3012 return error::kNoError; |
| 3083 } | 3013 } |
| 3084 if (state_.stencil_front_func != func || state_.stencil_front_ref != ref || | 3014 if (state_.stencil_front_func != func || state_.stencil_front_ref != ref || |
| 3085 state_.stencil_front_mask != mask || state_.stencil_back_func != func || | 3015 state_.stencil_front_mask != mask || state_.stencil_back_func != func || |
| 3086 state_.stencil_back_ref != ref || state_.stencil_back_mask != mask) { | 3016 state_.stencil_back_ref != ref || state_.stencil_back_mask != mask) { |
| 3087 state_.stencil_front_func = func; | 3017 state_.stencil_front_func = func; |
| 3088 state_.stencil_front_ref = ref; | 3018 state_.stencil_front_ref = ref; |
| 3089 state_.stencil_front_mask = mask; | 3019 state_.stencil_front_mask = mask; |
| 3090 state_.stencil_back_func = func; | 3020 state_.stencil_back_func = func; |
| 3091 state_.stencil_back_ref = ref; | 3021 state_.stencil_back_ref = ref; |
| 3092 state_.stencil_back_mask = mask; | 3022 state_.stencil_back_mask = mask; |
| 3093 glStencilFunc(func, ref, mask); | 3023 glStencilFunc(func, ref, mask); |
| 3094 } | 3024 } |
| 3095 return error::kNoError; | 3025 return error::kNoError; |
| 3096 } | 3026 } |
| 3097 | 3027 |
| 3098 error::Error GLES2DecoderImpl::HandleStencilFuncSeparate( | 3028 error::Error GLES2DecoderImpl::HandleStencilFuncSeparate( |
| 3099 uint32_t immediate_data_size, | 3029 uint32_t immediate_data_size, |
| 3100 const void* cmd_data) { | 3030 const volatile void* cmd_data) { |
| 3101 const gles2::cmds::StencilFuncSeparate& c = | 3031 const volatile gles2::cmds::StencilFuncSeparate& c = |
| 3102 *static_cast<const gles2::cmds::StencilFuncSeparate*>(cmd_data); | 3032 *static_cast<const volatile gles2::cmds::StencilFuncSeparate*>(cmd_data); |
| 3103 (void)c; | |
| 3104 GLenum face = static_cast<GLenum>(c.face); | 3033 GLenum face = static_cast<GLenum>(c.face); |
| 3105 GLenum func = static_cast<GLenum>(c.func); | 3034 GLenum func = static_cast<GLenum>(c.func); |
| 3106 GLint ref = static_cast<GLint>(c.ref); | 3035 GLint ref = static_cast<GLint>(c.ref); |
| 3107 GLuint mask = static_cast<GLuint>(c.mask); | 3036 GLuint mask = static_cast<GLuint>(c.mask); |
| 3108 if (!validators_->face_type.IsValid(face)) { | 3037 if (!validators_->face_type.IsValid(face)) { |
| 3109 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFuncSeparate", face, "face"); | 3038 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFuncSeparate", face, "face"); |
| 3110 return error::kNoError; | 3039 return error::kNoError; |
| 3111 } | 3040 } |
| 3112 if (!validators_->cmp_function.IsValid(func)) { | 3041 if (!validators_->cmp_function.IsValid(func)) { |
| 3113 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFuncSeparate", func, "func"); | 3042 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFuncSeparate", func, "func"); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 3133 if (face == GL_BACK || face == GL_FRONT_AND_BACK) { | 3062 if (face == GL_BACK || face == GL_FRONT_AND_BACK) { |
| 3134 state_.stencil_back_func = func; | 3063 state_.stencil_back_func = func; |
| 3135 state_.stencil_back_ref = ref; | 3064 state_.stencil_back_ref = ref; |
| 3136 state_.stencil_back_mask = mask; | 3065 state_.stencil_back_mask = mask; |
| 3137 } | 3066 } |
| 3138 glStencilFuncSeparate(face, func, ref, mask); | 3067 glStencilFuncSeparate(face, func, ref, mask); |
| 3139 } | 3068 } |
| 3140 return error::kNoError; | 3069 return error::kNoError; |
| 3141 } | 3070 } |
| 3142 | 3071 |
| 3143 error::Error GLES2DecoderImpl::HandleStencilMask(uint32_t immediate_data_size, | 3072 error::Error GLES2DecoderImpl::HandleStencilMask( |
| 3144 const void* cmd_data) { | 3073 uint32_t immediate_data_size, |
| 3145 const gles2::cmds::StencilMask& c = | 3074 const volatile void* cmd_data) { |
| 3146 *static_cast<const gles2::cmds::StencilMask*>(cmd_data); | 3075 const volatile gles2::cmds::StencilMask& c = |
| 3147 (void)c; | 3076 *static_cast<const volatile gles2::cmds::StencilMask*>(cmd_data); |
| 3148 GLuint mask = static_cast<GLuint>(c.mask); | 3077 GLuint mask = static_cast<GLuint>(c.mask); |
| 3149 if (state_.stencil_front_writemask != mask || | 3078 if (state_.stencil_front_writemask != mask || |
| 3150 state_.stencil_back_writemask != mask) { | 3079 state_.stencil_back_writemask != mask) { |
| 3151 state_.stencil_front_writemask = mask; | 3080 state_.stencil_front_writemask = mask; |
| 3152 state_.stencil_back_writemask = mask; | 3081 state_.stencil_back_writemask = mask; |
| 3153 framebuffer_state_.clear_state_dirty = true; | 3082 framebuffer_state_.clear_state_dirty = true; |
| 3154 } | 3083 } |
| 3155 return error::kNoError; | 3084 return error::kNoError; |
| 3156 } | 3085 } |
| 3157 | 3086 |
| 3158 error::Error GLES2DecoderImpl::HandleStencilMaskSeparate( | 3087 error::Error GLES2DecoderImpl::HandleStencilMaskSeparate( |
| 3159 uint32_t immediate_data_size, | 3088 uint32_t immediate_data_size, |
| 3160 const void* cmd_data) { | 3089 const volatile void* cmd_data) { |
| 3161 const gles2::cmds::StencilMaskSeparate& c = | 3090 const volatile gles2::cmds::StencilMaskSeparate& c = |
| 3162 *static_cast<const gles2::cmds::StencilMaskSeparate*>(cmd_data); | 3091 *static_cast<const volatile gles2::cmds::StencilMaskSeparate*>(cmd_data); |
| 3163 (void)c; | |
| 3164 GLenum face = static_cast<GLenum>(c.face); | 3092 GLenum face = static_cast<GLenum>(c.face); |
| 3165 GLuint mask = static_cast<GLuint>(c.mask); | 3093 GLuint mask = static_cast<GLuint>(c.mask); |
| 3166 if (!validators_->face_type.IsValid(face)) { | 3094 if (!validators_->face_type.IsValid(face)) { |
| 3167 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilMaskSeparate", face, "face"); | 3095 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilMaskSeparate", face, "face"); |
| 3168 return error::kNoError; | 3096 return error::kNoError; |
| 3169 } | 3097 } |
| 3170 bool changed = false; | 3098 bool changed = false; |
| 3171 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { | 3099 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { |
| 3172 changed |= state_.stencil_front_writemask != mask; | 3100 changed |= state_.stencil_front_writemask != mask; |
| 3173 } | 3101 } |
| 3174 if (face == GL_BACK || face == GL_FRONT_AND_BACK) { | 3102 if (face == GL_BACK || face == GL_FRONT_AND_BACK) { |
| 3175 changed |= state_.stencil_back_writemask != mask; | 3103 changed |= state_.stencil_back_writemask != mask; |
| 3176 } | 3104 } |
| 3177 if (changed) { | 3105 if (changed) { |
| 3178 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { | 3106 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { |
| 3179 state_.stencil_front_writemask = mask; | 3107 state_.stencil_front_writemask = mask; |
| 3180 } | 3108 } |
| 3181 if (face == GL_BACK || face == GL_FRONT_AND_BACK) { | 3109 if (face == GL_BACK || face == GL_FRONT_AND_BACK) { |
| 3182 state_.stencil_back_writemask = mask; | 3110 state_.stencil_back_writemask = mask; |
| 3183 } | 3111 } |
| 3184 framebuffer_state_.clear_state_dirty = true; | 3112 framebuffer_state_.clear_state_dirty = true; |
| 3185 } | 3113 } |
| 3186 return error::kNoError; | 3114 return error::kNoError; |
| 3187 } | 3115 } |
| 3188 | 3116 |
| 3189 error::Error GLES2DecoderImpl::HandleStencilOp(uint32_t immediate_data_size, | 3117 error::Error GLES2DecoderImpl::HandleStencilOp(uint32_t immediate_data_size, |
| 3190 const void* cmd_data) { | 3118 const volatile void* cmd_data) { |
| 3191 const gles2::cmds::StencilOp& c = | 3119 const volatile gles2::cmds::StencilOp& c = |
| 3192 *static_cast<const gles2::cmds::StencilOp*>(cmd_data); | 3120 *static_cast<const volatile gles2::cmds::StencilOp*>(cmd_data); |
| 3193 (void)c; | |
| 3194 GLenum fail = static_cast<GLenum>(c.fail); | 3121 GLenum fail = static_cast<GLenum>(c.fail); |
| 3195 GLenum zfail = static_cast<GLenum>(c.zfail); | 3122 GLenum zfail = static_cast<GLenum>(c.zfail); |
| 3196 GLenum zpass = static_cast<GLenum>(c.zpass); | 3123 GLenum zpass = static_cast<GLenum>(c.zpass); |
| 3197 if (!validators_->stencil_op.IsValid(fail)) { | 3124 if (!validators_->stencil_op.IsValid(fail)) { |
| 3198 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOp", fail, "fail"); | 3125 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOp", fail, "fail"); |
| 3199 return error::kNoError; | 3126 return error::kNoError; |
| 3200 } | 3127 } |
| 3201 if (!validators_->stencil_op.IsValid(zfail)) { | 3128 if (!validators_->stencil_op.IsValid(zfail)) { |
| 3202 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOp", zfail, "zfail"); | 3129 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOp", zfail, "zfail"); |
| 3203 return error::kNoError; | 3130 return error::kNoError; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 3218 state_.stencil_back_fail_op = fail; | 3145 state_.stencil_back_fail_op = fail; |
| 3219 state_.stencil_back_z_fail_op = zfail; | 3146 state_.stencil_back_z_fail_op = zfail; |
| 3220 state_.stencil_back_z_pass_op = zpass; | 3147 state_.stencil_back_z_pass_op = zpass; |
| 3221 glStencilOp(fail, zfail, zpass); | 3148 glStencilOp(fail, zfail, zpass); |
| 3222 } | 3149 } |
| 3223 return error::kNoError; | 3150 return error::kNoError; |
| 3224 } | 3151 } |
| 3225 | 3152 |
| 3226 error::Error GLES2DecoderImpl::HandleStencilOpSeparate( | 3153 error::Error GLES2DecoderImpl::HandleStencilOpSeparate( |
| 3227 uint32_t immediate_data_size, | 3154 uint32_t immediate_data_size, |
| 3228 const void* cmd_data) { | 3155 const volatile void* cmd_data) { |
| 3229 const gles2::cmds::StencilOpSeparate& c = | 3156 const volatile gles2::cmds::StencilOpSeparate& c = |
| 3230 *static_cast<const gles2::cmds::StencilOpSeparate*>(cmd_data); | 3157 *static_cast<const volatile gles2::cmds::StencilOpSeparate*>(cmd_data); |
| 3231 (void)c; | |
| 3232 GLenum face = static_cast<GLenum>(c.face); | 3158 GLenum face = static_cast<GLenum>(c.face); |
| 3233 GLenum fail = static_cast<GLenum>(c.fail); | 3159 GLenum fail = static_cast<GLenum>(c.fail); |
| 3234 GLenum zfail = static_cast<GLenum>(c.zfail); | 3160 GLenum zfail = static_cast<GLenum>(c.zfail); |
| 3235 GLenum zpass = static_cast<GLenum>(c.zpass); | 3161 GLenum zpass = static_cast<GLenum>(c.zpass); |
| 3236 if (!validators_->face_type.IsValid(face)) { | 3162 if (!validators_->face_type.IsValid(face)) { |
| 3237 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOpSeparate", face, "face"); | 3163 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOpSeparate", face, "face"); |
| 3238 return error::kNoError; | 3164 return error::kNoError; |
| 3239 } | 3165 } |
| 3240 if (!validators_->stencil_op.IsValid(fail)) { | 3166 if (!validators_->stencil_op.IsValid(fail)) { |
| 3241 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOpSeparate", fail, "fail"); | 3167 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOpSeparate", fail, "fail"); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 3269 if (face == GL_BACK || face == GL_FRONT_AND_BACK) { | 3195 if (face == GL_BACK || face == GL_FRONT_AND_BACK) { |
| 3270 state_.stencil_back_fail_op = fail; | 3196 state_.stencil_back_fail_op = fail; |
| 3271 state_.stencil_back_z_fail_op = zfail; | 3197 state_.stencil_back_z_fail_op = zfail; |
| 3272 state_.stencil_back_z_pass_op = zpass; | 3198 state_.stencil_back_z_pass_op = zpass; |
| 3273 } | 3199 } |
| 3274 glStencilOpSeparate(face, fail, zfail, zpass); | 3200 glStencilOpSeparate(face, fail, zfail, zpass); |
| 3275 } | 3201 } |
| 3276 return error::kNoError; | 3202 return error::kNoError; |
| 3277 } | 3203 } |
| 3278 | 3204 |
| 3279 error::Error GLES2DecoderImpl::HandleTexParameterf(uint32_t immediate_data_size, | 3205 error::Error GLES2DecoderImpl::HandleTexParameterf( |
| 3280 const void* cmd_data) { | 3206 uint32_t immediate_data_size, |
| 3281 const gles2::cmds::TexParameterf& c = | 3207 const volatile void* cmd_data) { |
| 3282 *static_cast<const gles2::cmds::TexParameterf*>(cmd_data); | 3208 const volatile gles2::cmds::TexParameterf& c = |
| 3283 (void)c; | 3209 *static_cast<const volatile gles2::cmds::TexParameterf*>(cmd_data); |
| 3284 GLenum target = static_cast<GLenum>(c.target); | 3210 GLenum target = static_cast<GLenum>(c.target); |
| 3285 GLenum pname = static_cast<GLenum>(c.pname); | 3211 GLenum pname = static_cast<GLenum>(c.pname); |
| 3286 GLfloat param = static_cast<GLfloat>(c.param); | 3212 GLfloat param = static_cast<GLfloat>(c.param); |
| 3287 if (!validators_->texture_bind_target.IsValid(target)) { | 3213 if (!validators_->texture_bind_target.IsValid(target)) { |
| 3288 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterf", target, "target"); | 3214 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterf", target, "target"); |
| 3289 return error::kNoError; | 3215 return error::kNoError; |
| 3290 } | 3216 } |
| 3291 if (!validators_->texture_parameter.IsValid(pname)) { | 3217 if (!validators_->texture_parameter.IsValid(pname)) { |
| 3292 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterf", pname, "pname"); | 3218 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterf", pname, "pname"); |
| 3293 return error::kNoError; | 3219 return error::kNoError; |
| 3294 } | 3220 } |
| 3295 DoTexParameterf(target, pname, param); | 3221 DoTexParameterf(target, pname, param); |
| 3296 return error::kNoError; | 3222 return error::kNoError; |
| 3297 } | 3223 } |
| 3298 | 3224 |
| 3299 error::Error GLES2DecoderImpl::HandleTexParameterfvImmediate( | 3225 error::Error GLES2DecoderImpl::HandleTexParameterfvImmediate( |
| 3300 uint32_t immediate_data_size, | 3226 uint32_t immediate_data_size, |
| 3301 const void* cmd_data) { | 3227 const volatile void* cmd_data) { |
| 3302 const gles2::cmds::TexParameterfvImmediate& c = | 3228 const volatile gles2::cmds::TexParameterfvImmediate& c = |
| 3303 *static_cast<const gles2::cmds::TexParameterfvImmediate*>(cmd_data); | 3229 *static_cast<const volatile gles2::cmds::TexParameterfvImmediate*>( |
| 3304 (void)c; | 3230 cmd_data); |
| 3305 GLenum target = static_cast<GLenum>(c.target); | 3231 GLenum target = static_cast<GLenum>(c.target); |
| 3306 GLenum pname = static_cast<GLenum>(c.pname); | 3232 GLenum pname = static_cast<GLenum>(c.pname); |
| 3307 uint32_t data_size; | 3233 uint32_t data_size; |
| 3308 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) { | 3234 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) { |
| 3309 return error::kOutOfBounds; | 3235 return error::kOutOfBounds; |
| 3310 } | 3236 } |
| 3311 if (data_size > immediate_data_size) { | 3237 if (data_size > immediate_data_size) { |
| 3312 return error::kOutOfBounds; | 3238 return error::kOutOfBounds; |
| 3313 } | 3239 } |
| 3314 const GLfloat* params = | 3240 volatile const GLfloat* params = GetImmediateDataAs<volatile const GLfloat*>( |
| 3315 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 3241 c, data_size, immediate_data_size); |
| 3316 if (!validators_->texture_bind_target.IsValid(target)) { | 3242 if (!validators_->texture_bind_target.IsValid(target)) { |
| 3317 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterfv", target, "target"); | 3243 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterfv", target, "target"); |
| 3318 return error::kNoError; | 3244 return error::kNoError; |
| 3319 } | 3245 } |
| 3320 if (!validators_->texture_parameter.IsValid(pname)) { | 3246 if (!validators_->texture_parameter.IsValid(pname)) { |
| 3321 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterfv", pname, "pname"); | 3247 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterfv", pname, "pname"); |
| 3322 return error::kNoError; | 3248 return error::kNoError; |
| 3323 } | 3249 } |
| 3324 if (params == NULL) { | 3250 if (params == NULL) { |
| 3325 return error::kOutOfBounds; | 3251 return error::kOutOfBounds; |
| 3326 } | 3252 } |
| 3327 DoTexParameterfv(target, pname, params); | 3253 DoTexParameterfv(target, pname, params); |
| 3328 return error::kNoError; | 3254 return error::kNoError; |
| 3329 } | 3255 } |
| 3330 | 3256 |
| 3331 error::Error GLES2DecoderImpl::HandleTexParameteri(uint32_t immediate_data_size, | 3257 error::Error GLES2DecoderImpl::HandleTexParameteri( |
| 3332 const void* cmd_data) { | 3258 uint32_t immediate_data_size, |
| 3333 const gles2::cmds::TexParameteri& c = | 3259 const volatile void* cmd_data) { |
| 3334 *static_cast<const gles2::cmds::TexParameteri*>(cmd_data); | 3260 const volatile gles2::cmds::TexParameteri& c = |
| 3335 (void)c; | 3261 *static_cast<const volatile gles2::cmds::TexParameteri*>(cmd_data); |
| 3336 GLenum target = static_cast<GLenum>(c.target); | 3262 GLenum target = static_cast<GLenum>(c.target); |
| 3337 GLenum pname = static_cast<GLenum>(c.pname); | 3263 GLenum pname = static_cast<GLenum>(c.pname); |
| 3338 GLint param = static_cast<GLint>(c.param); | 3264 GLint param = static_cast<GLint>(c.param); |
| 3339 if (!validators_->texture_bind_target.IsValid(target)) { | 3265 if (!validators_->texture_bind_target.IsValid(target)) { |
| 3340 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteri", target, "target"); | 3266 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteri", target, "target"); |
| 3341 return error::kNoError; | 3267 return error::kNoError; |
| 3342 } | 3268 } |
| 3343 if (!validators_->texture_parameter.IsValid(pname)) { | 3269 if (!validators_->texture_parameter.IsValid(pname)) { |
| 3344 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteri", pname, "pname"); | 3270 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteri", pname, "pname"); |
| 3345 return error::kNoError; | 3271 return error::kNoError; |
| 3346 } | 3272 } |
| 3347 DoTexParameteri(target, pname, param); | 3273 DoTexParameteri(target, pname, param); |
| 3348 return error::kNoError; | 3274 return error::kNoError; |
| 3349 } | 3275 } |
| 3350 | 3276 |
| 3351 error::Error GLES2DecoderImpl::HandleTexParameterivImmediate( | 3277 error::Error GLES2DecoderImpl::HandleTexParameterivImmediate( |
| 3352 uint32_t immediate_data_size, | 3278 uint32_t immediate_data_size, |
| 3353 const void* cmd_data) { | 3279 const volatile void* cmd_data) { |
| 3354 const gles2::cmds::TexParameterivImmediate& c = | 3280 const volatile gles2::cmds::TexParameterivImmediate& c = |
| 3355 *static_cast<const gles2::cmds::TexParameterivImmediate*>(cmd_data); | 3281 *static_cast<const volatile gles2::cmds::TexParameterivImmediate*>( |
| 3356 (void)c; | 3282 cmd_data); |
| 3357 GLenum target = static_cast<GLenum>(c.target); | 3283 GLenum target = static_cast<GLenum>(c.target); |
| 3358 GLenum pname = static_cast<GLenum>(c.pname); | 3284 GLenum pname = static_cast<GLenum>(c.pname); |
| 3359 uint32_t data_size; | 3285 uint32_t data_size; |
| 3360 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 1, &data_size)) { | 3286 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 1, &data_size)) { |
| 3361 return error::kOutOfBounds; | 3287 return error::kOutOfBounds; |
| 3362 } | 3288 } |
| 3363 if (data_size > immediate_data_size) { | 3289 if (data_size > immediate_data_size) { |
| 3364 return error::kOutOfBounds; | 3290 return error::kOutOfBounds; |
| 3365 } | 3291 } |
| 3366 const GLint* params = | 3292 volatile const GLint* params = GetImmediateDataAs<volatile const GLint*>( |
| 3367 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); | 3293 c, data_size, immediate_data_size); |
| 3368 if (!validators_->texture_bind_target.IsValid(target)) { | 3294 if (!validators_->texture_bind_target.IsValid(target)) { |
| 3369 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteriv", target, "target"); | 3295 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteriv", target, "target"); |
| 3370 return error::kNoError; | 3296 return error::kNoError; |
| 3371 } | 3297 } |
| 3372 if (!validators_->texture_parameter.IsValid(pname)) { | 3298 if (!validators_->texture_parameter.IsValid(pname)) { |
| 3373 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteriv", pname, "pname"); | 3299 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteriv", pname, "pname"); |
| 3374 return error::kNoError; | 3300 return error::kNoError; |
| 3375 } | 3301 } |
| 3376 if (params == NULL) { | 3302 if (params == NULL) { |
| 3377 return error::kOutOfBounds; | 3303 return error::kOutOfBounds; |
| 3378 } | 3304 } |
| 3379 DoTexParameteriv(target, pname, params); | 3305 DoTexParameteriv(target, pname, params); |
| 3380 return error::kNoError; | 3306 return error::kNoError; |
| 3381 } | 3307 } |
| 3382 | 3308 |
| 3383 error::Error GLES2DecoderImpl::HandleTexStorage3D(uint32_t immediate_data_size, | 3309 error::Error GLES2DecoderImpl::HandleTexStorage3D( |
| 3384 const void* cmd_data) { | 3310 uint32_t immediate_data_size, |
| 3311 const volatile void* cmd_data) { |
| 3385 if (!unsafe_es3_apis_enabled()) | 3312 if (!unsafe_es3_apis_enabled()) |
| 3386 return error::kUnknownCommand; | 3313 return error::kUnknownCommand; |
| 3387 const gles2::cmds::TexStorage3D& c = | 3314 const volatile gles2::cmds::TexStorage3D& c = |
| 3388 *static_cast<const gles2::cmds::TexStorage3D*>(cmd_data); | 3315 *static_cast<const volatile gles2::cmds::TexStorage3D*>(cmd_data); |
| 3389 (void)c; | |
| 3390 GLenum target = static_cast<GLenum>(c.target); | 3316 GLenum target = static_cast<GLenum>(c.target); |
| 3391 GLsizei levels = static_cast<GLsizei>(c.levels); | 3317 GLsizei levels = static_cast<GLsizei>(c.levels); |
| 3392 GLenum internalFormat = static_cast<GLenum>(c.internalFormat); | 3318 GLenum internalFormat = static_cast<GLenum>(c.internalFormat); |
| 3393 GLsizei width = static_cast<GLsizei>(c.width); | 3319 GLsizei width = static_cast<GLsizei>(c.width); |
| 3394 GLsizei height = static_cast<GLsizei>(c.height); | 3320 GLsizei height = static_cast<GLsizei>(c.height); |
| 3395 GLsizei depth = static_cast<GLsizei>(c.depth); | 3321 GLsizei depth = static_cast<GLsizei>(c.depth); |
| 3396 if (!validators_->texture_3_d_target.IsValid(target)) { | 3322 if (!validators_->texture_3_d_target.IsValid(target)) { |
| 3397 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexStorage3D", target, "target"); | 3323 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexStorage3D", target, "target"); |
| 3398 return error::kNoError; | 3324 return error::kNoError; |
| 3399 } | 3325 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 3417 if (depth < 0) { | 3343 if (depth < 0) { |
| 3418 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage3D", "depth < 0"); | 3344 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage3D", "depth < 0"); |
| 3419 return error::kNoError; | 3345 return error::kNoError; |
| 3420 } | 3346 } |
| 3421 DoTexStorage3D(target, levels, internalFormat, width, height, depth); | 3347 DoTexStorage3D(target, levels, internalFormat, width, height, depth); |
| 3422 return error::kNoError; | 3348 return error::kNoError; |
| 3423 } | 3349 } |
| 3424 | 3350 |
| 3425 error::Error GLES2DecoderImpl::HandleTransformFeedbackVaryingsBucket( | 3351 error::Error GLES2DecoderImpl::HandleTransformFeedbackVaryingsBucket( |
| 3426 uint32_t immediate_data_size, | 3352 uint32_t immediate_data_size, |
| 3427 const void* cmd_data) { | 3353 const volatile void* cmd_data) { |
| 3428 if (!unsafe_es3_apis_enabled()) | 3354 if (!unsafe_es3_apis_enabled()) |
| 3429 return error::kUnknownCommand; | 3355 return error::kUnknownCommand; |
| 3430 const gles2::cmds::TransformFeedbackVaryingsBucket& c = | 3356 const volatile gles2::cmds::TransformFeedbackVaryingsBucket& c = *static_cast< |
| 3431 *static_cast<const gles2::cmds::TransformFeedbackVaryingsBucket*>( | 3357 const volatile gles2::cmds::TransformFeedbackVaryingsBucket*>(cmd_data); |
| 3432 cmd_data); | |
| 3433 (void)c; | |
| 3434 GLuint program = static_cast<GLuint>(c.program); | 3358 GLuint program = static_cast<GLuint>(c.program); |
| 3435 | 3359 |
| 3436 Bucket* bucket = GetBucket(c.varyings_bucket_id); | 3360 Bucket* bucket = GetBucket(c.varyings_bucket_id); |
| 3437 if (!bucket) { | 3361 if (!bucket) { |
| 3438 return error::kInvalidArguments; | 3362 return error::kInvalidArguments; |
| 3439 } | 3363 } |
| 3440 GLsizei count = 0; | 3364 GLsizei count = 0; |
| 3441 std::vector<char*> strs; | 3365 std::vector<char*> strs; |
| 3442 std::vector<GLint> len; | 3366 std::vector<GLint> len; |
| 3443 if (!bucket->GetAsStrings(&count, &strs, &len)) { | 3367 if (!bucket->GetAsStrings(&count, &strs, &len)) { |
| 3444 return error::kInvalidArguments; | 3368 return error::kInvalidArguments; |
| 3445 } | 3369 } |
| 3446 const char** varyings = | 3370 const char** varyings = |
| 3447 strs.size() > 0 ? const_cast<const char**>(&strs[0]) : NULL; | 3371 strs.size() > 0 ? const_cast<const char**>(&strs[0]) : NULL; |
| 3448 const GLint* length = | 3372 const GLint* length = |
| 3449 len.size() > 0 ? const_cast<const GLint*>(&len[0]) : NULL; | 3373 len.size() > 0 ? const_cast<const GLint*>(&len[0]) : NULL; |
| 3450 (void)length; | 3374 (void)length; |
| 3451 GLenum buffermode = static_cast<GLenum>(c.buffermode); | 3375 GLenum buffermode = static_cast<GLenum>(c.buffermode); |
| 3452 if (!validators_->buffer_mode.IsValid(buffermode)) { | 3376 if (!validators_->buffer_mode.IsValid(buffermode)) { |
| 3453 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTransformFeedbackVaryings", buffermode, | 3377 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTransformFeedbackVaryings", buffermode, |
| 3454 "buffermode"); | 3378 "buffermode"); |
| 3455 return error::kNoError; | 3379 return error::kNoError; |
| 3456 } | 3380 } |
| 3457 DoTransformFeedbackVaryings(program, count, varyings, buffermode); | 3381 DoTransformFeedbackVaryings(program, count, varyings, buffermode); |
| 3458 return error::kNoError; | 3382 return error::kNoError; |
| 3459 } | 3383 } |
| 3460 | 3384 |
| 3461 error::Error GLES2DecoderImpl::HandleUniform1f(uint32_t immediate_data_size, | 3385 error::Error GLES2DecoderImpl::HandleUniform1f(uint32_t immediate_data_size, |
| 3462 const void* cmd_data) { | 3386 const volatile void* cmd_data) { |
| 3463 const gles2::cmds::Uniform1f& c = | 3387 const volatile gles2::cmds::Uniform1f& c = |
| 3464 *static_cast<const gles2::cmds::Uniform1f*>(cmd_data); | 3388 *static_cast<const volatile gles2::cmds::Uniform1f*>(cmd_data); |
| 3465 (void)c; | |
| 3466 GLint location = static_cast<GLint>(c.location); | 3389 GLint location = static_cast<GLint>(c.location); |
| 3467 GLfloat x = static_cast<GLfloat>(c.x); | 3390 GLfloat x = static_cast<GLfloat>(c.x); |
| 3468 GLfloat temp[1] = { | 3391 GLfloat temp[1] = { |
| 3469 x, | 3392 x, |
| 3470 }; | 3393 }; |
| 3471 DoUniform1fv(location, 1, &temp[0]); | 3394 DoUniform1fv(location, 1, &temp[0]); |
| 3472 return error::kNoError; | 3395 return error::kNoError; |
| 3473 } | 3396 } |
| 3474 | 3397 |
| 3475 error::Error GLES2DecoderImpl::HandleUniform1fvImmediate( | 3398 error::Error GLES2DecoderImpl::HandleUniform1fvImmediate( |
| 3476 uint32_t immediate_data_size, | 3399 uint32_t immediate_data_size, |
| 3477 const void* cmd_data) { | 3400 const volatile void* cmd_data) { |
| 3478 const gles2::cmds::Uniform1fvImmediate& c = | 3401 const volatile gles2::cmds::Uniform1fvImmediate& c = |
| 3479 *static_cast<const gles2::cmds::Uniform1fvImmediate*>(cmd_data); | 3402 *static_cast<const volatile gles2::cmds::Uniform1fvImmediate*>(cmd_data); |
| 3480 (void)c; | |
| 3481 GLint location = static_cast<GLint>(c.location); | 3403 GLint location = static_cast<GLint>(c.location); |
| 3482 GLsizei count = static_cast<GLsizei>(c.count); | 3404 GLsizei count = static_cast<GLsizei>(c.count); |
| 3483 uint32_t data_size = 0; | 3405 uint32_t data_size = 0; |
| 3484 if (count >= 0 && | 3406 if (count >= 0 && |
| 3485 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 1, &data_size)) { | 3407 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 1, &data_size)) { |
| 3486 return error::kOutOfBounds; | 3408 return error::kOutOfBounds; |
| 3487 } | 3409 } |
| 3488 if (data_size > immediate_data_size) { | 3410 if (data_size > immediate_data_size) { |
| 3489 return error::kOutOfBounds; | 3411 return error::kOutOfBounds; |
| 3490 } | 3412 } |
| 3491 const GLfloat* v = | 3413 volatile const GLfloat* v = GetImmediateDataAs<volatile const GLfloat*>( |
| 3492 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 3414 c, data_size, immediate_data_size); |
| 3493 if (count < 0) { | 3415 if (count < 0) { |
| 3494 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform1fv", "count < 0"); | 3416 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform1fv", "count < 0"); |
| 3495 return error::kNoError; | 3417 return error::kNoError; |
| 3496 } | 3418 } |
| 3497 if (v == NULL) { | 3419 if (v == NULL) { |
| 3498 return error::kOutOfBounds; | 3420 return error::kOutOfBounds; |
| 3499 } | 3421 } |
| 3500 DoUniform1fv(location, count, v); | 3422 DoUniform1fv(location, count, v); |
| 3501 return error::kNoError; | 3423 return error::kNoError; |
| 3502 } | 3424 } |
| 3503 | 3425 |
| 3504 error::Error GLES2DecoderImpl::HandleUniform1i(uint32_t immediate_data_size, | 3426 error::Error GLES2DecoderImpl::HandleUniform1i(uint32_t immediate_data_size, |
| 3505 const void* cmd_data) { | 3427 const volatile void* cmd_data) { |
| 3506 const gles2::cmds::Uniform1i& c = | 3428 const volatile gles2::cmds::Uniform1i& c = |
| 3507 *static_cast<const gles2::cmds::Uniform1i*>(cmd_data); | 3429 *static_cast<const volatile gles2::cmds::Uniform1i*>(cmd_data); |
| 3508 (void)c; | |
| 3509 GLint location = static_cast<GLint>(c.location); | 3430 GLint location = static_cast<GLint>(c.location); |
| 3510 GLint x = static_cast<GLint>(c.x); | 3431 GLint x = static_cast<GLint>(c.x); |
| 3511 DoUniform1i(location, x); | 3432 DoUniform1i(location, x); |
| 3512 return error::kNoError; | 3433 return error::kNoError; |
| 3513 } | 3434 } |
| 3514 | 3435 |
| 3515 error::Error GLES2DecoderImpl::HandleUniform1ivImmediate( | 3436 error::Error GLES2DecoderImpl::HandleUniform1ivImmediate( |
| 3516 uint32_t immediate_data_size, | 3437 uint32_t immediate_data_size, |
| 3517 const void* cmd_data) { | 3438 const volatile void* cmd_data) { |
| 3518 const gles2::cmds::Uniform1ivImmediate& c = | 3439 const volatile gles2::cmds::Uniform1ivImmediate& c = |
| 3519 *static_cast<const gles2::cmds::Uniform1ivImmediate*>(cmd_data); | 3440 *static_cast<const volatile gles2::cmds::Uniform1ivImmediate*>(cmd_data); |
| 3520 (void)c; | |
| 3521 GLint location = static_cast<GLint>(c.location); | 3441 GLint location = static_cast<GLint>(c.location); |
| 3522 GLsizei count = static_cast<GLsizei>(c.count); | 3442 GLsizei count = static_cast<GLsizei>(c.count); |
| 3523 uint32_t data_size = 0; | 3443 uint32_t data_size = 0; |
| 3524 if (count >= 0 && | 3444 if (count >= 0 && |
| 3525 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 1, &data_size)) { | 3445 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 1, &data_size)) { |
| 3526 return error::kOutOfBounds; | 3446 return error::kOutOfBounds; |
| 3527 } | 3447 } |
| 3528 if (data_size > immediate_data_size) { | 3448 if (data_size > immediate_data_size) { |
| 3529 return error::kOutOfBounds; | 3449 return error::kOutOfBounds; |
| 3530 } | 3450 } |
| 3531 const GLint* v = | 3451 volatile const GLint* v = GetImmediateDataAs<volatile const GLint*>( |
| 3532 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); | 3452 c, data_size, immediate_data_size); |
| 3533 if (count < 0) { | 3453 if (count < 0) { |
| 3534 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform1iv", "count < 0"); | 3454 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform1iv", "count < 0"); |
| 3535 return error::kNoError; | 3455 return error::kNoError; |
| 3536 } | 3456 } |
| 3537 if (v == NULL) { | 3457 if (v == NULL) { |
| 3538 return error::kOutOfBounds; | 3458 return error::kOutOfBounds; |
| 3539 } | 3459 } |
| 3540 DoUniform1iv(location, count, v); | 3460 DoUniform1iv(location, count, v); |
| 3541 return error::kNoError; | 3461 return error::kNoError; |
| 3542 } | 3462 } |
| 3543 | 3463 |
| 3544 error::Error GLES2DecoderImpl::HandleUniform1ui(uint32_t immediate_data_size, | 3464 error::Error GLES2DecoderImpl::HandleUniform1ui(uint32_t immediate_data_size, |
| 3545 const void* cmd_data) { | 3465 const volatile void* cmd_data) { |
| 3546 if (!unsafe_es3_apis_enabled()) | 3466 if (!unsafe_es3_apis_enabled()) |
| 3547 return error::kUnknownCommand; | 3467 return error::kUnknownCommand; |
| 3548 const gles2::cmds::Uniform1ui& c = | 3468 const volatile gles2::cmds::Uniform1ui& c = |
| 3549 *static_cast<const gles2::cmds::Uniform1ui*>(cmd_data); | 3469 *static_cast<const volatile gles2::cmds::Uniform1ui*>(cmd_data); |
| 3550 (void)c; | |
| 3551 GLint location = static_cast<GLint>(c.location); | 3470 GLint location = static_cast<GLint>(c.location); |
| 3552 GLuint x = static_cast<GLuint>(c.x); | 3471 GLuint x = static_cast<GLuint>(c.x); |
| 3553 GLuint temp[1] = { | 3472 GLuint temp[1] = { |
| 3554 x, | 3473 x, |
| 3555 }; | 3474 }; |
| 3556 DoUniform1uiv(location, 1, &temp[0]); | 3475 DoUniform1uiv(location, 1, &temp[0]); |
| 3557 return error::kNoError; | 3476 return error::kNoError; |
| 3558 } | 3477 } |
| 3559 | 3478 |
| 3560 error::Error GLES2DecoderImpl::HandleUniform1uivImmediate( | 3479 error::Error GLES2DecoderImpl::HandleUniform1uivImmediate( |
| 3561 uint32_t immediate_data_size, | 3480 uint32_t immediate_data_size, |
| 3562 const void* cmd_data) { | 3481 const volatile void* cmd_data) { |
| 3563 if (!unsafe_es3_apis_enabled()) | 3482 if (!unsafe_es3_apis_enabled()) |
| 3564 return error::kUnknownCommand; | 3483 return error::kUnknownCommand; |
| 3565 const gles2::cmds::Uniform1uivImmediate& c = | 3484 const volatile gles2::cmds::Uniform1uivImmediate& c = |
| 3566 *static_cast<const gles2::cmds::Uniform1uivImmediate*>(cmd_data); | 3485 *static_cast<const volatile gles2::cmds::Uniform1uivImmediate*>(cmd_data); |
| 3567 (void)c; | |
| 3568 GLint location = static_cast<GLint>(c.location); | 3486 GLint location = static_cast<GLint>(c.location); |
| 3569 GLsizei count = static_cast<GLsizei>(c.count); | 3487 GLsizei count = static_cast<GLsizei>(c.count); |
| 3570 uint32_t data_size = 0; | 3488 uint32_t data_size = 0; |
| 3571 if (count >= 0 && | 3489 if (count >= 0 && |
| 3572 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 1, &data_size)) { | 3490 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 1, &data_size)) { |
| 3573 return error::kOutOfBounds; | 3491 return error::kOutOfBounds; |
| 3574 } | 3492 } |
| 3575 if (data_size > immediate_data_size) { | 3493 if (data_size > immediate_data_size) { |
| 3576 return error::kOutOfBounds; | 3494 return error::kOutOfBounds; |
| 3577 } | 3495 } |
| 3578 const GLuint* v = | 3496 volatile const GLuint* v = GetImmediateDataAs<volatile const GLuint*>( |
| 3579 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 3497 c, data_size, immediate_data_size); |
| 3580 if (count < 0) { | 3498 if (count < 0) { |
| 3581 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform1uiv", "count < 0"); | 3499 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform1uiv", "count < 0"); |
| 3582 return error::kNoError; | 3500 return error::kNoError; |
| 3583 } | 3501 } |
| 3584 if (v == NULL) { | 3502 if (v == NULL) { |
| 3585 return error::kOutOfBounds; | 3503 return error::kOutOfBounds; |
| 3586 } | 3504 } |
| 3587 DoUniform1uiv(location, count, v); | 3505 DoUniform1uiv(location, count, v); |
| 3588 return error::kNoError; | 3506 return error::kNoError; |
| 3589 } | 3507 } |
| 3590 | 3508 |
| 3591 error::Error GLES2DecoderImpl::HandleUniform2f(uint32_t immediate_data_size, | 3509 error::Error GLES2DecoderImpl::HandleUniform2f(uint32_t immediate_data_size, |
| 3592 const void* cmd_data) { | 3510 const volatile void* cmd_data) { |
| 3593 const gles2::cmds::Uniform2f& c = | 3511 const volatile gles2::cmds::Uniform2f& c = |
| 3594 *static_cast<const gles2::cmds::Uniform2f*>(cmd_data); | 3512 *static_cast<const volatile gles2::cmds::Uniform2f*>(cmd_data); |
| 3595 (void)c; | |
| 3596 GLint location = static_cast<GLint>(c.location); | 3513 GLint location = static_cast<GLint>(c.location); |
| 3597 GLfloat x = static_cast<GLfloat>(c.x); | 3514 GLfloat x = static_cast<GLfloat>(c.x); |
| 3598 GLfloat y = static_cast<GLfloat>(c.y); | 3515 GLfloat y = static_cast<GLfloat>(c.y); |
| 3599 GLfloat temp[2] = { | 3516 GLfloat temp[2] = { |
| 3600 x, y, | 3517 x, y, |
| 3601 }; | 3518 }; |
| 3602 DoUniform2fv(location, 1, &temp[0]); | 3519 DoUniform2fv(location, 1, &temp[0]); |
| 3603 return error::kNoError; | 3520 return error::kNoError; |
| 3604 } | 3521 } |
| 3605 | 3522 |
| 3606 error::Error GLES2DecoderImpl::HandleUniform2fvImmediate( | 3523 error::Error GLES2DecoderImpl::HandleUniform2fvImmediate( |
| 3607 uint32_t immediate_data_size, | 3524 uint32_t immediate_data_size, |
| 3608 const void* cmd_data) { | 3525 const volatile void* cmd_data) { |
| 3609 const gles2::cmds::Uniform2fvImmediate& c = | 3526 const volatile gles2::cmds::Uniform2fvImmediate& c = |
| 3610 *static_cast<const gles2::cmds::Uniform2fvImmediate*>(cmd_data); | 3527 *static_cast<const volatile gles2::cmds::Uniform2fvImmediate*>(cmd_data); |
| 3611 (void)c; | |
| 3612 GLint location = static_cast<GLint>(c.location); | 3528 GLint location = static_cast<GLint>(c.location); |
| 3613 GLsizei count = static_cast<GLsizei>(c.count); | 3529 GLsizei count = static_cast<GLsizei>(c.count); |
| 3614 uint32_t data_size = 0; | 3530 uint32_t data_size = 0; |
| 3615 if (count >= 0 && | 3531 if (count >= 0 && |
| 3616 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 2, &data_size)) { | 3532 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 2, &data_size)) { |
| 3617 return error::kOutOfBounds; | 3533 return error::kOutOfBounds; |
| 3618 } | 3534 } |
| 3619 if (data_size > immediate_data_size) { | 3535 if (data_size > immediate_data_size) { |
| 3620 return error::kOutOfBounds; | 3536 return error::kOutOfBounds; |
| 3621 } | 3537 } |
| 3622 const GLfloat* v = | 3538 volatile const GLfloat* v = GetImmediateDataAs<volatile const GLfloat*>( |
| 3623 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 3539 c, data_size, immediate_data_size); |
| 3624 if (count < 0) { | 3540 if (count < 0) { |
| 3625 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform2fv", "count < 0"); | 3541 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform2fv", "count < 0"); |
| 3626 return error::kNoError; | 3542 return error::kNoError; |
| 3627 } | 3543 } |
| 3628 if (v == NULL) { | 3544 if (v == NULL) { |
| 3629 return error::kOutOfBounds; | 3545 return error::kOutOfBounds; |
| 3630 } | 3546 } |
| 3631 DoUniform2fv(location, count, v); | 3547 DoUniform2fv(location, count, v); |
| 3632 return error::kNoError; | 3548 return error::kNoError; |
| 3633 } | 3549 } |
| 3634 | 3550 |
| 3635 error::Error GLES2DecoderImpl::HandleUniform2i(uint32_t immediate_data_size, | 3551 error::Error GLES2DecoderImpl::HandleUniform2i(uint32_t immediate_data_size, |
| 3636 const void* cmd_data) { | 3552 const volatile void* cmd_data) { |
| 3637 const gles2::cmds::Uniform2i& c = | 3553 const volatile gles2::cmds::Uniform2i& c = |
| 3638 *static_cast<const gles2::cmds::Uniform2i*>(cmd_data); | 3554 *static_cast<const volatile gles2::cmds::Uniform2i*>(cmd_data); |
| 3639 (void)c; | |
| 3640 GLint location = static_cast<GLint>(c.location); | 3555 GLint location = static_cast<GLint>(c.location); |
| 3641 GLint x = static_cast<GLint>(c.x); | 3556 GLint x = static_cast<GLint>(c.x); |
| 3642 GLint y = static_cast<GLint>(c.y); | 3557 GLint y = static_cast<GLint>(c.y); |
| 3643 GLint temp[2] = { | 3558 GLint temp[2] = { |
| 3644 x, y, | 3559 x, y, |
| 3645 }; | 3560 }; |
| 3646 DoUniform2iv(location, 1, &temp[0]); | 3561 DoUniform2iv(location, 1, &temp[0]); |
| 3647 return error::kNoError; | 3562 return error::kNoError; |
| 3648 } | 3563 } |
| 3649 | 3564 |
| 3650 error::Error GLES2DecoderImpl::HandleUniform2ivImmediate( | 3565 error::Error GLES2DecoderImpl::HandleUniform2ivImmediate( |
| 3651 uint32_t immediate_data_size, | 3566 uint32_t immediate_data_size, |
| 3652 const void* cmd_data) { | 3567 const volatile void* cmd_data) { |
| 3653 const gles2::cmds::Uniform2ivImmediate& c = | 3568 const volatile gles2::cmds::Uniform2ivImmediate& c = |
| 3654 *static_cast<const gles2::cmds::Uniform2ivImmediate*>(cmd_data); | 3569 *static_cast<const volatile gles2::cmds::Uniform2ivImmediate*>(cmd_data); |
| 3655 (void)c; | |
| 3656 GLint location = static_cast<GLint>(c.location); | 3570 GLint location = static_cast<GLint>(c.location); |
| 3657 GLsizei count = static_cast<GLsizei>(c.count); | 3571 GLsizei count = static_cast<GLsizei>(c.count); |
| 3658 uint32_t data_size = 0; | 3572 uint32_t data_size = 0; |
| 3659 if (count >= 0 && | 3573 if (count >= 0 && |
| 3660 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 2, &data_size)) { | 3574 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 2, &data_size)) { |
| 3661 return error::kOutOfBounds; | 3575 return error::kOutOfBounds; |
| 3662 } | 3576 } |
| 3663 if (data_size > immediate_data_size) { | 3577 if (data_size > immediate_data_size) { |
| 3664 return error::kOutOfBounds; | 3578 return error::kOutOfBounds; |
| 3665 } | 3579 } |
| 3666 const GLint* v = | 3580 volatile const GLint* v = GetImmediateDataAs<volatile const GLint*>( |
| 3667 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); | 3581 c, data_size, immediate_data_size); |
| 3668 if (count < 0) { | 3582 if (count < 0) { |
| 3669 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform2iv", "count < 0"); | 3583 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform2iv", "count < 0"); |
| 3670 return error::kNoError; | 3584 return error::kNoError; |
| 3671 } | 3585 } |
| 3672 if (v == NULL) { | 3586 if (v == NULL) { |
| 3673 return error::kOutOfBounds; | 3587 return error::kOutOfBounds; |
| 3674 } | 3588 } |
| 3675 DoUniform2iv(location, count, v); | 3589 DoUniform2iv(location, count, v); |
| 3676 return error::kNoError; | 3590 return error::kNoError; |
| 3677 } | 3591 } |
| 3678 | 3592 |
| 3679 error::Error GLES2DecoderImpl::HandleUniform2ui(uint32_t immediate_data_size, | 3593 error::Error GLES2DecoderImpl::HandleUniform2ui(uint32_t immediate_data_size, |
| 3680 const void* cmd_data) { | 3594 const volatile void* cmd_data) { |
| 3681 if (!unsafe_es3_apis_enabled()) | 3595 if (!unsafe_es3_apis_enabled()) |
| 3682 return error::kUnknownCommand; | 3596 return error::kUnknownCommand; |
| 3683 const gles2::cmds::Uniform2ui& c = | 3597 const volatile gles2::cmds::Uniform2ui& c = |
| 3684 *static_cast<const gles2::cmds::Uniform2ui*>(cmd_data); | 3598 *static_cast<const volatile gles2::cmds::Uniform2ui*>(cmd_data); |
| 3685 (void)c; | |
| 3686 GLint location = static_cast<GLint>(c.location); | 3599 GLint location = static_cast<GLint>(c.location); |
| 3687 GLuint x = static_cast<GLuint>(c.x); | 3600 GLuint x = static_cast<GLuint>(c.x); |
| 3688 GLuint y = static_cast<GLuint>(c.y); | 3601 GLuint y = static_cast<GLuint>(c.y); |
| 3689 GLuint temp[2] = { | 3602 GLuint temp[2] = { |
| 3690 x, y, | 3603 x, y, |
| 3691 }; | 3604 }; |
| 3692 DoUniform2uiv(location, 1, &temp[0]); | 3605 DoUniform2uiv(location, 1, &temp[0]); |
| 3693 return error::kNoError; | 3606 return error::kNoError; |
| 3694 } | 3607 } |
| 3695 | 3608 |
| 3696 error::Error GLES2DecoderImpl::HandleUniform2uivImmediate( | 3609 error::Error GLES2DecoderImpl::HandleUniform2uivImmediate( |
| 3697 uint32_t immediate_data_size, | 3610 uint32_t immediate_data_size, |
| 3698 const void* cmd_data) { | 3611 const volatile void* cmd_data) { |
| 3699 if (!unsafe_es3_apis_enabled()) | 3612 if (!unsafe_es3_apis_enabled()) |
| 3700 return error::kUnknownCommand; | 3613 return error::kUnknownCommand; |
| 3701 const gles2::cmds::Uniform2uivImmediate& c = | 3614 const volatile gles2::cmds::Uniform2uivImmediate& c = |
| 3702 *static_cast<const gles2::cmds::Uniform2uivImmediate*>(cmd_data); | 3615 *static_cast<const volatile gles2::cmds::Uniform2uivImmediate*>(cmd_data); |
| 3703 (void)c; | |
| 3704 GLint location = static_cast<GLint>(c.location); | 3616 GLint location = static_cast<GLint>(c.location); |
| 3705 GLsizei count = static_cast<GLsizei>(c.count); | 3617 GLsizei count = static_cast<GLsizei>(c.count); |
| 3706 uint32_t data_size = 0; | 3618 uint32_t data_size = 0; |
| 3707 if (count >= 0 && | 3619 if (count >= 0 && |
| 3708 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 2, &data_size)) { | 3620 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 2, &data_size)) { |
| 3709 return error::kOutOfBounds; | 3621 return error::kOutOfBounds; |
| 3710 } | 3622 } |
| 3711 if (data_size > immediate_data_size) { | 3623 if (data_size > immediate_data_size) { |
| 3712 return error::kOutOfBounds; | 3624 return error::kOutOfBounds; |
| 3713 } | 3625 } |
| 3714 const GLuint* v = | 3626 volatile const GLuint* v = GetImmediateDataAs<volatile const GLuint*>( |
| 3715 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 3627 c, data_size, immediate_data_size); |
| 3716 if (count < 0) { | 3628 if (count < 0) { |
| 3717 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform2uiv", "count < 0"); | 3629 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform2uiv", "count < 0"); |
| 3718 return error::kNoError; | 3630 return error::kNoError; |
| 3719 } | 3631 } |
| 3720 if (v == NULL) { | 3632 if (v == NULL) { |
| 3721 return error::kOutOfBounds; | 3633 return error::kOutOfBounds; |
| 3722 } | 3634 } |
| 3723 DoUniform2uiv(location, count, v); | 3635 DoUniform2uiv(location, count, v); |
| 3724 return error::kNoError; | 3636 return error::kNoError; |
| 3725 } | 3637 } |
| 3726 | 3638 |
| 3727 error::Error GLES2DecoderImpl::HandleUniform3f(uint32_t immediate_data_size, | 3639 error::Error GLES2DecoderImpl::HandleUniform3f(uint32_t immediate_data_size, |
| 3728 const void* cmd_data) { | 3640 const volatile void* cmd_data) { |
| 3729 const gles2::cmds::Uniform3f& c = | 3641 const volatile gles2::cmds::Uniform3f& c = |
| 3730 *static_cast<const gles2::cmds::Uniform3f*>(cmd_data); | 3642 *static_cast<const volatile gles2::cmds::Uniform3f*>(cmd_data); |
| 3731 (void)c; | |
| 3732 GLint location = static_cast<GLint>(c.location); | 3643 GLint location = static_cast<GLint>(c.location); |
| 3733 GLfloat x = static_cast<GLfloat>(c.x); | 3644 GLfloat x = static_cast<GLfloat>(c.x); |
| 3734 GLfloat y = static_cast<GLfloat>(c.y); | 3645 GLfloat y = static_cast<GLfloat>(c.y); |
| 3735 GLfloat z = static_cast<GLfloat>(c.z); | 3646 GLfloat z = static_cast<GLfloat>(c.z); |
| 3736 GLfloat temp[3] = { | 3647 GLfloat temp[3] = { |
| 3737 x, y, z, | 3648 x, y, z, |
| 3738 }; | 3649 }; |
| 3739 DoUniform3fv(location, 1, &temp[0]); | 3650 DoUniform3fv(location, 1, &temp[0]); |
| 3740 return error::kNoError; | 3651 return error::kNoError; |
| 3741 } | 3652 } |
| 3742 | 3653 |
| 3743 error::Error GLES2DecoderImpl::HandleUniform3fvImmediate( | 3654 error::Error GLES2DecoderImpl::HandleUniform3fvImmediate( |
| 3744 uint32_t immediate_data_size, | 3655 uint32_t immediate_data_size, |
| 3745 const void* cmd_data) { | 3656 const volatile void* cmd_data) { |
| 3746 const gles2::cmds::Uniform3fvImmediate& c = | 3657 const volatile gles2::cmds::Uniform3fvImmediate& c = |
| 3747 *static_cast<const gles2::cmds::Uniform3fvImmediate*>(cmd_data); | 3658 *static_cast<const volatile gles2::cmds::Uniform3fvImmediate*>(cmd_data); |
| 3748 (void)c; | |
| 3749 GLint location = static_cast<GLint>(c.location); | 3659 GLint location = static_cast<GLint>(c.location); |
| 3750 GLsizei count = static_cast<GLsizei>(c.count); | 3660 GLsizei count = static_cast<GLsizei>(c.count); |
| 3751 uint32_t data_size = 0; | 3661 uint32_t data_size = 0; |
| 3752 if (count >= 0 && | 3662 if (count >= 0 && |
| 3753 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 3, &data_size)) { | 3663 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 3, &data_size)) { |
| 3754 return error::kOutOfBounds; | 3664 return error::kOutOfBounds; |
| 3755 } | 3665 } |
| 3756 if (data_size > immediate_data_size) { | 3666 if (data_size > immediate_data_size) { |
| 3757 return error::kOutOfBounds; | 3667 return error::kOutOfBounds; |
| 3758 } | 3668 } |
| 3759 const GLfloat* v = | 3669 volatile const GLfloat* v = GetImmediateDataAs<volatile const GLfloat*>( |
| 3760 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 3670 c, data_size, immediate_data_size); |
| 3761 if (count < 0) { | 3671 if (count < 0) { |
| 3762 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform3fv", "count < 0"); | 3672 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform3fv", "count < 0"); |
| 3763 return error::kNoError; | 3673 return error::kNoError; |
| 3764 } | 3674 } |
| 3765 if (v == NULL) { | 3675 if (v == NULL) { |
| 3766 return error::kOutOfBounds; | 3676 return error::kOutOfBounds; |
| 3767 } | 3677 } |
| 3768 DoUniform3fv(location, count, v); | 3678 DoUniform3fv(location, count, v); |
| 3769 return error::kNoError; | 3679 return error::kNoError; |
| 3770 } | 3680 } |
| 3771 | 3681 |
| 3772 error::Error GLES2DecoderImpl::HandleUniform3i(uint32_t immediate_data_size, | 3682 error::Error GLES2DecoderImpl::HandleUniform3i(uint32_t immediate_data_size, |
| 3773 const void* cmd_data) { | 3683 const volatile void* cmd_data) { |
| 3774 const gles2::cmds::Uniform3i& c = | 3684 const volatile gles2::cmds::Uniform3i& c = |
| 3775 *static_cast<const gles2::cmds::Uniform3i*>(cmd_data); | 3685 *static_cast<const volatile gles2::cmds::Uniform3i*>(cmd_data); |
| 3776 (void)c; | |
| 3777 GLint location = static_cast<GLint>(c.location); | 3686 GLint location = static_cast<GLint>(c.location); |
| 3778 GLint x = static_cast<GLint>(c.x); | 3687 GLint x = static_cast<GLint>(c.x); |
| 3779 GLint y = static_cast<GLint>(c.y); | 3688 GLint y = static_cast<GLint>(c.y); |
| 3780 GLint z = static_cast<GLint>(c.z); | 3689 GLint z = static_cast<GLint>(c.z); |
| 3781 GLint temp[3] = { | 3690 GLint temp[3] = { |
| 3782 x, y, z, | 3691 x, y, z, |
| 3783 }; | 3692 }; |
| 3784 DoUniform3iv(location, 1, &temp[0]); | 3693 DoUniform3iv(location, 1, &temp[0]); |
| 3785 return error::kNoError; | 3694 return error::kNoError; |
| 3786 } | 3695 } |
| 3787 | 3696 |
| 3788 error::Error GLES2DecoderImpl::HandleUniform3ivImmediate( | 3697 error::Error GLES2DecoderImpl::HandleUniform3ivImmediate( |
| 3789 uint32_t immediate_data_size, | 3698 uint32_t immediate_data_size, |
| 3790 const void* cmd_data) { | 3699 const volatile void* cmd_data) { |
| 3791 const gles2::cmds::Uniform3ivImmediate& c = | 3700 const volatile gles2::cmds::Uniform3ivImmediate& c = |
| 3792 *static_cast<const gles2::cmds::Uniform3ivImmediate*>(cmd_data); | 3701 *static_cast<const volatile gles2::cmds::Uniform3ivImmediate*>(cmd_data); |
| 3793 (void)c; | |
| 3794 GLint location = static_cast<GLint>(c.location); | 3702 GLint location = static_cast<GLint>(c.location); |
| 3795 GLsizei count = static_cast<GLsizei>(c.count); | 3703 GLsizei count = static_cast<GLsizei>(c.count); |
| 3796 uint32_t data_size = 0; | 3704 uint32_t data_size = 0; |
| 3797 if (count >= 0 && | 3705 if (count >= 0 && |
| 3798 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 3, &data_size)) { | 3706 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 3, &data_size)) { |
| 3799 return error::kOutOfBounds; | 3707 return error::kOutOfBounds; |
| 3800 } | 3708 } |
| 3801 if (data_size > immediate_data_size) { | 3709 if (data_size > immediate_data_size) { |
| 3802 return error::kOutOfBounds; | 3710 return error::kOutOfBounds; |
| 3803 } | 3711 } |
| 3804 const GLint* v = | 3712 volatile const GLint* v = GetImmediateDataAs<volatile const GLint*>( |
| 3805 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); | 3713 c, data_size, immediate_data_size); |
| 3806 if (count < 0) { | 3714 if (count < 0) { |
| 3807 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform3iv", "count < 0"); | 3715 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform3iv", "count < 0"); |
| 3808 return error::kNoError; | 3716 return error::kNoError; |
| 3809 } | 3717 } |
| 3810 if (v == NULL) { | 3718 if (v == NULL) { |
| 3811 return error::kOutOfBounds; | 3719 return error::kOutOfBounds; |
| 3812 } | 3720 } |
| 3813 DoUniform3iv(location, count, v); | 3721 DoUniform3iv(location, count, v); |
| 3814 return error::kNoError; | 3722 return error::kNoError; |
| 3815 } | 3723 } |
| 3816 | 3724 |
| 3817 error::Error GLES2DecoderImpl::HandleUniform3ui(uint32_t immediate_data_size, | 3725 error::Error GLES2DecoderImpl::HandleUniform3ui(uint32_t immediate_data_size, |
| 3818 const void* cmd_data) { | 3726 const volatile void* cmd_data) { |
| 3819 if (!unsafe_es3_apis_enabled()) | 3727 if (!unsafe_es3_apis_enabled()) |
| 3820 return error::kUnknownCommand; | 3728 return error::kUnknownCommand; |
| 3821 const gles2::cmds::Uniform3ui& c = | 3729 const volatile gles2::cmds::Uniform3ui& c = |
| 3822 *static_cast<const gles2::cmds::Uniform3ui*>(cmd_data); | 3730 *static_cast<const volatile gles2::cmds::Uniform3ui*>(cmd_data); |
| 3823 (void)c; | |
| 3824 GLint location = static_cast<GLint>(c.location); | 3731 GLint location = static_cast<GLint>(c.location); |
| 3825 GLuint x = static_cast<GLuint>(c.x); | 3732 GLuint x = static_cast<GLuint>(c.x); |
| 3826 GLuint y = static_cast<GLuint>(c.y); | 3733 GLuint y = static_cast<GLuint>(c.y); |
| 3827 GLuint z = static_cast<GLuint>(c.z); | 3734 GLuint z = static_cast<GLuint>(c.z); |
| 3828 GLuint temp[3] = { | 3735 GLuint temp[3] = { |
| 3829 x, y, z, | 3736 x, y, z, |
| 3830 }; | 3737 }; |
| 3831 DoUniform3uiv(location, 1, &temp[0]); | 3738 DoUniform3uiv(location, 1, &temp[0]); |
| 3832 return error::kNoError; | 3739 return error::kNoError; |
| 3833 } | 3740 } |
| 3834 | 3741 |
| 3835 error::Error GLES2DecoderImpl::HandleUniform3uivImmediate( | 3742 error::Error GLES2DecoderImpl::HandleUniform3uivImmediate( |
| 3836 uint32_t immediate_data_size, | 3743 uint32_t immediate_data_size, |
| 3837 const void* cmd_data) { | 3744 const volatile void* cmd_data) { |
| 3838 if (!unsafe_es3_apis_enabled()) | 3745 if (!unsafe_es3_apis_enabled()) |
| 3839 return error::kUnknownCommand; | 3746 return error::kUnknownCommand; |
| 3840 const gles2::cmds::Uniform3uivImmediate& c = | 3747 const volatile gles2::cmds::Uniform3uivImmediate& c = |
| 3841 *static_cast<const gles2::cmds::Uniform3uivImmediate*>(cmd_data); | 3748 *static_cast<const volatile gles2::cmds::Uniform3uivImmediate*>(cmd_data); |
| 3842 (void)c; | |
| 3843 GLint location = static_cast<GLint>(c.location); | 3749 GLint location = static_cast<GLint>(c.location); |
| 3844 GLsizei count = static_cast<GLsizei>(c.count); | 3750 GLsizei count = static_cast<GLsizei>(c.count); |
| 3845 uint32_t data_size = 0; | 3751 uint32_t data_size = 0; |
| 3846 if (count >= 0 && | 3752 if (count >= 0 && |
| 3847 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 3, &data_size)) { | 3753 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 3, &data_size)) { |
| 3848 return error::kOutOfBounds; | 3754 return error::kOutOfBounds; |
| 3849 } | 3755 } |
| 3850 if (data_size > immediate_data_size) { | 3756 if (data_size > immediate_data_size) { |
| 3851 return error::kOutOfBounds; | 3757 return error::kOutOfBounds; |
| 3852 } | 3758 } |
| 3853 const GLuint* v = | 3759 volatile const GLuint* v = GetImmediateDataAs<volatile const GLuint*>( |
| 3854 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 3760 c, data_size, immediate_data_size); |
| 3855 if (count < 0) { | 3761 if (count < 0) { |
| 3856 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform3uiv", "count < 0"); | 3762 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform3uiv", "count < 0"); |
| 3857 return error::kNoError; | 3763 return error::kNoError; |
| 3858 } | 3764 } |
| 3859 if (v == NULL) { | 3765 if (v == NULL) { |
| 3860 return error::kOutOfBounds; | 3766 return error::kOutOfBounds; |
| 3861 } | 3767 } |
| 3862 DoUniform3uiv(location, count, v); | 3768 DoUniform3uiv(location, count, v); |
| 3863 return error::kNoError; | 3769 return error::kNoError; |
| 3864 } | 3770 } |
| 3865 | 3771 |
| 3866 error::Error GLES2DecoderImpl::HandleUniform4f(uint32_t immediate_data_size, | 3772 error::Error GLES2DecoderImpl::HandleUniform4f(uint32_t immediate_data_size, |
| 3867 const void* cmd_data) { | 3773 const volatile void* cmd_data) { |
| 3868 const gles2::cmds::Uniform4f& c = | 3774 const volatile gles2::cmds::Uniform4f& c = |
| 3869 *static_cast<const gles2::cmds::Uniform4f*>(cmd_data); | 3775 *static_cast<const volatile gles2::cmds::Uniform4f*>(cmd_data); |
| 3870 (void)c; | |
| 3871 GLint location = static_cast<GLint>(c.location); | 3776 GLint location = static_cast<GLint>(c.location); |
| 3872 GLfloat x = static_cast<GLfloat>(c.x); | 3777 GLfloat x = static_cast<GLfloat>(c.x); |
| 3873 GLfloat y = static_cast<GLfloat>(c.y); | 3778 GLfloat y = static_cast<GLfloat>(c.y); |
| 3874 GLfloat z = static_cast<GLfloat>(c.z); | 3779 GLfloat z = static_cast<GLfloat>(c.z); |
| 3875 GLfloat w = static_cast<GLfloat>(c.w); | 3780 GLfloat w = static_cast<GLfloat>(c.w); |
| 3876 GLfloat temp[4] = { | 3781 GLfloat temp[4] = { |
| 3877 x, y, z, w, | 3782 x, y, z, w, |
| 3878 }; | 3783 }; |
| 3879 DoUniform4fv(location, 1, &temp[0]); | 3784 DoUniform4fv(location, 1, &temp[0]); |
| 3880 return error::kNoError; | 3785 return error::kNoError; |
| 3881 } | 3786 } |
| 3882 | 3787 |
| 3883 error::Error GLES2DecoderImpl::HandleUniform4fvImmediate( | 3788 error::Error GLES2DecoderImpl::HandleUniform4fvImmediate( |
| 3884 uint32_t immediate_data_size, | 3789 uint32_t immediate_data_size, |
| 3885 const void* cmd_data) { | 3790 const volatile void* cmd_data) { |
| 3886 const gles2::cmds::Uniform4fvImmediate& c = | 3791 const volatile gles2::cmds::Uniform4fvImmediate& c = |
| 3887 *static_cast<const gles2::cmds::Uniform4fvImmediate*>(cmd_data); | 3792 *static_cast<const volatile gles2::cmds::Uniform4fvImmediate*>(cmd_data); |
| 3888 (void)c; | |
| 3889 GLint location = static_cast<GLint>(c.location); | 3793 GLint location = static_cast<GLint>(c.location); |
| 3890 GLsizei count = static_cast<GLsizei>(c.count); | 3794 GLsizei count = static_cast<GLsizei>(c.count); |
| 3891 uint32_t data_size = 0; | 3795 uint32_t data_size = 0; |
| 3892 if (count >= 0 && | 3796 if (count >= 0 && |
| 3893 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 4, &data_size)) { | 3797 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 4, &data_size)) { |
| 3894 return error::kOutOfBounds; | 3798 return error::kOutOfBounds; |
| 3895 } | 3799 } |
| 3896 if (data_size > immediate_data_size) { | 3800 if (data_size > immediate_data_size) { |
| 3897 return error::kOutOfBounds; | 3801 return error::kOutOfBounds; |
| 3898 } | 3802 } |
| 3899 const GLfloat* v = | 3803 volatile const GLfloat* v = GetImmediateDataAs<volatile const GLfloat*>( |
| 3900 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 3804 c, data_size, immediate_data_size); |
| 3901 if (count < 0) { | 3805 if (count < 0) { |
| 3902 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform4fv", "count < 0"); | 3806 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform4fv", "count < 0"); |
| 3903 return error::kNoError; | 3807 return error::kNoError; |
| 3904 } | 3808 } |
| 3905 if (v == NULL) { | 3809 if (v == NULL) { |
| 3906 return error::kOutOfBounds; | 3810 return error::kOutOfBounds; |
| 3907 } | 3811 } |
| 3908 DoUniform4fv(location, count, v); | 3812 DoUniform4fv(location, count, v); |
| 3909 return error::kNoError; | 3813 return error::kNoError; |
| 3910 } | 3814 } |
| 3911 | 3815 |
| 3912 error::Error GLES2DecoderImpl::HandleUniform4i(uint32_t immediate_data_size, | 3816 error::Error GLES2DecoderImpl::HandleUniform4i(uint32_t immediate_data_size, |
| 3913 const void* cmd_data) { | 3817 const volatile void* cmd_data) { |
| 3914 const gles2::cmds::Uniform4i& c = | 3818 const volatile gles2::cmds::Uniform4i& c = |
| 3915 *static_cast<const gles2::cmds::Uniform4i*>(cmd_data); | 3819 *static_cast<const volatile gles2::cmds::Uniform4i*>(cmd_data); |
| 3916 (void)c; | |
| 3917 GLint location = static_cast<GLint>(c.location); | 3820 GLint location = static_cast<GLint>(c.location); |
| 3918 GLint x = static_cast<GLint>(c.x); | 3821 GLint x = static_cast<GLint>(c.x); |
| 3919 GLint y = static_cast<GLint>(c.y); | 3822 GLint y = static_cast<GLint>(c.y); |
| 3920 GLint z = static_cast<GLint>(c.z); | 3823 GLint z = static_cast<GLint>(c.z); |
| 3921 GLint w = static_cast<GLint>(c.w); | 3824 GLint w = static_cast<GLint>(c.w); |
| 3922 GLint temp[4] = { | 3825 GLint temp[4] = { |
| 3923 x, y, z, w, | 3826 x, y, z, w, |
| 3924 }; | 3827 }; |
| 3925 DoUniform4iv(location, 1, &temp[0]); | 3828 DoUniform4iv(location, 1, &temp[0]); |
| 3926 return error::kNoError; | 3829 return error::kNoError; |
| 3927 } | 3830 } |
| 3928 | 3831 |
| 3929 error::Error GLES2DecoderImpl::HandleUniform4ivImmediate( | 3832 error::Error GLES2DecoderImpl::HandleUniform4ivImmediate( |
| 3930 uint32_t immediate_data_size, | 3833 uint32_t immediate_data_size, |
| 3931 const void* cmd_data) { | 3834 const volatile void* cmd_data) { |
| 3932 const gles2::cmds::Uniform4ivImmediate& c = | 3835 const volatile gles2::cmds::Uniform4ivImmediate& c = |
| 3933 *static_cast<const gles2::cmds::Uniform4ivImmediate*>(cmd_data); | 3836 *static_cast<const volatile gles2::cmds::Uniform4ivImmediate*>(cmd_data); |
| 3934 (void)c; | |
| 3935 GLint location = static_cast<GLint>(c.location); | 3837 GLint location = static_cast<GLint>(c.location); |
| 3936 GLsizei count = static_cast<GLsizei>(c.count); | 3838 GLsizei count = static_cast<GLsizei>(c.count); |
| 3937 uint32_t data_size = 0; | 3839 uint32_t data_size = 0; |
| 3938 if (count >= 0 && | 3840 if (count >= 0 && |
| 3939 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 4, &data_size)) { | 3841 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 4, &data_size)) { |
| 3940 return error::kOutOfBounds; | 3842 return error::kOutOfBounds; |
| 3941 } | 3843 } |
| 3942 if (data_size > immediate_data_size) { | 3844 if (data_size > immediate_data_size) { |
| 3943 return error::kOutOfBounds; | 3845 return error::kOutOfBounds; |
| 3944 } | 3846 } |
| 3945 const GLint* v = | 3847 volatile const GLint* v = GetImmediateDataAs<volatile const GLint*>( |
| 3946 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); | 3848 c, data_size, immediate_data_size); |
| 3947 if (count < 0) { | 3849 if (count < 0) { |
| 3948 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform4iv", "count < 0"); | 3850 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform4iv", "count < 0"); |
| 3949 return error::kNoError; | 3851 return error::kNoError; |
| 3950 } | 3852 } |
| 3951 if (v == NULL) { | 3853 if (v == NULL) { |
| 3952 return error::kOutOfBounds; | 3854 return error::kOutOfBounds; |
| 3953 } | 3855 } |
| 3954 DoUniform4iv(location, count, v); | 3856 DoUniform4iv(location, count, v); |
| 3955 return error::kNoError; | 3857 return error::kNoError; |
| 3956 } | 3858 } |
| 3957 | 3859 |
| 3958 error::Error GLES2DecoderImpl::HandleUniform4ui(uint32_t immediate_data_size, | 3860 error::Error GLES2DecoderImpl::HandleUniform4ui(uint32_t immediate_data_size, |
| 3959 const void* cmd_data) { | 3861 const volatile void* cmd_data) { |
| 3960 if (!unsafe_es3_apis_enabled()) | 3862 if (!unsafe_es3_apis_enabled()) |
| 3961 return error::kUnknownCommand; | 3863 return error::kUnknownCommand; |
| 3962 const gles2::cmds::Uniform4ui& c = | 3864 const volatile gles2::cmds::Uniform4ui& c = |
| 3963 *static_cast<const gles2::cmds::Uniform4ui*>(cmd_data); | 3865 *static_cast<const volatile gles2::cmds::Uniform4ui*>(cmd_data); |
| 3964 (void)c; | |
| 3965 GLint location = static_cast<GLint>(c.location); | 3866 GLint location = static_cast<GLint>(c.location); |
| 3966 GLuint x = static_cast<GLuint>(c.x); | 3867 GLuint x = static_cast<GLuint>(c.x); |
| 3967 GLuint y = static_cast<GLuint>(c.y); | 3868 GLuint y = static_cast<GLuint>(c.y); |
| 3968 GLuint z = static_cast<GLuint>(c.z); | 3869 GLuint z = static_cast<GLuint>(c.z); |
| 3969 GLuint w = static_cast<GLuint>(c.w); | 3870 GLuint w = static_cast<GLuint>(c.w); |
| 3970 GLuint temp[4] = { | 3871 GLuint temp[4] = { |
| 3971 x, y, z, w, | 3872 x, y, z, w, |
| 3972 }; | 3873 }; |
| 3973 DoUniform4uiv(location, 1, &temp[0]); | 3874 DoUniform4uiv(location, 1, &temp[0]); |
| 3974 return error::kNoError; | 3875 return error::kNoError; |
| 3975 } | 3876 } |
| 3976 | 3877 |
| 3977 error::Error GLES2DecoderImpl::HandleUniform4uivImmediate( | 3878 error::Error GLES2DecoderImpl::HandleUniform4uivImmediate( |
| 3978 uint32_t immediate_data_size, | 3879 uint32_t immediate_data_size, |
| 3979 const void* cmd_data) { | 3880 const volatile void* cmd_data) { |
| 3980 if (!unsafe_es3_apis_enabled()) | 3881 if (!unsafe_es3_apis_enabled()) |
| 3981 return error::kUnknownCommand; | 3882 return error::kUnknownCommand; |
| 3982 const gles2::cmds::Uniform4uivImmediate& c = | 3883 const volatile gles2::cmds::Uniform4uivImmediate& c = |
| 3983 *static_cast<const gles2::cmds::Uniform4uivImmediate*>(cmd_data); | 3884 *static_cast<const volatile gles2::cmds::Uniform4uivImmediate*>(cmd_data); |
| 3984 (void)c; | |
| 3985 GLint location = static_cast<GLint>(c.location); | 3885 GLint location = static_cast<GLint>(c.location); |
| 3986 GLsizei count = static_cast<GLsizei>(c.count); | 3886 GLsizei count = static_cast<GLsizei>(c.count); |
| 3987 uint32_t data_size = 0; | 3887 uint32_t data_size = 0; |
| 3988 if (count >= 0 && | 3888 if (count >= 0 && |
| 3989 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 4, &data_size)) { | 3889 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 4, &data_size)) { |
| 3990 return error::kOutOfBounds; | 3890 return error::kOutOfBounds; |
| 3991 } | 3891 } |
| 3992 if (data_size > immediate_data_size) { | 3892 if (data_size > immediate_data_size) { |
| 3993 return error::kOutOfBounds; | 3893 return error::kOutOfBounds; |
| 3994 } | 3894 } |
| 3995 const GLuint* v = | 3895 volatile const GLuint* v = GetImmediateDataAs<volatile const GLuint*>( |
| 3996 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 3896 c, data_size, immediate_data_size); |
| 3997 if (count < 0) { | 3897 if (count < 0) { |
| 3998 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform4uiv", "count < 0"); | 3898 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform4uiv", "count < 0"); |
| 3999 return error::kNoError; | 3899 return error::kNoError; |
| 4000 } | 3900 } |
| 4001 if (v == NULL) { | 3901 if (v == NULL) { |
| 4002 return error::kOutOfBounds; | 3902 return error::kOutOfBounds; |
| 4003 } | 3903 } |
| 4004 DoUniform4uiv(location, count, v); | 3904 DoUniform4uiv(location, count, v); |
| 4005 return error::kNoError; | 3905 return error::kNoError; |
| 4006 } | 3906 } |
| 4007 | 3907 |
| 4008 error::Error GLES2DecoderImpl::HandleUniformMatrix2fvImmediate( | 3908 error::Error GLES2DecoderImpl::HandleUniformMatrix2fvImmediate( |
| 4009 uint32_t immediate_data_size, | 3909 uint32_t immediate_data_size, |
| 4010 const void* cmd_data) { | 3910 const volatile void* cmd_data) { |
| 4011 const gles2::cmds::UniformMatrix2fvImmediate& c = | 3911 const volatile gles2::cmds::UniformMatrix2fvImmediate& c = |
| 4012 *static_cast<const gles2::cmds::UniformMatrix2fvImmediate*>(cmd_data); | 3912 *static_cast<const volatile gles2::cmds::UniformMatrix2fvImmediate*>( |
| 4013 (void)c; | 3913 cmd_data); |
| 4014 GLint location = static_cast<GLint>(c.location); | 3914 GLint location = static_cast<GLint>(c.location); |
| 4015 GLsizei count = static_cast<GLsizei>(c.count); | 3915 GLsizei count = static_cast<GLsizei>(c.count); |
| 4016 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 3916 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
| 4017 uint32_t data_size = 0; | 3917 uint32_t data_size = 0; |
| 4018 if (count >= 0 && | 3918 if (count >= 0 && |
| 4019 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 4, &data_size)) { | 3919 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 4, &data_size)) { |
| 4020 return error::kOutOfBounds; | 3920 return error::kOutOfBounds; |
| 4021 } | 3921 } |
| 4022 if (data_size > immediate_data_size) { | 3922 if (data_size > immediate_data_size) { |
| 4023 return error::kOutOfBounds; | 3923 return error::kOutOfBounds; |
| 4024 } | 3924 } |
| 4025 const GLfloat* value = | 3925 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>( |
| 4026 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 3926 c, data_size, immediate_data_size); |
| 4027 if (count < 0) { | 3927 if (count < 0) { |
| 4028 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix2fv", "count < 0"); | 3928 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix2fv", "count < 0"); |
| 4029 return error::kNoError; | 3929 return error::kNoError; |
| 4030 } | 3930 } |
| 4031 if (value == NULL) { | 3931 if (value == NULL) { |
| 4032 return error::kOutOfBounds; | 3932 return error::kOutOfBounds; |
| 4033 } | 3933 } |
| 4034 DoUniformMatrix2fv(location, count, transpose, value); | 3934 DoUniformMatrix2fv(location, count, transpose, value); |
| 4035 return error::kNoError; | 3935 return error::kNoError; |
| 4036 } | 3936 } |
| 4037 | 3937 |
| 4038 error::Error GLES2DecoderImpl::HandleUniformMatrix2x3fvImmediate( | 3938 error::Error GLES2DecoderImpl::HandleUniformMatrix2x3fvImmediate( |
| 4039 uint32_t immediate_data_size, | 3939 uint32_t immediate_data_size, |
| 4040 const void* cmd_data) { | 3940 const volatile void* cmd_data) { |
| 4041 if (!unsafe_es3_apis_enabled()) | 3941 if (!unsafe_es3_apis_enabled()) |
| 4042 return error::kUnknownCommand; | 3942 return error::kUnknownCommand; |
| 4043 const gles2::cmds::UniformMatrix2x3fvImmediate& c = | 3943 const volatile gles2::cmds::UniformMatrix2x3fvImmediate& c = |
| 4044 *static_cast<const gles2::cmds::UniformMatrix2x3fvImmediate*>(cmd_data); | 3944 *static_cast<const volatile gles2::cmds::UniformMatrix2x3fvImmediate*>( |
| 4045 (void)c; | 3945 cmd_data); |
| 4046 GLint location = static_cast<GLint>(c.location); | 3946 GLint location = static_cast<GLint>(c.location); |
| 4047 GLsizei count = static_cast<GLsizei>(c.count); | 3947 GLsizei count = static_cast<GLsizei>(c.count); |
| 4048 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 3948 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
| 4049 uint32_t data_size = 0; | 3949 uint32_t data_size = 0; |
| 4050 if (count >= 0 && | 3950 if (count >= 0 && |
| 4051 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 6, &data_size)) { | 3951 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 6, &data_size)) { |
| 4052 return error::kOutOfBounds; | 3952 return error::kOutOfBounds; |
| 4053 } | 3953 } |
| 4054 if (data_size > immediate_data_size) { | 3954 if (data_size > immediate_data_size) { |
| 4055 return error::kOutOfBounds; | 3955 return error::kOutOfBounds; |
| 4056 } | 3956 } |
| 4057 const GLfloat* value = | 3957 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>( |
| 4058 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 3958 c, data_size, immediate_data_size); |
| 4059 if (count < 0) { | 3959 if (count < 0) { |
| 4060 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix2x3fv", "count < 0"); | 3960 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix2x3fv", "count < 0"); |
| 4061 return error::kNoError; | 3961 return error::kNoError; |
| 4062 } | 3962 } |
| 4063 if (value == NULL) { | 3963 if (value == NULL) { |
| 4064 return error::kOutOfBounds; | 3964 return error::kOutOfBounds; |
| 4065 } | 3965 } |
| 4066 DoUniformMatrix2x3fv(location, count, transpose, value); | 3966 DoUniformMatrix2x3fv(location, count, transpose, value); |
| 4067 return error::kNoError; | 3967 return error::kNoError; |
| 4068 } | 3968 } |
| 4069 | 3969 |
| 4070 error::Error GLES2DecoderImpl::HandleUniformMatrix2x4fvImmediate( | 3970 error::Error GLES2DecoderImpl::HandleUniformMatrix2x4fvImmediate( |
| 4071 uint32_t immediate_data_size, | 3971 uint32_t immediate_data_size, |
| 4072 const void* cmd_data) { | 3972 const volatile void* cmd_data) { |
| 4073 if (!unsafe_es3_apis_enabled()) | 3973 if (!unsafe_es3_apis_enabled()) |
| 4074 return error::kUnknownCommand; | 3974 return error::kUnknownCommand; |
| 4075 const gles2::cmds::UniformMatrix2x4fvImmediate& c = | 3975 const volatile gles2::cmds::UniformMatrix2x4fvImmediate& c = |
| 4076 *static_cast<const gles2::cmds::UniformMatrix2x4fvImmediate*>(cmd_data); | 3976 *static_cast<const volatile gles2::cmds::UniformMatrix2x4fvImmediate*>( |
| 4077 (void)c; | 3977 cmd_data); |
| 4078 GLint location = static_cast<GLint>(c.location); | 3978 GLint location = static_cast<GLint>(c.location); |
| 4079 GLsizei count = static_cast<GLsizei>(c.count); | 3979 GLsizei count = static_cast<GLsizei>(c.count); |
| 4080 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 3980 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
| 4081 uint32_t data_size = 0; | 3981 uint32_t data_size = 0; |
| 4082 if (count >= 0 && | 3982 if (count >= 0 && |
| 4083 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 8, &data_size)) { | 3983 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 8, &data_size)) { |
| 4084 return error::kOutOfBounds; | 3984 return error::kOutOfBounds; |
| 4085 } | 3985 } |
| 4086 if (data_size > immediate_data_size) { | 3986 if (data_size > immediate_data_size) { |
| 4087 return error::kOutOfBounds; | 3987 return error::kOutOfBounds; |
| 4088 } | 3988 } |
| 4089 const GLfloat* value = | 3989 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>( |
| 4090 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 3990 c, data_size, immediate_data_size); |
| 4091 if (count < 0) { | 3991 if (count < 0) { |
| 4092 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix2x4fv", "count < 0"); | 3992 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix2x4fv", "count < 0"); |
| 4093 return error::kNoError; | 3993 return error::kNoError; |
| 4094 } | 3994 } |
| 4095 if (value == NULL) { | 3995 if (value == NULL) { |
| 4096 return error::kOutOfBounds; | 3996 return error::kOutOfBounds; |
| 4097 } | 3997 } |
| 4098 DoUniformMatrix2x4fv(location, count, transpose, value); | 3998 DoUniformMatrix2x4fv(location, count, transpose, value); |
| 4099 return error::kNoError; | 3999 return error::kNoError; |
| 4100 } | 4000 } |
| 4101 | 4001 |
| 4102 error::Error GLES2DecoderImpl::HandleUniformMatrix3fvImmediate( | 4002 error::Error GLES2DecoderImpl::HandleUniformMatrix3fvImmediate( |
| 4103 uint32_t immediate_data_size, | 4003 uint32_t immediate_data_size, |
| 4104 const void* cmd_data) { | 4004 const volatile void* cmd_data) { |
| 4105 const gles2::cmds::UniformMatrix3fvImmediate& c = | 4005 const volatile gles2::cmds::UniformMatrix3fvImmediate& c = |
| 4106 *static_cast<const gles2::cmds::UniformMatrix3fvImmediate*>(cmd_data); | 4006 *static_cast<const volatile gles2::cmds::UniformMatrix3fvImmediate*>( |
| 4107 (void)c; | 4007 cmd_data); |
| 4108 GLint location = static_cast<GLint>(c.location); | 4008 GLint location = static_cast<GLint>(c.location); |
| 4109 GLsizei count = static_cast<GLsizei>(c.count); | 4009 GLsizei count = static_cast<GLsizei>(c.count); |
| 4110 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 4010 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
| 4111 uint32_t data_size = 0; | 4011 uint32_t data_size = 0; |
| 4112 if (count >= 0 && | 4012 if (count >= 0 && |
| 4113 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 9, &data_size)) { | 4013 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 9, &data_size)) { |
| 4114 return error::kOutOfBounds; | 4014 return error::kOutOfBounds; |
| 4115 } | 4015 } |
| 4116 if (data_size > immediate_data_size) { | 4016 if (data_size > immediate_data_size) { |
| 4117 return error::kOutOfBounds; | 4017 return error::kOutOfBounds; |
| 4118 } | 4018 } |
| 4119 const GLfloat* value = | 4019 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>( |
| 4120 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 4020 c, data_size, immediate_data_size); |
| 4121 if (count < 0) { | 4021 if (count < 0) { |
| 4122 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix3fv", "count < 0"); | 4022 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix3fv", "count < 0"); |
| 4123 return error::kNoError; | 4023 return error::kNoError; |
| 4124 } | 4024 } |
| 4125 if (value == NULL) { | 4025 if (value == NULL) { |
| 4126 return error::kOutOfBounds; | 4026 return error::kOutOfBounds; |
| 4127 } | 4027 } |
| 4128 DoUniformMatrix3fv(location, count, transpose, value); | 4028 DoUniformMatrix3fv(location, count, transpose, value); |
| 4129 return error::kNoError; | 4029 return error::kNoError; |
| 4130 } | 4030 } |
| 4131 | 4031 |
| 4132 error::Error GLES2DecoderImpl::HandleUniformMatrix3x2fvImmediate( | 4032 error::Error GLES2DecoderImpl::HandleUniformMatrix3x2fvImmediate( |
| 4133 uint32_t immediate_data_size, | 4033 uint32_t immediate_data_size, |
| 4134 const void* cmd_data) { | 4034 const volatile void* cmd_data) { |
| 4135 if (!unsafe_es3_apis_enabled()) | 4035 if (!unsafe_es3_apis_enabled()) |
| 4136 return error::kUnknownCommand; | 4036 return error::kUnknownCommand; |
| 4137 const gles2::cmds::UniformMatrix3x2fvImmediate& c = | 4037 const volatile gles2::cmds::UniformMatrix3x2fvImmediate& c = |
| 4138 *static_cast<const gles2::cmds::UniformMatrix3x2fvImmediate*>(cmd_data); | 4038 *static_cast<const volatile gles2::cmds::UniformMatrix3x2fvImmediate*>( |
| 4139 (void)c; | 4039 cmd_data); |
| 4140 GLint location = static_cast<GLint>(c.location); | 4040 GLint location = static_cast<GLint>(c.location); |
| 4141 GLsizei count = static_cast<GLsizei>(c.count); | 4041 GLsizei count = static_cast<GLsizei>(c.count); |
| 4142 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 4042 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
| 4143 uint32_t data_size = 0; | 4043 uint32_t data_size = 0; |
| 4144 if (count >= 0 && | 4044 if (count >= 0 && |
| 4145 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 6, &data_size)) { | 4045 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 6, &data_size)) { |
| 4146 return error::kOutOfBounds; | 4046 return error::kOutOfBounds; |
| 4147 } | 4047 } |
| 4148 if (data_size > immediate_data_size) { | 4048 if (data_size > immediate_data_size) { |
| 4149 return error::kOutOfBounds; | 4049 return error::kOutOfBounds; |
| 4150 } | 4050 } |
| 4151 const GLfloat* value = | 4051 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>( |
| 4152 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 4052 c, data_size, immediate_data_size); |
| 4153 if (count < 0) { | 4053 if (count < 0) { |
| 4154 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix3x2fv", "count < 0"); | 4054 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix3x2fv", "count < 0"); |
| 4155 return error::kNoError; | 4055 return error::kNoError; |
| 4156 } | 4056 } |
| 4157 if (value == NULL) { | 4057 if (value == NULL) { |
| 4158 return error::kOutOfBounds; | 4058 return error::kOutOfBounds; |
| 4159 } | 4059 } |
| 4160 DoUniformMatrix3x2fv(location, count, transpose, value); | 4060 DoUniformMatrix3x2fv(location, count, transpose, value); |
| 4161 return error::kNoError; | 4061 return error::kNoError; |
| 4162 } | 4062 } |
| 4163 | 4063 |
| 4164 error::Error GLES2DecoderImpl::HandleUniformMatrix3x4fvImmediate( | 4064 error::Error GLES2DecoderImpl::HandleUniformMatrix3x4fvImmediate( |
| 4165 uint32_t immediate_data_size, | 4065 uint32_t immediate_data_size, |
| 4166 const void* cmd_data) { | 4066 const volatile void* cmd_data) { |
| 4167 if (!unsafe_es3_apis_enabled()) | 4067 if (!unsafe_es3_apis_enabled()) |
| 4168 return error::kUnknownCommand; | 4068 return error::kUnknownCommand; |
| 4169 const gles2::cmds::UniformMatrix3x4fvImmediate& c = | 4069 const volatile gles2::cmds::UniformMatrix3x4fvImmediate& c = |
| 4170 *static_cast<const gles2::cmds::UniformMatrix3x4fvImmediate*>(cmd_data); | 4070 *static_cast<const volatile gles2::cmds::UniformMatrix3x4fvImmediate*>( |
| 4171 (void)c; | 4071 cmd_data); |
| 4172 GLint location = static_cast<GLint>(c.location); | 4072 GLint location = static_cast<GLint>(c.location); |
| 4173 GLsizei count = static_cast<GLsizei>(c.count); | 4073 GLsizei count = static_cast<GLsizei>(c.count); |
| 4174 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 4074 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
| 4175 uint32_t data_size = 0; | 4075 uint32_t data_size = 0; |
| 4176 if (count >= 0 && | 4076 if (count >= 0 && |
| 4177 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 12, &data_size)) { | 4077 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 12, &data_size)) { |
| 4178 return error::kOutOfBounds; | 4078 return error::kOutOfBounds; |
| 4179 } | 4079 } |
| 4180 if (data_size > immediate_data_size) { | 4080 if (data_size > immediate_data_size) { |
| 4181 return error::kOutOfBounds; | 4081 return error::kOutOfBounds; |
| 4182 } | 4082 } |
| 4183 const GLfloat* value = | 4083 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>( |
| 4184 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 4084 c, data_size, immediate_data_size); |
| 4185 if (count < 0) { | 4085 if (count < 0) { |
| 4186 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix3x4fv", "count < 0"); | 4086 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix3x4fv", "count < 0"); |
| 4187 return error::kNoError; | 4087 return error::kNoError; |
| 4188 } | 4088 } |
| 4189 if (value == NULL) { | 4089 if (value == NULL) { |
| 4190 return error::kOutOfBounds; | 4090 return error::kOutOfBounds; |
| 4191 } | 4091 } |
| 4192 DoUniformMatrix3x4fv(location, count, transpose, value); | 4092 DoUniformMatrix3x4fv(location, count, transpose, value); |
| 4193 return error::kNoError; | 4093 return error::kNoError; |
| 4194 } | 4094 } |
| 4195 | 4095 |
| 4196 error::Error GLES2DecoderImpl::HandleUniformMatrix4fvImmediate( | 4096 error::Error GLES2DecoderImpl::HandleUniformMatrix4fvImmediate( |
| 4197 uint32_t immediate_data_size, | 4097 uint32_t immediate_data_size, |
| 4198 const void* cmd_data) { | 4098 const volatile void* cmd_data) { |
| 4199 const gles2::cmds::UniformMatrix4fvImmediate& c = | 4099 const volatile gles2::cmds::UniformMatrix4fvImmediate& c = |
| 4200 *static_cast<const gles2::cmds::UniformMatrix4fvImmediate*>(cmd_data); | 4100 *static_cast<const volatile gles2::cmds::UniformMatrix4fvImmediate*>( |
| 4201 (void)c; | 4101 cmd_data); |
| 4202 GLint location = static_cast<GLint>(c.location); | 4102 GLint location = static_cast<GLint>(c.location); |
| 4203 GLsizei count = static_cast<GLsizei>(c.count); | 4103 GLsizei count = static_cast<GLsizei>(c.count); |
| 4204 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 4104 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
| 4205 uint32_t data_size = 0; | 4105 uint32_t data_size = 0; |
| 4206 if (count >= 0 && | 4106 if (count >= 0 && |
| 4207 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 16, &data_size)) { | 4107 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 16, &data_size)) { |
| 4208 return error::kOutOfBounds; | 4108 return error::kOutOfBounds; |
| 4209 } | 4109 } |
| 4210 if (data_size > immediate_data_size) { | 4110 if (data_size > immediate_data_size) { |
| 4211 return error::kOutOfBounds; | 4111 return error::kOutOfBounds; |
| 4212 } | 4112 } |
| 4213 const GLfloat* value = | 4113 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>( |
| 4214 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 4114 c, data_size, immediate_data_size); |
| 4215 if (count < 0) { | 4115 if (count < 0) { |
| 4216 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix4fv", "count < 0"); | 4116 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix4fv", "count < 0"); |
| 4217 return error::kNoError; | 4117 return error::kNoError; |
| 4218 } | 4118 } |
| 4219 if (value == NULL) { | 4119 if (value == NULL) { |
| 4220 return error::kOutOfBounds; | 4120 return error::kOutOfBounds; |
| 4221 } | 4121 } |
| 4222 DoUniformMatrix4fv(location, count, transpose, value); | 4122 DoUniformMatrix4fv(location, count, transpose, value); |
| 4223 return error::kNoError; | 4123 return error::kNoError; |
| 4224 } | 4124 } |
| 4225 | 4125 |
| 4226 error::Error GLES2DecoderImpl::HandleUniformMatrix4x2fvImmediate( | 4126 error::Error GLES2DecoderImpl::HandleUniformMatrix4x2fvImmediate( |
| 4227 uint32_t immediate_data_size, | 4127 uint32_t immediate_data_size, |
| 4228 const void* cmd_data) { | 4128 const volatile void* cmd_data) { |
| 4229 if (!unsafe_es3_apis_enabled()) | 4129 if (!unsafe_es3_apis_enabled()) |
| 4230 return error::kUnknownCommand; | 4130 return error::kUnknownCommand; |
| 4231 const gles2::cmds::UniformMatrix4x2fvImmediate& c = | 4131 const volatile gles2::cmds::UniformMatrix4x2fvImmediate& c = |
| 4232 *static_cast<const gles2::cmds::UniformMatrix4x2fvImmediate*>(cmd_data); | 4132 *static_cast<const volatile gles2::cmds::UniformMatrix4x2fvImmediate*>( |
| 4233 (void)c; | 4133 cmd_data); |
| 4234 GLint location = static_cast<GLint>(c.location); | 4134 GLint location = static_cast<GLint>(c.location); |
| 4235 GLsizei count = static_cast<GLsizei>(c.count); | 4135 GLsizei count = static_cast<GLsizei>(c.count); |
| 4236 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 4136 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
| 4237 uint32_t data_size = 0; | 4137 uint32_t data_size = 0; |
| 4238 if (count >= 0 && | 4138 if (count >= 0 && |
| 4239 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 8, &data_size)) { | 4139 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 8, &data_size)) { |
| 4240 return error::kOutOfBounds; | 4140 return error::kOutOfBounds; |
| 4241 } | 4141 } |
| 4242 if (data_size > immediate_data_size) { | 4142 if (data_size > immediate_data_size) { |
| 4243 return error::kOutOfBounds; | 4143 return error::kOutOfBounds; |
| 4244 } | 4144 } |
| 4245 const GLfloat* value = | 4145 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>( |
| 4246 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 4146 c, data_size, immediate_data_size); |
| 4247 if (count < 0) { | 4147 if (count < 0) { |
| 4248 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix4x2fv", "count < 0"); | 4148 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix4x2fv", "count < 0"); |
| 4249 return error::kNoError; | 4149 return error::kNoError; |
| 4250 } | 4150 } |
| 4251 if (value == NULL) { | 4151 if (value == NULL) { |
| 4252 return error::kOutOfBounds; | 4152 return error::kOutOfBounds; |
| 4253 } | 4153 } |
| 4254 DoUniformMatrix4x2fv(location, count, transpose, value); | 4154 DoUniformMatrix4x2fv(location, count, transpose, value); |
| 4255 return error::kNoError; | 4155 return error::kNoError; |
| 4256 } | 4156 } |
| 4257 | 4157 |
| 4258 error::Error GLES2DecoderImpl::HandleUniformMatrix4x3fvImmediate( | 4158 error::Error GLES2DecoderImpl::HandleUniformMatrix4x3fvImmediate( |
| 4259 uint32_t immediate_data_size, | 4159 uint32_t immediate_data_size, |
| 4260 const void* cmd_data) { | 4160 const volatile void* cmd_data) { |
| 4261 if (!unsafe_es3_apis_enabled()) | 4161 if (!unsafe_es3_apis_enabled()) |
| 4262 return error::kUnknownCommand; | 4162 return error::kUnknownCommand; |
| 4263 const gles2::cmds::UniformMatrix4x3fvImmediate& c = | 4163 const volatile gles2::cmds::UniformMatrix4x3fvImmediate& c = |
| 4264 *static_cast<const gles2::cmds::UniformMatrix4x3fvImmediate*>(cmd_data); | 4164 *static_cast<const volatile gles2::cmds::UniformMatrix4x3fvImmediate*>( |
| 4265 (void)c; | 4165 cmd_data); |
| 4266 GLint location = static_cast<GLint>(c.location); | 4166 GLint location = static_cast<GLint>(c.location); |
| 4267 GLsizei count = static_cast<GLsizei>(c.count); | 4167 GLsizei count = static_cast<GLsizei>(c.count); |
| 4268 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 4168 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
| 4269 uint32_t data_size = 0; | 4169 uint32_t data_size = 0; |
| 4270 if (count >= 0 && | 4170 if (count >= 0 && |
| 4271 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 12, &data_size)) { | 4171 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 12, &data_size)) { |
| 4272 return error::kOutOfBounds; | 4172 return error::kOutOfBounds; |
| 4273 } | 4173 } |
| 4274 if (data_size > immediate_data_size) { | 4174 if (data_size > immediate_data_size) { |
| 4275 return error::kOutOfBounds; | 4175 return error::kOutOfBounds; |
| 4276 } | 4176 } |
| 4277 const GLfloat* value = | 4177 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>( |
| 4278 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 4178 c, data_size, immediate_data_size); |
| 4279 if (count < 0) { | 4179 if (count < 0) { |
| 4280 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix4x3fv", "count < 0"); | 4180 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix4x3fv", "count < 0"); |
| 4281 return error::kNoError; | 4181 return error::kNoError; |
| 4282 } | 4182 } |
| 4283 if (value == NULL) { | 4183 if (value == NULL) { |
| 4284 return error::kOutOfBounds; | 4184 return error::kOutOfBounds; |
| 4285 } | 4185 } |
| 4286 DoUniformMatrix4x3fv(location, count, transpose, value); | 4186 DoUniformMatrix4x3fv(location, count, transpose, value); |
| 4287 return error::kNoError; | 4187 return error::kNoError; |
| 4288 } | 4188 } |
| 4289 | 4189 |
| 4290 error::Error GLES2DecoderImpl::HandleUseProgram(uint32_t immediate_data_size, | 4190 error::Error GLES2DecoderImpl::HandleUseProgram(uint32_t immediate_data_size, |
| 4291 const void* cmd_data) { | 4191 const volatile void* cmd_data) { |
| 4292 const gles2::cmds::UseProgram& c = | 4192 const volatile gles2::cmds::UseProgram& c = |
| 4293 *static_cast<const gles2::cmds::UseProgram*>(cmd_data); | 4193 *static_cast<const volatile gles2::cmds::UseProgram*>(cmd_data); |
| 4294 (void)c; | |
| 4295 GLuint program = c.program; | 4194 GLuint program = c.program; |
| 4296 DoUseProgram(program); | 4195 DoUseProgram(program); |
| 4297 return error::kNoError; | 4196 return error::kNoError; |
| 4298 } | 4197 } |
| 4299 | 4198 |
| 4300 error::Error GLES2DecoderImpl::HandleValidateProgram( | 4199 error::Error GLES2DecoderImpl::HandleValidateProgram( |
| 4301 uint32_t immediate_data_size, | 4200 uint32_t immediate_data_size, |
| 4302 const void* cmd_data) { | 4201 const volatile void* cmd_data) { |
| 4303 const gles2::cmds::ValidateProgram& c = | 4202 const volatile gles2::cmds::ValidateProgram& c = |
| 4304 *static_cast<const gles2::cmds::ValidateProgram*>(cmd_data); | 4203 *static_cast<const volatile gles2::cmds::ValidateProgram*>(cmd_data); |
| 4305 (void)c; | |
| 4306 GLuint program = c.program; | 4204 GLuint program = c.program; |
| 4307 DoValidateProgram(program); | 4205 DoValidateProgram(program); |
| 4308 return error::kNoError; | 4206 return error::kNoError; |
| 4309 } | 4207 } |
| 4310 | 4208 |
| 4311 error::Error GLES2DecoderImpl::HandleVertexAttrib1f( | 4209 error::Error GLES2DecoderImpl::HandleVertexAttrib1f( |
| 4312 uint32_t immediate_data_size, | 4210 uint32_t immediate_data_size, |
| 4313 const void* cmd_data) { | 4211 const volatile void* cmd_data) { |
| 4314 const gles2::cmds::VertexAttrib1f& c = | 4212 const volatile gles2::cmds::VertexAttrib1f& c = |
| 4315 *static_cast<const gles2::cmds::VertexAttrib1f*>(cmd_data); | 4213 *static_cast<const volatile gles2::cmds::VertexAttrib1f*>(cmd_data); |
| 4316 (void)c; | |
| 4317 GLuint indx = static_cast<GLuint>(c.indx); | 4214 GLuint indx = static_cast<GLuint>(c.indx); |
| 4318 GLfloat x = static_cast<GLfloat>(c.x); | 4215 GLfloat x = static_cast<GLfloat>(c.x); |
| 4319 DoVertexAttrib1f(indx, x); | 4216 DoVertexAttrib1f(indx, x); |
| 4320 return error::kNoError; | 4217 return error::kNoError; |
| 4321 } | 4218 } |
| 4322 | 4219 |
| 4323 error::Error GLES2DecoderImpl::HandleVertexAttrib1fvImmediate( | 4220 error::Error GLES2DecoderImpl::HandleVertexAttrib1fvImmediate( |
| 4324 uint32_t immediate_data_size, | 4221 uint32_t immediate_data_size, |
| 4325 const void* cmd_data) { | 4222 const volatile void* cmd_data) { |
| 4326 const gles2::cmds::VertexAttrib1fvImmediate& c = | 4223 const volatile gles2::cmds::VertexAttrib1fvImmediate& c = |
| 4327 *static_cast<const gles2::cmds::VertexAttrib1fvImmediate*>(cmd_data); | 4224 *static_cast<const volatile gles2::cmds::VertexAttrib1fvImmediate*>( |
| 4328 (void)c; | 4225 cmd_data); |
| 4329 GLuint indx = static_cast<GLuint>(c.indx); | 4226 GLuint indx = static_cast<GLuint>(c.indx); |
| 4330 uint32_t data_size; | 4227 uint32_t data_size; |
| 4331 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) { | 4228 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) { |
| 4332 return error::kOutOfBounds; | 4229 return error::kOutOfBounds; |
| 4333 } | 4230 } |
| 4334 if (data_size > immediate_data_size) { | 4231 if (data_size > immediate_data_size) { |
| 4335 return error::kOutOfBounds; | 4232 return error::kOutOfBounds; |
| 4336 } | 4233 } |
| 4337 const GLfloat* values = | 4234 volatile const GLfloat* values = GetImmediateDataAs<volatile const GLfloat*>( |
| 4338 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 4235 c, data_size, immediate_data_size); |
| 4339 if (values == NULL) { | 4236 if (values == NULL) { |
| 4340 return error::kOutOfBounds; | 4237 return error::kOutOfBounds; |
| 4341 } | 4238 } |
| 4342 DoVertexAttrib1fv(indx, values); | 4239 DoVertexAttrib1fv(indx, values); |
| 4343 return error::kNoError; | 4240 return error::kNoError; |
| 4344 } | 4241 } |
| 4345 | 4242 |
| 4346 error::Error GLES2DecoderImpl::HandleVertexAttrib2f( | 4243 error::Error GLES2DecoderImpl::HandleVertexAttrib2f( |
| 4347 uint32_t immediate_data_size, | 4244 uint32_t immediate_data_size, |
| 4348 const void* cmd_data) { | 4245 const volatile void* cmd_data) { |
| 4349 const gles2::cmds::VertexAttrib2f& c = | 4246 const volatile gles2::cmds::VertexAttrib2f& c = |
| 4350 *static_cast<const gles2::cmds::VertexAttrib2f*>(cmd_data); | 4247 *static_cast<const volatile gles2::cmds::VertexAttrib2f*>(cmd_data); |
| 4351 (void)c; | |
| 4352 GLuint indx = static_cast<GLuint>(c.indx); | 4248 GLuint indx = static_cast<GLuint>(c.indx); |
| 4353 GLfloat x = static_cast<GLfloat>(c.x); | 4249 GLfloat x = static_cast<GLfloat>(c.x); |
| 4354 GLfloat y = static_cast<GLfloat>(c.y); | 4250 GLfloat y = static_cast<GLfloat>(c.y); |
| 4355 DoVertexAttrib2f(indx, x, y); | 4251 DoVertexAttrib2f(indx, x, y); |
| 4356 return error::kNoError; | 4252 return error::kNoError; |
| 4357 } | 4253 } |
| 4358 | 4254 |
| 4359 error::Error GLES2DecoderImpl::HandleVertexAttrib2fvImmediate( | 4255 error::Error GLES2DecoderImpl::HandleVertexAttrib2fvImmediate( |
| 4360 uint32_t immediate_data_size, | 4256 uint32_t immediate_data_size, |
| 4361 const void* cmd_data) { | 4257 const volatile void* cmd_data) { |
| 4362 const gles2::cmds::VertexAttrib2fvImmediate& c = | 4258 const volatile gles2::cmds::VertexAttrib2fvImmediate& c = |
| 4363 *static_cast<const gles2::cmds::VertexAttrib2fvImmediate*>(cmd_data); | 4259 *static_cast<const volatile gles2::cmds::VertexAttrib2fvImmediate*>( |
| 4364 (void)c; | 4260 cmd_data); |
| 4365 GLuint indx = static_cast<GLuint>(c.indx); | 4261 GLuint indx = static_cast<GLuint>(c.indx); |
| 4366 uint32_t data_size; | 4262 uint32_t data_size; |
| 4367 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 2, &data_size)) { | 4263 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 2, &data_size)) { |
| 4368 return error::kOutOfBounds; | 4264 return error::kOutOfBounds; |
| 4369 } | 4265 } |
| 4370 if (data_size > immediate_data_size) { | 4266 if (data_size > immediate_data_size) { |
| 4371 return error::kOutOfBounds; | 4267 return error::kOutOfBounds; |
| 4372 } | 4268 } |
| 4373 const GLfloat* values = | 4269 volatile const GLfloat* values = GetImmediateDataAs<volatile const GLfloat*>( |
| 4374 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 4270 c, data_size, immediate_data_size); |
| 4375 if (values == NULL) { | 4271 if (values == NULL) { |
| 4376 return error::kOutOfBounds; | 4272 return error::kOutOfBounds; |
| 4377 } | 4273 } |
| 4378 DoVertexAttrib2fv(indx, values); | 4274 DoVertexAttrib2fv(indx, values); |
| 4379 return error::kNoError; | 4275 return error::kNoError; |
| 4380 } | 4276 } |
| 4381 | 4277 |
| 4382 error::Error GLES2DecoderImpl::HandleVertexAttrib3f( | 4278 error::Error GLES2DecoderImpl::HandleVertexAttrib3f( |
| 4383 uint32_t immediate_data_size, | 4279 uint32_t immediate_data_size, |
| 4384 const void* cmd_data) { | 4280 const volatile void* cmd_data) { |
| 4385 const gles2::cmds::VertexAttrib3f& c = | 4281 const volatile gles2::cmds::VertexAttrib3f& c = |
| 4386 *static_cast<const gles2::cmds::VertexAttrib3f*>(cmd_data); | 4282 *static_cast<const volatile gles2::cmds::VertexAttrib3f*>(cmd_data); |
| 4387 (void)c; | |
| 4388 GLuint indx = static_cast<GLuint>(c.indx); | 4283 GLuint indx = static_cast<GLuint>(c.indx); |
| 4389 GLfloat x = static_cast<GLfloat>(c.x); | 4284 GLfloat x = static_cast<GLfloat>(c.x); |
| 4390 GLfloat y = static_cast<GLfloat>(c.y); | 4285 GLfloat y = static_cast<GLfloat>(c.y); |
| 4391 GLfloat z = static_cast<GLfloat>(c.z); | 4286 GLfloat z = static_cast<GLfloat>(c.z); |
| 4392 DoVertexAttrib3f(indx, x, y, z); | 4287 DoVertexAttrib3f(indx, x, y, z); |
| 4393 return error::kNoError; | 4288 return error::kNoError; |
| 4394 } | 4289 } |
| 4395 | 4290 |
| 4396 error::Error GLES2DecoderImpl::HandleVertexAttrib3fvImmediate( | 4291 error::Error GLES2DecoderImpl::HandleVertexAttrib3fvImmediate( |
| 4397 uint32_t immediate_data_size, | 4292 uint32_t immediate_data_size, |
| 4398 const void* cmd_data) { | 4293 const volatile void* cmd_data) { |
| 4399 const gles2::cmds::VertexAttrib3fvImmediate& c = | 4294 const volatile gles2::cmds::VertexAttrib3fvImmediate& c = |
| 4400 *static_cast<const gles2::cmds::VertexAttrib3fvImmediate*>(cmd_data); | 4295 *static_cast<const volatile gles2::cmds::VertexAttrib3fvImmediate*>( |
| 4401 (void)c; | 4296 cmd_data); |
| 4402 GLuint indx = static_cast<GLuint>(c.indx); | 4297 GLuint indx = static_cast<GLuint>(c.indx); |
| 4403 uint32_t data_size; | 4298 uint32_t data_size; |
| 4404 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 3, &data_size)) { | 4299 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 3, &data_size)) { |
| 4405 return error::kOutOfBounds; | 4300 return error::kOutOfBounds; |
| 4406 } | 4301 } |
| 4407 if (data_size > immediate_data_size) { | 4302 if (data_size > immediate_data_size) { |
| 4408 return error::kOutOfBounds; | 4303 return error::kOutOfBounds; |
| 4409 } | 4304 } |
| 4410 const GLfloat* values = | 4305 volatile const GLfloat* values = GetImmediateDataAs<volatile const GLfloat*>( |
| 4411 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 4306 c, data_size, immediate_data_size); |
| 4412 if (values == NULL) { | 4307 if (values == NULL) { |
| 4413 return error::kOutOfBounds; | 4308 return error::kOutOfBounds; |
| 4414 } | 4309 } |
| 4415 DoVertexAttrib3fv(indx, values); | 4310 DoVertexAttrib3fv(indx, values); |
| 4416 return error::kNoError; | 4311 return error::kNoError; |
| 4417 } | 4312 } |
| 4418 | 4313 |
| 4419 error::Error GLES2DecoderImpl::HandleVertexAttrib4f( | 4314 error::Error GLES2DecoderImpl::HandleVertexAttrib4f( |
| 4420 uint32_t immediate_data_size, | 4315 uint32_t immediate_data_size, |
| 4421 const void* cmd_data) { | 4316 const volatile void* cmd_data) { |
| 4422 const gles2::cmds::VertexAttrib4f& c = | 4317 const volatile gles2::cmds::VertexAttrib4f& c = |
| 4423 *static_cast<const gles2::cmds::VertexAttrib4f*>(cmd_data); | 4318 *static_cast<const volatile gles2::cmds::VertexAttrib4f*>(cmd_data); |
| 4424 (void)c; | |
| 4425 GLuint indx = static_cast<GLuint>(c.indx); | 4319 GLuint indx = static_cast<GLuint>(c.indx); |
| 4426 GLfloat x = static_cast<GLfloat>(c.x); | 4320 GLfloat x = static_cast<GLfloat>(c.x); |
| 4427 GLfloat y = static_cast<GLfloat>(c.y); | 4321 GLfloat y = static_cast<GLfloat>(c.y); |
| 4428 GLfloat z = static_cast<GLfloat>(c.z); | 4322 GLfloat z = static_cast<GLfloat>(c.z); |
| 4429 GLfloat w = static_cast<GLfloat>(c.w); | 4323 GLfloat w = static_cast<GLfloat>(c.w); |
| 4430 DoVertexAttrib4f(indx, x, y, z, w); | 4324 DoVertexAttrib4f(indx, x, y, z, w); |
| 4431 return error::kNoError; | 4325 return error::kNoError; |
| 4432 } | 4326 } |
| 4433 | 4327 |
| 4434 error::Error GLES2DecoderImpl::HandleVertexAttrib4fvImmediate( | 4328 error::Error GLES2DecoderImpl::HandleVertexAttrib4fvImmediate( |
| 4435 uint32_t immediate_data_size, | 4329 uint32_t immediate_data_size, |
| 4436 const void* cmd_data) { | 4330 const volatile void* cmd_data) { |
| 4437 const gles2::cmds::VertexAttrib4fvImmediate& c = | 4331 const volatile gles2::cmds::VertexAttrib4fvImmediate& c = |
| 4438 *static_cast<const gles2::cmds::VertexAttrib4fvImmediate*>(cmd_data); | 4332 *static_cast<const volatile gles2::cmds::VertexAttrib4fvImmediate*>( |
| 4439 (void)c; | 4333 cmd_data); |
| 4440 GLuint indx = static_cast<GLuint>(c.indx); | 4334 GLuint indx = static_cast<GLuint>(c.indx); |
| 4441 uint32_t data_size; | 4335 uint32_t data_size; |
| 4442 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) { | 4336 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) { |
| 4443 return error::kOutOfBounds; | 4337 return error::kOutOfBounds; |
| 4444 } | 4338 } |
| 4445 if (data_size > immediate_data_size) { | 4339 if (data_size > immediate_data_size) { |
| 4446 return error::kOutOfBounds; | 4340 return error::kOutOfBounds; |
| 4447 } | 4341 } |
| 4448 const GLfloat* values = | 4342 volatile const GLfloat* values = GetImmediateDataAs<volatile const GLfloat*>( |
| 4449 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 4343 c, data_size, immediate_data_size); |
| 4450 if (values == NULL) { | 4344 if (values == NULL) { |
| 4451 return error::kOutOfBounds; | 4345 return error::kOutOfBounds; |
| 4452 } | 4346 } |
| 4453 DoVertexAttrib4fv(indx, values); | 4347 DoVertexAttrib4fv(indx, values); |
| 4454 return error::kNoError; | 4348 return error::kNoError; |
| 4455 } | 4349 } |
| 4456 | 4350 |
| 4457 error::Error GLES2DecoderImpl::HandleVertexAttribI4i( | 4351 error::Error GLES2DecoderImpl::HandleVertexAttribI4i( |
| 4458 uint32_t immediate_data_size, | 4352 uint32_t immediate_data_size, |
| 4459 const void* cmd_data) { | 4353 const volatile void* cmd_data) { |
| 4460 if (!unsafe_es3_apis_enabled()) | 4354 if (!unsafe_es3_apis_enabled()) |
| 4461 return error::kUnknownCommand; | 4355 return error::kUnknownCommand; |
| 4462 const gles2::cmds::VertexAttribI4i& c = | 4356 const volatile gles2::cmds::VertexAttribI4i& c = |
| 4463 *static_cast<const gles2::cmds::VertexAttribI4i*>(cmd_data); | 4357 *static_cast<const volatile gles2::cmds::VertexAttribI4i*>(cmd_data); |
| 4464 (void)c; | |
| 4465 GLuint indx = static_cast<GLuint>(c.indx); | 4358 GLuint indx = static_cast<GLuint>(c.indx); |
| 4466 GLint x = static_cast<GLint>(c.x); | 4359 GLint x = static_cast<GLint>(c.x); |
| 4467 GLint y = static_cast<GLint>(c.y); | 4360 GLint y = static_cast<GLint>(c.y); |
| 4468 GLint z = static_cast<GLint>(c.z); | 4361 GLint z = static_cast<GLint>(c.z); |
| 4469 GLint w = static_cast<GLint>(c.w); | 4362 GLint w = static_cast<GLint>(c.w); |
| 4470 DoVertexAttribI4i(indx, x, y, z, w); | 4363 DoVertexAttribI4i(indx, x, y, z, w); |
| 4471 return error::kNoError; | 4364 return error::kNoError; |
| 4472 } | 4365 } |
| 4473 | 4366 |
| 4474 error::Error GLES2DecoderImpl::HandleVertexAttribI4ivImmediate( | 4367 error::Error GLES2DecoderImpl::HandleVertexAttribI4ivImmediate( |
| 4475 uint32_t immediate_data_size, | 4368 uint32_t immediate_data_size, |
| 4476 const void* cmd_data) { | 4369 const volatile void* cmd_data) { |
| 4477 if (!unsafe_es3_apis_enabled()) | 4370 if (!unsafe_es3_apis_enabled()) |
| 4478 return error::kUnknownCommand; | 4371 return error::kUnknownCommand; |
| 4479 const gles2::cmds::VertexAttribI4ivImmediate& c = | 4372 const volatile gles2::cmds::VertexAttribI4ivImmediate& c = |
| 4480 *static_cast<const gles2::cmds::VertexAttribI4ivImmediate*>(cmd_data); | 4373 *static_cast<const volatile gles2::cmds::VertexAttribI4ivImmediate*>( |
| 4481 (void)c; | 4374 cmd_data); |
| 4482 GLuint indx = static_cast<GLuint>(c.indx); | 4375 GLuint indx = static_cast<GLuint>(c.indx); |
| 4483 uint32_t data_size; | 4376 uint32_t data_size; |
| 4484 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 4, &data_size)) { | 4377 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 4, &data_size)) { |
| 4485 return error::kOutOfBounds; | 4378 return error::kOutOfBounds; |
| 4486 } | 4379 } |
| 4487 if (data_size > immediate_data_size) { | 4380 if (data_size > immediate_data_size) { |
| 4488 return error::kOutOfBounds; | 4381 return error::kOutOfBounds; |
| 4489 } | 4382 } |
| 4490 const GLint* values = | 4383 volatile const GLint* values = GetImmediateDataAs<volatile const GLint*>( |
| 4491 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); | 4384 c, data_size, immediate_data_size); |
| 4492 if (values == NULL) { | 4385 if (values == NULL) { |
| 4493 return error::kOutOfBounds; | 4386 return error::kOutOfBounds; |
| 4494 } | 4387 } |
| 4495 DoVertexAttribI4iv(indx, values); | 4388 DoVertexAttribI4iv(indx, values); |
| 4496 return error::kNoError; | 4389 return error::kNoError; |
| 4497 } | 4390 } |
| 4498 | 4391 |
| 4499 error::Error GLES2DecoderImpl::HandleVertexAttribI4ui( | 4392 error::Error GLES2DecoderImpl::HandleVertexAttribI4ui( |
| 4500 uint32_t immediate_data_size, | 4393 uint32_t immediate_data_size, |
| 4501 const void* cmd_data) { | 4394 const volatile void* cmd_data) { |
| 4502 if (!unsafe_es3_apis_enabled()) | 4395 if (!unsafe_es3_apis_enabled()) |
| 4503 return error::kUnknownCommand; | 4396 return error::kUnknownCommand; |
| 4504 const gles2::cmds::VertexAttribI4ui& c = | 4397 const volatile gles2::cmds::VertexAttribI4ui& c = |
| 4505 *static_cast<const gles2::cmds::VertexAttribI4ui*>(cmd_data); | 4398 *static_cast<const volatile gles2::cmds::VertexAttribI4ui*>(cmd_data); |
| 4506 (void)c; | |
| 4507 GLuint indx = static_cast<GLuint>(c.indx); | 4399 GLuint indx = static_cast<GLuint>(c.indx); |
| 4508 GLuint x = static_cast<GLuint>(c.x); | 4400 GLuint x = static_cast<GLuint>(c.x); |
| 4509 GLuint y = static_cast<GLuint>(c.y); | 4401 GLuint y = static_cast<GLuint>(c.y); |
| 4510 GLuint z = static_cast<GLuint>(c.z); | 4402 GLuint z = static_cast<GLuint>(c.z); |
| 4511 GLuint w = static_cast<GLuint>(c.w); | 4403 GLuint w = static_cast<GLuint>(c.w); |
| 4512 DoVertexAttribI4ui(indx, x, y, z, w); | 4404 DoVertexAttribI4ui(indx, x, y, z, w); |
| 4513 return error::kNoError; | 4405 return error::kNoError; |
| 4514 } | 4406 } |
| 4515 | 4407 |
| 4516 error::Error GLES2DecoderImpl::HandleVertexAttribI4uivImmediate( | 4408 error::Error GLES2DecoderImpl::HandleVertexAttribI4uivImmediate( |
| 4517 uint32_t immediate_data_size, | 4409 uint32_t immediate_data_size, |
| 4518 const void* cmd_data) { | 4410 const volatile void* cmd_data) { |
| 4519 if (!unsafe_es3_apis_enabled()) | 4411 if (!unsafe_es3_apis_enabled()) |
| 4520 return error::kUnknownCommand; | 4412 return error::kUnknownCommand; |
| 4521 const gles2::cmds::VertexAttribI4uivImmediate& c = | 4413 const volatile gles2::cmds::VertexAttribI4uivImmediate& c = |
| 4522 *static_cast<const gles2::cmds::VertexAttribI4uivImmediate*>(cmd_data); | 4414 *static_cast<const volatile gles2::cmds::VertexAttribI4uivImmediate*>( |
| 4523 (void)c; | 4415 cmd_data); |
| 4524 GLuint indx = static_cast<GLuint>(c.indx); | 4416 GLuint indx = static_cast<GLuint>(c.indx); |
| 4525 uint32_t data_size; | 4417 uint32_t data_size; |
| 4526 if (!GLES2Util::ComputeDataSize(1, sizeof(GLuint), 4, &data_size)) { | 4418 if (!GLES2Util::ComputeDataSize(1, sizeof(GLuint), 4, &data_size)) { |
| 4527 return error::kOutOfBounds; | 4419 return error::kOutOfBounds; |
| 4528 } | 4420 } |
| 4529 if (data_size > immediate_data_size) { | 4421 if (data_size > immediate_data_size) { |
| 4530 return error::kOutOfBounds; | 4422 return error::kOutOfBounds; |
| 4531 } | 4423 } |
| 4532 const GLuint* values = | 4424 volatile const GLuint* values = GetImmediateDataAs<volatile const GLuint*>( |
| 4533 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 4425 c, data_size, immediate_data_size); |
| 4534 if (values == NULL) { | 4426 if (values == NULL) { |
| 4535 return error::kOutOfBounds; | 4427 return error::kOutOfBounds; |
| 4536 } | 4428 } |
| 4537 DoVertexAttribI4uiv(indx, values); | 4429 DoVertexAttribI4uiv(indx, values); |
| 4538 return error::kNoError; | 4430 return error::kNoError; |
| 4539 } | 4431 } |
| 4540 | 4432 |
| 4541 error::Error GLES2DecoderImpl::HandleViewport(uint32_t immediate_data_size, | 4433 error::Error GLES2DecoderImpl::HandleViewport(uint32_t immediate_data_size, |
| 4542 const void* cmd_data) { | 4434 const volatile void* cmd_data) { |
| 4543 const gles2::cmds::Viewport& c = | 4435 const volatile gles2::cmds::Viewport& c = |
| 4544 *static_cast<const gles2::cmds::Viewport*>(cmd_data); | 4436 *static_cast<const volatile gles2::cmds::Viewport*>(cmd_data); |
| 4545 (void)c; | |
| 4546 GLint x = static_cast<GLint>(c.x); | 4437 GLint x = static_cast<GLint>(c.x); |
| 4547 GLint y = static_cast<GLint>(c.y); | 4438 GLint y = static_cast<GLint>(c.y); |
| 4548 GLsizei width = static_cast<GLsizei>(c.width); | 4439 GLsizei width = static_cast<GLsizei>(c.width); |
| 4549 GLsizei height = static_cast<GLsizei>(c.height); | 4440 GLsizei height = static_cast<GLsizei>(c.height); |
| 4550 if (width < 0) { | 4441 if (width < 0) { |
| 4551 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glViewport", "width < 0"); | 4442 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glViewport", "width < 0"); |
| 4552 return error::kNoError; | 4443 return error::kNoError; |
| 4553 } | 4444 } |
| 4554 if (height < 0) { | 4445 if (height < 0) { |
| 4555 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glViewport", "height < 0"); | 4446 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glViewport", "height < 0"); |
| 4556 return error::kNoError; | 4447 return error::kNoError; |
| 4557 } | 4448 } |
| 4558 DoViewport(x, y, width, height); | 4449 DoViewport(x, y, width, height); |
| 4559 return error::kNoError; | 4450 return error::kNoError; |
| 4560 } | 4451 } |
| 4561 | 4452 |
| 4562 error::Error GLES2DecoderImpl::HandleBlitFramebufferCHROMIUM( | 4453 error::Error GLES2DecoderImpl::HandleBlitFramebufferCHROMIUM( |
| 4563 uint32_t immediate_data_size, | 4454 uint32_t immediate_data_size, |
| 4564 const void* cmd_data) { | 4455 const volatile void* cmd_data) { |
| 4565 const gles2::cmds::BlitFramebufferCHROMIUM& c = | 4456 const volatile gles2::cmds::BlitFramebufferCHROMIUM& c = |
| 4566 *static_cast<const gles2::cmds::BlitFramebufferCHROMIUM*>(cmd_data); | 4457 *static_cast<const volatile gles2::cmds::BlitFramebufferCHROMIUM*>( |
| 4567 (void)c; | 4458 cmd_data); |
| 4568 if (!features().chromium_framebuffer_multisample) { | 4459 if (!features().chromium_framebuffer_multisample) { |
| 4569 return error::kUnknownCommand; | 4460 return error::kUnknownCommand; |
| 4570 } | 4461 } |
| 4571 | 4462 |
| 4572 error::Error error; | 4463 error::Error error; |
| 4573 error = WillAccessBoundFramebufferForDraw(); | 4464 error = WillAccessBoundFramebufferForDraw(); |
| 4574 if (error != error::kNoError) | 4465 if (error != error::kNoError) |
| 4575 return error; | 4466 return error; |
| 4576 error = WillAccessBoundFramebufferForRead(); | 4467 error = WillAccessBoundFramebufferForRead(); |
| 4577 if (error != error::kNoError) | 4468 if (error != error::kNoError) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 4591 "filter"); | 4482 "filter"); |
| 4592 return error::kNoError; | 4483 return error::kNoError; |
| 4593 } | 4484 } |
| 4594 DoBlitFramebufferCHROMIUM(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, | 4485 DoBlitFramebufferCHROMIUM(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, |
| 4595 dstY1, mask, filter); | 4486 dstY1, mask, filter); |
| 4596 return error::kNoError; | 4487 return error::kNoError; |
| 4597 } | 4488 } |
| 4598 | 4489 |
| 4599 error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleCHROMIUM( | 4490 error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleCHROMIUM( |
| 4600 uint32_t immediate_data_size, | 4491 uint32_t immediate_data_size, |
| 4601 const void* cmd_data) { | 4492 const volatile void* cmd_data) { |
| 4602 const gles2::cmds::RenderbufferStorageMultisampleCHROMIUM& c = | 4493 const volatile gles2::cmds::RenderbufferStorageMultisampleCHROMIUM& c = |
| 4603 *static_cast<const gles2::cmds::RenderbufferStorageMultisampleCHROMIUM*>( | 4494 *static_cast< |
| 4495 const volatile gles2::cmds::RenderbufferStorageMultisampleCHROMIUM*>( |
| 4604 cmd_data); | 4496 cmd_data); |
| 4605 (void)c; | |
| 4606 if (!features().chromium_framebuffer_multisample) { | 4497 if (!features().chromium_framebuffer_multisample) { |
| 4607 return error::kUnknownCommand; | 4498 return error::kUnknownCommand; |
| 4608 } | 4499 } |
| 4609 | 4500 |
| 4610 GLenum target = static_cast<GLenum>(c.target); | 4501 GLenum target = static_cast<GLenum>(c.target); |
| 4611 GLsizei samples = static_cast<GLsizei>(c.samples); | 4502 GLsizei samples = static_cast<GLsizei>(c.samples); |
| 4612 GLenum internalformat = static_cast<GLenum>(c.internalformat); | 4503 GLenum internalformat = static_cast<GLenum>(c.internalformat); |
| 4613 GLsizei width = static_cast<GLsizei>(c.width); | 4504 GLsizei width = static_cast<GLsizei>(c.width); |
| 4614 GLsizei height = static_cast<GLsizei>(c.height); | 4505 GLsizei height = static_cast<GLsizei>(c.height); |
| 4615 if (!validators_->render_buffer_target.IsValid(target)) { | 4506 if (!validators_->render_buffer_target.IsValid(target)) { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 4639 "height < 0"); | 4530 "height < 0"); |
| 4640 return error::kNoError; | 4531 return error::kNoError; |
| 4641 } | 4532 } |
| 4642 DoRenderbufferStorageMultisampleCHROMIUM(target, samples, internalformat, | 4533 DoRenderbufferStorageMultisampleCHROMIUM(target, samples, internalformat, |
| 4643 width, height); | 4534 width, height); |
| 4644 return error::kNoError; | 4535 return error::kNoError; |
| 4645 } | 4536 } |
| 4646 | 4537 |
| 4647 error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleEXT( | 4538 error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleEXT( |
| 4648 uint32_t immediate_data_size, | 4539 uint32_t immediate_data_size, |
| 4649 const void* cmd_data) { | 4540 const volatile void* cmd_data) { |
| 4650 const gles2::cmds::RenderbufferStorageMultisampleEXT& c = | 4541 const volatile gles2::cmds::RenderbufferStorageMultisampleEXT& c = |
| 4651 *static_cast<const gles2::cmds::RenderbufferStorageMultisampleEXT*>( | 4542 *static_cast< |
| 4543 const volatile gles2::cmds::RenderbufferStorageMultisampleEXT*>( |
| 4652 cmd_data); | 4544 cmd_data); |
| 4653 (void)c; | |
| 4654 if (!features().multisampled_render_to_texture) { | 4545 if (!features().multisampled_render_to_texture) { |
| 4655 return error::kUnknownCommand; | 4546 return error::kUnknownCommand; |
| 4656 } | 4547 } |
| 4657 | 4548 |
| 4658 GLenum target = static_cast<GLenum>(c.target); | 4549 GLenum target = static_cast<GLenum>(c.target); |
| 4659 GLsizei samples = static_cast<GLsizei>(c.samples); | 4550 GLsizei samples = static_cast<GLsizei>(c.samples); |
| 4660 GLenum internalformat = static_cast<GLenum>(c.internalformat); | 4551 GLenum internalformat = static_cast<GLenum>(c.internalformat); |
| 4661 GLsizei width = static_cast<GLsizei>(c.width); | 4552 GLsizei width = static_cast<GLsizei>(c.width); |
| 4662 GLsizei height = static_cast<GLsizei>(c.height); | 4553 GLsizei height = static_cast<GLsizei>(c.height); |
| 4663 if (!validators_->render_buffer_target.IsValid(target)) { | 4554 if (!validators_->render_buffer_target.IsValid(target)) { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 4685 "height < 0"); | 4576 "height < 0"); |
| 4686 return error::kNoError; | 4577 return error::kNoError; |
| 4687 } | 4578 } |
| 4688 DoRenderbufferStorageMultisampleEXT(target, samples, internalformat, width, | 4579 DoRenderbufferStorageMultisampleEXT(target, samples, internalformat, width, |
| 4689 height); | 4580 height); |
| 4690 return error::kNoError; | 4581 return error::kNoError; |
| 4691 } | 4582 } |
| 4692 | 4583 |
| 4693 error::Error GLES2DecoderImpl::HandleFramebufferTexture2DMultisampleEXT( | 4584 error::Error GLES2DecoderImpl::HandleFramebufferTexture2DMultisampleEXT( |
| 4694 uint32_t immediate_data_size, | 4585 uint32_t immediate_data_size, |
| 4695 const void* cmd_data) { | 4586 const volatile void* cmd_data) { |
| 4696 const gles2::cmds::FramebufferTexture2DMultisampleEXT& c = | 4587 const volatile gles2::cmds::FramebufferTexture2DMultisampleEXT& c = |
| 4697 *static_cast<const gles2::cmds::FramebufferTexture2DMultisampleEXT*>( | 4588 *static_cast< |
| 4589 const volatile gles2::cmds::FramebufferTexture2DMultisampleEXT*>( |
| 4698 cmd_data); | 4590 cmd_data); |
| 4699 (void)c; | |
| 4700 if (!features().multisampled_render_to_texture) { | 4591 if (!features().multisampled_render_to_texture) { |
| 4701 return error::kUnknownCommand; | 4592 return error::kUnknownCommand; |
| 4702 } | 4593 } |
| 4703 | 4594 |
| 4704 GLenum target = static_cast<GLenum>(c.target); | 4595 GLenum target = static_cast<GLenum>(c.target); |
| 4705 GLenum attachment = static_cast<GLenum>(c.attachment); | 4596 GLenum attachment = static_cast<GLenum>(c.attachment); |
| 4706 GLenum textarget = static_cast<GLenum>(c.textarget); | 4597 GLenum textarget = static_cast<GLenum>(c.textarget); |
| 4707 GLuint texture = c.texture; | 4598 GLuint texture = c.texture; |
| 4708 GLint level = static_cast<GLint>(c.level); | 4599 GLint level = static_cast<GLint>(c.level); |
| 4709 GLsizei samples = static_cast<GLsizei>(c.samples); | 4600 GLsizei samples = static_cast<GLsizei>(c.samples); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 4727 "samples < 0"); | 4618 "samples < 0"); |
| 4728 return error::kNoError; | 4619 return error::kNoError; |
| 4729 } | 4620 } |
| 4730 DoFramebufferTexture2DMultisample(target, attachment, textarget, texture, | 4621 DoFramebufferTexture2DMultisample(target, attachment, textarget, texture, |
| 4731 level, samples); | 4622 level, samples); |
| 4732 return error::kNoError; | 4623 return error::kNoError; |
| 4733 } | 4624 } |
| 4734 | 4625 |
| 4735 error::Error GLES2DecoderImpl::HandleTexStorage2DEXT( | 4626 error::Error GLES2DecoderImpl::HandleTexStorage2DEXT( |
| 4736 uint32_t immediate_data_size, | 4627 uint32_t immediate_data_size, |
| 4737 const void* cmd_data) { | 4628 const volatile void* cmd_data) { |
| 4738 const gles2::cmds::TexStorage2DEXT& c = | 4629 const volatile gles2::cmds::TexStorage2DEXT& c = |
| 4739 *static_cast<const gles2::cmds::TexStorage2DEXT*>(cmd_data); | 4630 *static_cast<const volatile gles2::cmds::TexStorage2DEXT*>(cmd_data); |
| 4740 (void)c; | |
| 4741 if (!features().ext_texture_storage) { | 4631 if (!features().ext_texture_storage) { |
| 4742 return error::kUnknownCommand; | 4632 return error::kUnknownCommand; |
| 4743 } | 4633 } |
| 4744 | 4634 |
| 4745 GLenum target = static_cast<GLenum>(c.target); | 4635 GLenum target = static_cast<GLenum>(c.target); |
| 4746 GLsizei levels = static_cast<GLsizei>(c.levels); | 4636 GLsizei levels = static_cast<GLsizei>(c.levels); |
| 4747 GLenum internalFormat = static_cast<GLenum>(c.internalFormat); | 4637 GLenum internalFormat = static_cast<GLenum>(c.internalFormat); |
| 4748 GLsizei width = static_cast<GLsizei>(c.width); | 4638 GLsizei width = static_cast<GLsizei>(c.width); |
| 4749 GLsizei height = static_cast<GLsizei>(c.height); | 4639 GLsizei height = static_cast<GLsizei>(c.height); |
| 4750 if (!validators_->texture_bind_target.IsValid(target)) { | 4640 if (!validators_->texture_bind_target.IsValid(target)) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 4767 if (height < 0) { | 4657 if (height < 0) { |
| 4768 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage2DEXT", "height < 0"); | 4658 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage2DEXT", "height < 0"); |
| 4769 return error::kNoError; | 4659 return error::kNoError; |
| 4770 } | 4660 } |
| 4771 DoTexStorage2DEXT(target, levels, internalFormat, width, height); | 4661 DoTexStorage2DEXT(target, levels, internalFormat, width, height); |
| 4772 return error::kNoError; | 4662 return error::kNoError; |
| 4773 } | 4663 } |
| 4774 | 4664 |
| 4775 error::Error GLES2DecoderImpl::HandleGenQueriesEXTImmediate( | 4665 error::Error GLES2DecoderImpl::HandleGenQueriesEXTImmediate( |
| 4776 uint32_t immediate_data_size, | 4666 uint32_t immediate_data_size, |
| 4777 const void* cmd_data) { | 4667 const volatile void* cmd_data) { |
| 4778 const gles2::cmds::GenQueriesEXTImmediate& c = | 4668 const volatile gles2::cmds::GenQueriesEXTImmediate& c = |
| 4779 *static_cast<const gles2::cmds::GenQueriesEXTImmediate*>(cmd_data); | 4669 *static_cast<const volatile gles2::cmds::GenQueriesEXTImmediate*>( |
| 4780 (void)c; | 4670 cmd_data); |
| 4781 GLsizei n = static_cast<GLsizei>(c.n); | 4671 GLsizei n = static_cast<GLsizei>(c.n); |
| 4782 uint32_t data_size; | 4672 uint32_t data_size; |
| 4783 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 4673 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 4784 return error::kOutOfBounds; | 4674 return error::kOutOfBounds; |
| 4785 } | 4675 } |
| 4786 GLuint* queries = | 4676 volatile GLuint* queries = |
| 4787 GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); | 4677 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size); |
| 4788 if (queries == NULL) { | 4678 if (queries == NULL) { |
| 4789 return error::kOutOfBounds; | 4679 return error::kOutOfBounds; |
| 4790 } | 4680 } |
| 4791 auto queries_copy = base::MakeUnique<GLuint[]>(n); | 4681 auto queries_copy = base::MakeUnique<GLuint[]>(n); |
| 4792 GLuint* queries_safe = queries_copy.get(); | 4682 GLuint* queries_safe = queries_copy.get(); |
| 4793 std::copy(queries, queries + n, queries_safe); | 4683 std::copy(queries, queries + n, queries_safe); |
| 4794 if (!CheckUniqueAndNonNullIds(n, queries_safe) || | 4684 if (!CheckUniqueAndNonNullIds(n, queries_safe) || |
| 4795 !GenQueriesEXTHelper(n, queries_safe)) { | 4685 !GenQueriesEXTHelper(n, queries_safe)) { |
| 4796 return error::kInvalidArguments; | 4686 return error::kInvalidArguments; |
| 4797 } | 4687 } |
| 4798 return error::kNoError; | 4688 return error::kNoError; |
| 4799 } | 4689 } |
| 4800 | 4690 |
| 4801 error::Error GLES2DecoderImpl::HandleDeleteQueriesEXTImmediate( | 4691 error::Error GLES2DecoderImpl::HandleDeleteQueriesEXTImmediate( |
| 4802 uint32_t immediate_data_size, | 4692 uint32_t immediate_data_size, |
| 4803 const void* cmd_data) { | 4693 const volatile void* cmd_data) { |
| 4804 const gles2::cmds::DeleteQueriesEXTImmediate& c = | 4694 const volatile gles2::cmds::DeleteQueriesEXTImmediate& c = |
| 4805 *static_cast<const gles2::cmds::DeleteQueriesEXTImmediate*>(cmd_data); | 4695 *static_cast<const volatile gles2::cmds::DeleteQueriesEXTImmediate*>( |
| 4806 (void)c; | 4696 cmd_data); |
| 4807 GLsizei n = static_cast<GLsizei>(c.n); | 4697 GLsizei n = static_cast<GLsizei>(c.n); |
| 4808 uint32_t data_size; | 4698 uint32_t data_size; |
| 4809 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 4699 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 4810 return error::kOutOfBounds; | 4700 return error::kOutOfBounds; |
| 4811 } | 4701 } |
| 4812 const GLuint* queries = | 4702 volatile const GLuint* queries = GetImmediateDataAs<volatile const GLuint*>( |
| 4813 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 4703 c, data_size, immediate_data_size); |
| 4814 if (queries == NULL) { | 4704 if (queries == NULL) { |
| 4815 return error::kOutOfBounds; | 4705 return error::kOutOfBounds; |
| 4816 } | 4706 } |
| 4817 DeleteQueriesEXTHelper(n, queries); | 4707 DeleteQueriesEXTHelper(n, queries); |
| 4818 return error::kNoError; | 4708 return error::kNoError; |
| 4819 } | 4709 } |
| 4820 | 4710 |
| 4821 error::Error GLES2DecoderImpl::HandleBeginTransformFeedback( | 4711 error::Error GLES2DecoderImpl::HandleBeginTransformFeedback( |
| 4822 uint32_t immediate_data_size, | 4712 uint32_t immediate_data_size, |
| 4823 const void* cmd_data) { | 4713 const volatile void* cmd_data) { |
| 4824 if (!unsafe_es3_apis_enabled()) | 4714 if (!unsafe_es3_apis_enabled()) |
| 4825 return error::kUnknownCommand; | 4715 return error::kUnknownCommand; |
| 4826 const gles2::cmds::BeginTransformFeedback& c = | 4716 const volatile gles2::cmds::BeginTransformFeedback& c = |
| 4827 *static_cast<const gles2::cmds::BeginTransformFeedback*>(cmd_data); | 4717 *static_cast<const volatile gles2::cmds::BeginTransformFeedback*>( |
| 4828 (void)c; | 4718 cmd_data); |
| 4829 GLenum primitivemode = static_cast<GLenum>(c.primitivemode); | 4719 GLenum primitivemode = static_cast<GLenum>(c.primitivemode); |
| 4830 if (!validators_->transform_feedback_primitive_mode.IsValid(primitivemode)) { | 4720 if (!validators_->transform_feedback_primitive_mode.IsValid(primitivemode)) { |
| 4831 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBeginTransformFeedback", primitivemode, | 4721 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBeginTransformFeedback", primitivemode, |
| 4832 "primitivemode"); | 4722 "primitivemode"); |
| 4833 return error::kNoError; | 4723 return error::kNoError; |
| 4834 } | 4724 } |
| 4835 DoBeginTransformFeedback(primitivemode); | 4725 DoBeginTransformFeedback(primitivemode); |
| 4836 return error::kNoError; | 4726 return error::kNoError; |
| 4837 } | 4727 } |
| 4838 | 4728 |
| 4839 error::Error GLES2DecoderImpl::HandleEndTransformFeedback( | 4729 error::Error GLES2DecoderImpl::HandleEndTransformFeedback( |
| 4840 uint32_t immediate_data_size, | 4730 uint32_t immediate_data_size, |
| 4841 const void* cmd_data) { | 4731 const volatile void* cmd_data) { |
| 4842 if (!unsafe_es3_apis_enabled()) | 4732 if (!unsafe_es3_apis_enabled()) |
| 4843 return error::kUnknownCommand; | 4733 return error::kUnknownCommand; |
| 4844 const gles2::cmds::EndTransformFeedback& c = | |
| 4845 *static_cast<const gles2::cmds::EndTransformFeedback*>(cmd_data); | |
| 4846 (void)c; | |
| 4847 DoEndTransformFeedback(); | 4734 DoEndTransformFeedback(); |
| 4848 return error::kNoError; | 4735 return error::kNoError; |
| 4849 } | 4736 } |
| 4850 | 4737 |
| 4851 error::Error GLES2DecoderImpl::HandleInsertEventMarkerEXT( | 4738 error::Error GLES2DecoderImpl::HandleInsertEventMarkerEXT( |
| 4852 uint32_t immediate_data_size, | 4739 uint32_t immediate_data_size, |
| 4853 const void* cmd_data) { | 4740 const volatile void* cmd_data) { |
| 4854 const gles2::cmds::InsertEventMarkerEXT& c = | 4741 const volatile gles2::cmds::InsertEventMarkerEXT& c = |
| 4855 *static_cast<const gles2::cmds::InsertEventMarkerEXT*>(cmd_data); | 4742 *static_cast<const volatile gles2::cmds::InsertEventMarkerEXT*>(cmd_data); |
| 4856 (void)c; | |
| 4857 | 4743 |
| 4858 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); | 4744 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); |
| 4859 Bucket* bucket = GetBucket(bucket_id); | 4745 Bucket* bucket = GetBucket(bucket_id); |
| 4860 if (!bucket || bucket->size() == 0) { | 4746 if (!bucket || bucket->size() == 0) { |
| 4861 return error::kInvalidArguments; | 4747 return error::kInvalidArguments; |
| 4862 } | 4748 } |
| 4863 std::string str; | 4749 std::string str; |
| 4864 if (!bucket->GetAsString(&str)) { | 4750 if (!bucket->GetAsString(&str)) { |
| 4865 return error::kInvalidArguments; | 4751 return error::kInvalidArguments; |
| 4866 } | 4752 } |
| 4867 DoInsertEventMarkerEXT(0, str.c_str()); | 4753 DoInsertEventMarkerEXT(0, str.c_str()); |
| 4868 return error::kNoError; | 4754 return error::kNoError; |
| 4869 } | 4755 } |
| 4870 | 4756 |
| 4871 error::Error GLES2DecoderImpl::HandlePushGroupMarkerEXT( | 4757 error::Error GLES2DecoderImpl::HandlePushGroupMarkerEXT( |
| 4872 uint32_t immediate_data_size, | 4758 uint32_t immediate_data_size, |
| 4873 const void* cmd_data) { | 4759 const volatile void* cmd_data) { |
| 4874 const gles2::cmds::PushGroupMarkerEXT& c = | 4760 const volatile gles2::cmds::PushGroupMarkerEXT& c = |
| 4875 *static_cast<const gles2::cmds::PushGroupMarkerEXT*>(cmd_data); | 4761 *static_cast<const volatile gles2::cmds::PushGroupMarkerEXT*>(cmd_data); |
| 4876 (void)c; | |
| 4877 | 4762 |
| 4878 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); | 4763 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); |
| 4879 Bucket* bucket = GetBucket(bucket_id); | 4764 Bucket* bucket = GetBucket(bucket_id); |
| 4880 if (!bucket || bucket->size() == 0) { | 4765 if (!bucket || bucket->size() == 0) { |
| 4881 return error::kInvalidArguments; | 4766 return error::kInvalidArguments; |
| 4882 } | 4767 } |
| 4883 std::string str; | 4768 std::string str; |
| 4884 if (!bucket->GetAsString(&str)) { | 4769 if (!bucket->GetAsString(&str)) { |
| 4885 return error::kInvalidArguments; | 4770 return error::kInvalidArguments; |
| 4886 } | 4771 } |
| 4887 DoPushGroupMarkerEXT(0, str.c_str()); | 4772 DoPushGroupMarkerEXT(0, str.c_str()); |
| 4888 return error::kNoError; | 4773 return error::kNoError; |
| 4889 } | 4774 } |
| 4890 | 4775 |
| 4891 error::Error GLES2DecoderImpl::HandlePopGroupMarkerEXT( | 4776 error::Error GLES2DecoderImpl::HandlePopGroupMarkerEXT( |
| 4892 uint32_t immediate_data_size, | 4777 uint32_t immediate_data_size, |
| 4893 const void* cmd_data) { | 4778 const volatile void* cmd_data) { |
| 4894 const gles2::cmds::PopGroupMarkerEXT& c = | |
| 4895 *static_cast<const gles2::cmds::PopGroupMarkerEXT*>(cmd_data); | |
| 4896 (void)c; | |
| 4897 DoPopGroupMarkerEXT(); | 4779 DoPopGroupMarkerEXT(); |
| 4898 return error::kNoError; | 4780 return error::kNoError; |
| 4899 } | 4781 } |
| 4900 | 4782 |
| 4901 error::Error GLES2DecoderImpl::HandleGenVertexArraysOESImmediate( | 4783 error::Error GLES2DecoderImpl::HandleGenVertexArraysOESImmediate( |
| 4902 uint32_t immediate_data_size, | 4784 uint32_t immediate_data_size, |
| 4903 const void* cmd_data) { | 4785 const volatile void* cmd_data) { |
| 4904 const gles2::cmds::GenVertexArraysOESImmediate& c = | 4786 const volatile gles2::cmds::GenVertexArraysOESImmediate& c = |
| 4905 *static_cast<const gles2::cmds::GenVertexArraysOESImmediate*>(cmd_data); | 4787 *static_cast<const volatile gles2::cmds::GenVertexArraysOESImmediate*>( |
| 4906 (void)c; | 4788 cmd_data); |
| 4907 GLsizei n = static_cast<GLsizei>(c.n); | 4789 GLsizei n = static_cast<GLsizei>(c.n); |
| 4908 uint32_t data_size; | 4790 uint32_t data_size; |
| 4909 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 4791 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 4910 return error::kOutOfBounds; | 4792 return error::kOutOfBounds; |
| 4911 } | 4793 } |
| 4912 GLuint* arrays = | 4794 volatile GLuint* arrays = |
| 4913 GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); | 4795 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size); |
| 4914 if (arrays == NULL) { | 4796 if (arrays == NULL) { |
| 4915 return error::kOutOfBounds; | 4797 return error::kOutOfBounds; |
| 4916 } | 4798 } |
| 4917 auto arrays_copy = base::MakeUnique<GLuint[]>(n); | 4799 auto arrays_copy = base::MakeUnique<GLuint[]>(n); |
| 4918 GLuint* arrays_safe = arrays_copy.get(); | 4800 GLuint* arrays_safe = arrays_copy.get(); |
| 4919 std::copy(arrays, arrays + n, arrays_safe); | 4801 std::copy(arrays, arrays + n, arrays_safe); |
| 4920 if (!CheckUniqueAndNonNullIds(n, arrays_safe) || | 4802 if (!CheckUniqueAndNonNullIds(n, arrays_safe) || |
| 4921 !GenVertexArraysOESHelper(n, arrays_safe)) { | 4803 !GenVertexArraysOESHelper(n, arrays_safe)) { |
| 4922 return error::kInvalidArguments; | 4804 return error::kInvalidArguments; |
| 4923 } | 4805 } |
| 4924 return error::kNoError; | 4806 return error::kNoError; |
| 4925 } | 4807 } |
| 4926 | 4808 |
| 4927 error::Error GLES2DecoderImpl::HandleDeleteVertexArraysOESImmediate( | 4809 error::Error GLES2DecoderImpl::HandleDeleteVertexArraysOESImmediate( |
| 4928 uint32_t immediate_data_size, | 4810 uint32_t immediate_data_size, |
| 4929 const void* cmd_data) { | 4811 const volatile void* cmd_data) { |
| 4930 const gles2::cmds::DeleteVertexArraysOESImmediate& c = | 4812 const volatile gles2::cmds::DeleteVertexArraysOESImmediate& c = |
| 4931 *static_cast<const gles2::cmds::DeleteVertexArraysOESImmediate*>( | 4813 *static_cast<const volatile gles2::cmds::DeleteVertexArraysOESImmediate*>( |
| 4932 cmd_data); | 4814 cmd_data); |
| 4933 (void)c; | |
| 4934 GLsizei n = static_cast<GLsizei>(c.n); | 4815 GLsizei n = static_cast<GLsizei>(c.n); |
| 4935 uint32_t data_size; | 4816 uint32_t data_size; |
| 4936 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 4817 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
| 4937 return error::kOutOfBounds; | 4818 return error::kOutOfBounds; |
| 4938 } | 4819 } |
| 4939 const GLuint* arrays = | 4820 volatile const GLuint* arrays = GetImmediateDataAs<volatile const GLuint*>( |
| 4940 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 4821 c, data_size, immediate_data_size); |
| 4941 if (arrays == NULL) { | 4822 if (arrays == NULL) { |
| 4942 return error::kOutOfBounds; | 4823 return error::kOutOfBounds; |
| 4943 } | 4824 } |
| 4944 DeleteVertexArraysOESHelper(n, arrays); | 4825 DeleteVertexArraysOESHelper(n, arrays); |
| 4945 return error::kNoError; | 4826 return error::kNoError; |
| 4946 } | 4827 } |
| 4947 | 4828 |
| 4948 error::Error GLES2DecoderImpl::HandleIsVertexArrayOES( | 4829 error::Error GLES2DecoderImpl::HandleIsVertexArrayOES( |
| 4949 uint32_t immediate_data_size, | 4830 uint32_t immediate_data_size, |
| 4950 const void* cmd_data) { | 4831 const volatile void* cmd_data) { |
| 4951 const gles2::cmds::IsVertexArrayOES& c = | 4832 const volatile gles2::cmds::IsVertexArrayOES& c = |
| 4952 *static_cast<const gles2::cmds::IsVertexArrayOES*>(cmd_data); | 4833 *static_cast<const volatile gles2::cmds::IsVertexArrayOES*>(cmd_data); |
| 4953 (void)c; | |
| 4954 GLuint array = c.array; | 4834 GLuint array = c.array; |
| 4955 typedef cmds::IsVertexArrayOES::Result Result; | 4835 typedef cmds::IsVertexArrayOES::Result Result; |
| 4956 Result* result_dst = GetSharedMemoryAs<Result*>( | 4836 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 4957 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 4837 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 4958 if (!result_dst) { | 4838 if (!result_dst) { |
| 4959 return error::kOutOfBounds; | 4839 return error::kOutOfBounds; |
| 4960 } | 4840 } |
| 4961 *result_dst = DoIsVertexArrayOES(array); | 4841 *result_dst = DoIsVertexArrayOES(array); |
| 4962 return error::kNoError; | 4842 return error::kNoError; |
| 4963 } | 4843 } |
| 4964 | 4844 |
| 4965 error::Error GLES2DecoderImpl::HandleBindVertexArrayOES( | 4845 error::Error GLES2DecoderImpl::HandleBindVertexArrayOES( |
| 4966 uint32_t immediate_data_size, | 4846 uint32_t immediate_data_size, |
| 4967 const void* cmd_data) { | 4847 const volatile void* cmd_data) { |
| 4968 const gles2::cmds::BindVertexArrayOES& c = | 4848 const volatile gles2::cmds::BindVertexArrayOES& c = |
| 4969 *static_cast<const gles2::cmds::BindVertexArrayOES*>(cmd_data); | 4849 *static_cast<const volatile gles2::cmds::BindVertexArrayOES*>(cmd_data); |
| 4970 (void)c; | |
| 4971 GLuint array = c.array; | 4850 GLuint array = c.array; |
| 4972 DoBindVertexArrayOES(array); | 4851 DoBindVertexArrayOES(array); |
| 4973 return error::kNoError; | 4852 return error::kNoError; |
| 4974 } | 4853 } |
| 4975 | 4854 |
| 4976 error::Error GLES2DecoderImpl::HandleSwapBuffers(uint32_t immediate_data_size, | 4855 error::Error GLES2DecoderImpl::HandleSwapBuffers( |
| 4977 const void* cmd_data) { | 4856 uint32_t immediate_data_size, |
| 4978 const gles2::cmds::SwapBuffers& c = | 4857 const volatile void* cmd_data) { |
| 4979 *static_cast<const gles2::cmds::SwapBuffers*>(cmd_data); | |
| 4980 (void)c; | |
| 4981 DoSwapBuffers(); | 4858 DoSwapBuffers(); |
| 4982 return error::kNoError; | 4859 return error::kNoError; |
| 4983 } | 4860 } |
| 4984 | 4861 |
| 4985 error::Error GLES2DecoderImpl::HandleGetMaxValueInBufferCHROMIUM( | 4862 error::Error GLES2DecoderImpl::HandleGetMaxValueInBufferCHROMIUM( |
| 4986 uint32_t immediate_data_size, | 4863 uint32_t immediate_data_size, |
| 4987 const void* cmd_data) { | 4864 const volatile void* cmd_data) { |
| 4988 const gles2::cmds::GetMaxValueInBufferCHROMIUM& c = | 4865 const volatile gles2::cmds::GetMaxValueInBufferCHROMIUM& c = |
| 4989 *static_cast<const gles2::cmds::GetMaxValueInBufferCHROMIUM*>(cmd_data); | 4866 *static_cast<const volatile gles2::cmds::GetMaxValueInBufferCHROMIUM*>( |
| 4990 (void)c; | 4867 cmd_data); |
| 4991 GLuint buffer_id = c.buffer_id; | 4868 GLuint buffer_id = c.buffer_id; |
| 4992 GLsizei count = static_cast<GLsizei>(c.count); | 4869 GLsizei count = static_cast<GLsizei>(c.count); |
| 4993 GLenum type = static_cast<GLenum>(c.type); | 4870 GLenum type = static_cast<GLenum>(c.type); |
| 4994 GLuint offset = static_cast<GLuint>(c.offset); | 4871 GLuint offset = static_cast<GLuint>(c.offset); |
| 4995 typedef cmds::GetMaxValueInBufferCHROMIUM::Result Result; | 4872 typedef cmds::GetMaxValueInBufferCHROMIUM::Result Result; |
| 4996 Result* result_dst = GetSharedMemoryAs<Result*>( | 4873 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 4997 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 4874 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 4998 if (!result_dst) { | 4875 if (!result_dst) { |
| 4999 return error::kOutOfBounds; | 4876 return error::kOutOfBounds; |
| 5000 } | 4877 } |
| 5001 if (count < 0) { | 4878 if (count < 0) { |
| 5002 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glGetMaxValueInBufferCHROMIUM", | 4879 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glGetMaxValueInBufferCHROMIUM", |
| 5003 "count < 0"); | 4880 "count < 0"); |
| 5004 return error::kNoError; | 4881 return error::kNoError; |
| 5005 } | 4882 } |
| 5006 if (!validators_->get_max_index_type.IsValid(type)) { | 4883 if (!validators_->get_max_index_type.IsValid(type)) { |
| 5007 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetMaxValueInBufferCHROMIUM", type, | 4884 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetMaxValueInBufferCHROMIUM", type, |
| 5008 "type"); | 4885 "type"); |
| 5009 return error::kNoError; | 4886 return error::kNoError; |
| 5010 } | 4887 } |
| 5011 *result_dst = DoGetMaxValueInBufferCHROMIUM(buffer_id, count, type, offset); | 4888 *result_dst = DoGetMaxValueInBufferCHROMIUM(buffer_id, count, type, offset); |
| 5012 return error::kNoError; | 4889 return error::kNoError; |
| 5013 } | 4890 } |
| 5014 | 4891 |
| 5015 error::Error GLES2DecoderImpl::HandleCopyTextureCHROMIUM( | 4892 error::Error GLES2DecoderImpl::HandleCopyTextureCHROMIUM( |
| 5016 uint32_t immediate_data_size, | 4893 uint32_t immediate_data_size, |
| 5017 const void* cmd_data) { | 4894 const volatile void* cmd_data) { |
| 5018 const gles2::cmds::CopyTextureCHROMIUM& c = | 4895 const volatile gles2::cmds::CopyTextureCHROMIUM& c = |
| 5019 *static_cast<const gles2::cmds::CopyTextureCHROMIUM*>(cmd_data); | 4896 *static_cast<const volatile gles2::cmds::CopyTextureCHROMIUM*>(cmd_data); |
| 5020 (void)c; | |
| 5021 GLenum source_id = static_cast<GLenum>(c.source_id); | 4897 GLenum source_id = static_cast<GLenum>(c.source_id); |
| 5022 GLenum dest_id = static_cast<GLenum>(c.dest_id); | 4898 GLenum dest_id = static_cast<GLenum>(c.dest_id); |
| 5023 GLint internalformat = static_cast<GLint>(c.internalformat); | 4899 GLint internalformat = static_cast<GLint>(c.internalformat); |
| 5024 GLenum dest_type = static_cast<GLenum>(c.dest_type); | 4900 GLenum dest_type = static_cast<GLenum>(c.dest_type); |
| 5025 GLboolean unpack_flip_y = static_cast<GLboolean>(c.unpack_flip_y); | 4901 GLboolean unpack_flip_y = static_cast<GLboolean>(c.unpack_flip_y); |
| 5026 GLboolean unpack_premultiply_alpha = | 4902 GLboolean unpack_premultiply_alpha = |
| 5027 static_cast<GLboolean>(c.unpack_premultiply_alpha); | 4903 static_cast<GLboolean>(c.unpack_premultiply_alpha); |
| 5028 GLboolean unpack_unmultiply_alpha = | 4904 GLboolean unpack_unmultiply_alpha = |
| 5029 static_cast<GLboolean>(c.unpack_unmultiply_alpha); | 4905 static_cast<GLboolean>(c.unpack_unmultiply_alpha); |
| 5030 if (!validators_->texture_internal_format.IsValid(internalformat)) { | 4906 if (!validators_->texture_internal_format.IsValid(internalformat)) { |
| 5031 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTextureCHROMIUM", | 4907 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTextureCHROMIUM", |
| 5032 "internalformat GL_INVALID_VALUE"); | 4908 "internalformat GL_INVALID_VALUE"); |
| 5033 return error::kNoError; | 4909 return error::kNoError; |
| 5034 } | 4910 } |
| 5035 if (!validators_->pixel_type.IsValid(dest_type)) { | 4911 if (!validators_->pixel_type.IsValid(dest_type)) { |
| 5036 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyTextureCHROMIUM", dest_type, | 4912 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyTextureCHROMIUM", dest_type, |
| 5037 "dest_type"); | 4913 "dest_type"); |
| 5038 return error::kNoError; | 4914 return error::kNoError; |
| 5039 } | 4915 } |
| 5040 DoCopyTextureCHROMIUM(source_id, dest_id, internalformat, dest_type, | 4916 DoCopyTextureCHROMIUM(source_id, dest_id, internalformat, dest_type, |
| 5041 unpack_flip_y, unpack_premultiply_alpha, | 4917 unpack_flip_y, unpack_premultiply_alpha, |
| 5042 unpack_unmultiply_alpha); | 4918 unpack_unmultiply_alpha); |
| 5043 return error::kNoError; | 4919 return error::kNoError; |
| 5044 } | 4920 } |
| 5045 | 4921 |
| 5046 error::Error GLES2DecoderImpl::HandleCopySubTextureCHROMIUM( | 4922 error::Error GLES2DecoderImpl::HandleCopySubTextureCHROMIUM( |
| 5047 uint32_t immediate_data_size, | 4923 uint32_t immediate_data_size, |
| 5048 const void* cmd_data) { | 4924 const volatile void* cmd_data) { |
| 5049 const gles2::cmds::CopySubTextureCHROMIUM& c = | 4925 const volatile gles2::cmds::CopySubTextureCHROMIUM& c = |
| 5050 *static_cast<const gles2::cmds::CopySubTextureCHROMIUM*>(cmd_data); | 4926 *static_cast<const volatile gles2::cmds::CopySubTextureCHROMIUM*>( |
| 5051 (void)c; | 4927 cmd_data); |
| 5052 GLenum source_id = static_cast<GLenum>(c.source_id); | 4928 GLenum source_id = static_cast<GLenum>(c.source_id); |
| 5053 GLenum dest_id = static_cast<GLenum>(c.dest_id); | 4929 GLenum dest_id = static_cast<GLenum>(c.dest_id); |
| 5054 GLint xoffset = static_cast<GLint>(c.xoffset); | 4930 GLint xoffset = static_cast<GLint>(c.xoffset); |
| 5055 GLint yoffset = static_cast<GLint>(c.yoffset); | 4931 GLint yoffset = static_cast<GLint>(c.yoffset); |
| 5056 GLint x = static_cast<GLint>(c.x); | 4932 GLint x = static_cast<GLint>(c.x); |
| 5057 GLint y = static_cast<GLint>(c.y); | 4933 GLint y = static_cast<GLint>(c.y); |
| 5058 GLsizei width = static_cast<GLsizei>(c.width); | 4934 GLsizei width = static_cast<GLsizei>(c.width); |
| 5059 GLsizei height = static_cast<GLsizei>(c.height); | 4935 GLsizei height = static_cast<GLsizei>(c.height); |
| 5060 GLboolean unpack_flip_y = static_cast<GLboolean>(c.unpack_flip_y); | 4936 GLboolean unpack_flip_y = static_cast<GLboolean>(c.unpack_flip_y); |
| 5061 GLboolean unpack_premultiply_alpha = | 4937 GLboolean unpack_premultiply_alpha = |
| (...skipping 11 matching lines...) Expand all Loading... |
| 5073 return error::kNoError; | 4949 return error::kNoError; |
| 5074 } | 4950 } |
| 5075 DoCopySubTextureCHROMIUM(source_id, dest_id, xoffset, yoffset, x, y, width, | 4951 DoCopySubTextureCHROMIUM(source_id, dest_id, xoffset, yoffset, x, y, width, |
| 5076 height, unpack_flip_y, unpack_premultiply_alpha, | 4952 height, unpack_flip_y, unpack_premultiply_alpha, |
| 5077 unpack_unmultiply_alpha); | 4953 unpack_unmultiply_alpha); |
| 5078 return error::kNoError; | 4954 return error::kNoError; |
| 5079 } | 4955 } |
| 5080 | 4956 |
| 5081 error::Error GLES2DecoderImpl::HandleCompressedCopyTextureCHROMIUM( | 4957 error::Error GLES2DecoderImpl::HandleCompressedCopyTextureCHROMIUM( |
| 5082 uint32_t immediate_data_size, | 4958 uint32_t immediate_data_size, |
| 5083 const void* cmd_data) { | 4959 const volatile void* cmd_data) { |
| 5084 const gles2::cmds::CompressedCopyTextureCHROMIUM& c = | 4960 const volatile gles2::cmds::CompressedCopyTextureCHROMIUM& c = |
| 5085 *static_cast<const gles2::cmds::CompressedCopyTextureCHROMIUM*>(cmd_data); | 4961 *static_cast<const volatile gles2::cmds::CompressedCopyTextureCHROMIUM*>( |
| 5086 (void)c; | 4962 cmd_data); |
| 5087 GLenum source_id = static_cast<GLenum>(c.source_id); | 4963 GLenum source_id = static_cast<GLenum>(c.source_id); |
| 5088 GLenum dest_id = static_cast<GLenum>(c.dest_id); | 4964 GLenum dest_id = static_cast<GLenum>(c.dest_id); |
| 5089 DoCompressedCopyTextureCHROMIUM(source_id, dest_id); | 4965 DoCompressedCopyTextureCHROMIUM(source_id, dest_id); |
| 5090 return error::kNoError; | 4966 return error::kNoError; |
| 5091 } | 4967 } |
| 5092 | 4968 |
| 5093 error::Error GLES2DecoderImpl::HandleProduceTextureCHROMIUMImmediate( | 4969 error::Error GLES2DecoderImpl::HandleProduceTextureCHROMIUMImmediate( |
| 5094 uint32_t immediate_data_size, | 4970 uint32_t immediate_data_size, |
| 5095 const void* cmd_data) { | 4971 const volatile void* cmd_data) { |
| 5096 const gles2::cmds::ProduceTextureCHROMIUMImmediate& c = | 4972 const volatile gles2::cmds::ProduceTextureCHROMIUMImmediate& c = *static_cast< |
| 5097 *static_cast<const gles2::cmds::ProduceTextureCHROMIUMImmediate*>( | 4973 const volatile gles2::cmds::ProduceTextureCHROMIUMImmediate*>(cmd_data); |
| 5098 cmd_data); | |
| 5099 (void)c; | |
| 5100 GLenum target = static_cast<GLenum>(c.target); | 4974 GLenum target = static_cast<GLenum>(c.target); |
| 5101 uint32_t data_size; | 4975 uint32_t data_size; |
| 5102 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { | 4976 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { |
| 5103 return error::kOutOfBounds; | 4977 return error::kOutOfBounds; |
| 5104 } | 4978 } |
| 5105 if (data_size > immediate_data_size) { | 4979 if (data_size > immediate_data_size) { |
| 5106 return error::kOutOfBounds; | 4980 return error::kOutOfBounds; |
| 5107 } | 4981 } |
| 5108 const GLbyte* mailbox = | 4982 volatile const GLbyte* mailbox = GetImmediateDataAs<volatile const GLbyte*>( |
| 5109 GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size); | 4983 c, data_size, immediate_data_size); |
| 5110 if (!validators_->texture_bind_target.IsValid(target)) { | 4984 if (!validators_->texture_bind_target.IsValid(target)) { |
| 5111 LOCAL_SET_GL_ERROR_INVALID_ENUM("glProduceTextureCHROMIUM", target, | 4985 LOCAL_SET_GL_ERROR_INVALID_ENUM("glProduceTextureCHROMIUM", target, |
| 5112 "target"); | 4986 "target"); |
| 5113 return error::kNoError; | 4987 return error::kNoError; |
| 5114 } | 4988 } |
| 5115 if (mailbox == NULL) { | 4989 if (mailbox == NULL) { |
| 5116 return error::kOutOfBounds; | 4990 return error::kOutOfBounds; |
| 5117 } | 4991 } |
| 5118 DoProduceTextureCHROMIUM(target, mailbox); | 4992 DoProduceTextureCHROMIUM(target, mailbox); |
| 5119 return error::kNoError; | 4993 return error::kNoError; |
| 5120 } | 4994 } |
| 5121 | 4995 |
| 5122 error::Error GLES2DecoderImpl::HandleProduceTextureDirectCHROMIUMImmediate( | 4996 error::Error GLES2DecoderImpl::HandleProduceTextureDirectCHROMIUMImmediate( |
| 5123 uint32_t immediate_data_size, | 4997 uint32_t immediate_data_size, |
| 5124 const void* cmd_data) { | 4998 const volatile void* cmd_data) { |
| 5125 const gles2::cmds::ProduceTextureDirectCHROMIUMImmediate& c = | 4999 const volatile gles2::cmds::ProduceTextureDirectCHROMIUMImmediate& c = |
| 5126 *static_cast<const gles2::cmds::ProduceTextureDirectCHROMIUMImmediate*>( | 5000 *static_cast< |
| 5001 const volatile gles2::cmds::ProduceTextureDirectCHROMIUMImmediate*>( |
| 5127 cmd_data); | 5002 cmd_data); |
| 5128 (void)c; | |
| 5129 GLuint texture = c.texture; | 5003 GLuint texture = c.texture; |
| 5130 GLenum target = static_cast<GLenum>(c.target); | 5004 GLenum target = static_cast<GLenum>(c.target); |
| 5131 uint32_t data_size; | 5005 uint32_t data_size; |
| 5132 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { | 5006 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { |
| 5133 return error::kOutOfBounds; | 5007 return error::kOutOfBounds; |
| 5134 } | 5008 } |
| 5135 if (data_size > immediate_data_size) { | 5009 if (data_size > immediate_data_size) { |
| 5136 return error::kOutOfBounds; | 5010 return error::kOutOfBounds; |
| 5137 } | 5011 } |
| 5138 const GLbyte* mailbox = | 5012 volatile const GLbyte* mailbox = GetImmediateDataAs<volatile const GLbyte*>( |
| 5139 GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size); | 5013 c, data_size, immediate_data_size); |
| 5140 if (!validators_->texture_bind_target.IsValid(target)) { | 5014 if (!validators_->texture_bind_target.IsValid(target)) { |
| 5141 LOCAL_SET_GL_ERROR_INVALID_ENUM("glProduceTextureDirectCHROMIUM", target, | 5015 LOCAL_SET_GL_ERROR_INVALID_ENUM("glProduceTextureDirectCHROMIUM", target, |
| 5142 "target"); | 5016 "target"); |
| 5143 return error::kNoError; | 5017 return error::kNoError; |
| 5144 } | 5018 } |
| 5145 if (mailbox == NULL) { | 5019 if (mailbox == NULL) { |
| 5146 return error::kOutOfBounds; | 5020 return error::kOutOfBounds; |
| 5147 } | 5021 } |
| 5148 DoProduceTextureDirectCHROMIUM(texture, target, mailbox); | 5022 DoProduceTextureDirectCHROMIUM(texture, target, mailbox); |
| 5149 return error::kNoError; | 5023 return error::kNoError; |
| 5150 } | 5024 } |
| 5151 | 5025 |
| 5152 error::Error GLES2DecoderImpl::HandleConsumeTextureCHROMIUMImmediate( | 5026 error::Error GLES2DecoderImpl::HandleConsumeTextureCHROMIUMImmediate( |
| 5153 uint32_t immediate_data_size, | 5027 uint32_t immediate_data_size, |
| 5154 const void* cmd_data) { | 5028 const volatile void* cmd_data) { |
| 5155 const gles2::cmds::ConsumeTextureCHROMIUMImmediate& c = | 5029 const volatile gles2::cmds::ConsumeTextureCHROMIUMImmediate& c = *static_cast< |
| 5156 *static_cast<const gles2::cmds::ConsumeTextureCHROMIUMImmediate*>( | 5030 const volatile gles2::cmds::ConsumeTextureCHROMIUMImmediate*>(cmd_data); |
| 5157 cmd_data); | |
| 5158 (void)c; | |
| 5159 GLenum target = static_cast<GLenum>(c.target); | 5031 GLenum target = static_cast<GLenum>(c.target); |
| 5160 uint32_t data_size; | 5032 uint32_t data_size; |
| 5161 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { | 5033 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { |
| 5162 return error::kOutOfBounds; | 5034 return error::kOutOfBounds; |
| 5163 } | 5035 } |
| 5164 if (data_size > immediate_data_size) { | 5036 if (data_size > immediate_data_size) { |
| 5165 return error::kOutOfBounds; | 5037 return error::kOutOfBounds; |
| 5166 } | 5038 } |
| 5167 const GLbyte* mailbox = | 5039 volatile const GLbyte* mailbox = GetImmediateDataAs<volatile const GLbyte*>( |
| 5168 GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size); | 5040 c, data_size, immediate_data_size); |
| 5169 if (!validators_->texture_bind_target.IsValid(target)) { | 5041 if (!validators_->texture_bind_target.IsValid(target)) { |
| 5170 LOCAL_SET_GL_ERROR_INVALID_ENUM("glConsumeTextureCHROMIUM", target, | 5042 LOCAL_SET_GL_ERROR_INVALID_ENUM("glConsumeTextureCHROMIUM", target, |
| 5171 "target"); | 5043 "target"); |
| 5172 return error::kNoError; | 5044 return error::kNoError; |
| 5173 } | 5045 } |
| 5174 if (mailbox == NULL) { | 5046 if (mailbox == NULL) { |
| 5175 return error::kOutOfBounds; | 5047 return error::kOutOfBounds; |
| 5176 } | 5048 } |
| 5177 DoConsumeTextureCHROMIUM(target, mailbox); | 5049 DoConsumeTextureCHROMIUM(target, mailbox); |
| 5178 return error::kNoError; | 5050 return error::kNoError; |
| 5179 } | 5051 } |
| 5180 | 5052 |
| 5181 error::Error GLES2DecoderImpl::HandleCreateAndConsumeTextureINTERNALImmediate( | 5053 error::Error GLES2DecoderImpl::HandleCreateAndConsumeTextureINTERNALImmediate( |
| 5182 uint32_t immediate_data_size, | 5054 uint32_t immediate_data_size, |
| 5183 const void* cmd_data) { | 5055 const volatile void* cmd_data) { |
| 5184 const gles2::cmds::CreateAndConsumeTextureINTERNALImmediate& c = *static_cast< | 5056 const volatile gles2::cmds::CreateAndConsumeTextureINTERNALImmediate& c = |
| 5185 const gles2::cmds::CreateAndConsumeTextureINTERNALImmediate*>(cmd_data); | 5057 *static_cast<const volatile gles2::cmds:: |
| 5186 (void)c; | 5058 CreateAndConsumeTextureINTERNALImmediate*>(cmd_data); |
| 5187 GLenum target = static_cast<GLenum>(c.target); | 5059 GLenum target = static_cast<GLenum>(c.target); |
| 5188 GLuint texture = static_cast<GLuint>(c.texture); | 5060 GLuint texture = static_cast<GLuint>(c.texture); |
| 5189 uint32_t data_size; | 5061 uint32_t data_size; |
| 5190 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { | 5062 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { |
| 5191 return error::kOutOfBounds; | 5063 return error::kOutOfBounds; |
| 5192 } | 5064 } |
| 5193 if (data_size > immediate_data_size) { | 5065 if (data_size > immediate_data_size) { |
| 5194 return error::kOutOfBounds; | 5066 return error::kOutOfBounds; |
| 5195 } | 5067 } |
| 5196 const GLbyte* mailbox = | 5068 volatile const GLbyte* mailbox = GetImmediateDataAs<volatile const GLbyte*>( |
| 5197 GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size); | 5069 c, data_size, immediate_data_size); |
| 5198 if (!validators_->texture_bind_target.IsValid(target)) { | 5070 if (!validators_->texture_bind_target.IsValid(target)) { |
| 5199 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCreateAndConsumeTextureINTERNAL", target, | 5071 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCreateAndConsumeTextureINTERNAL", target, |
| 5200 "target"); | 5072 "target"); |
| 5201 return error::kNoError; | 5073 return error::kNoError; |
| 5202 } | 5074 } |
| 5203 if (mailbox == NULL) { | 5075 if (mailbox == NULL) { |
| 5204 return error::kOutOfBounds; | 5076 return error::kOutOfBounds; |
| 5205 } | 5077 } |
| 5206 DoCreateAndConsumeTextureINTERNAL(target, texture, mailbox); | 5078 DoCreateAndConsumeTextureINTERNAL(target, texture, mailbox); |
| 5207 return error::kNoError; | 5079 return error::kNoError; |
| 5208 } | 5080 } |
| 5209 | 5081 |
| 5210 error::Error GLES2DecoderImpl::HandleBindTexImage2DCHROMIUM( | 5082 error::Error GLES2DecoderImpl::HandleBindTexImage2DCHROMIUM( |
| 5211 uint32_t immediate_data_size, | 5083 uint32_t immediate_data_size, |
| 5212 const void* cmd_data) { | 5084 const volatile void* cmd_data) { |
| 5213 const gles2::cmds::BindTexImage2DCHROMIUM& c = | 5085 const volatile gles2::cmds::BindTexImage2DCHROMIUM& c = |
| 5214 *static_cast<const gles2::cmds::BindTexImage2DCHROMIUM*>(cmd_data); | 5086 *static_cast<const volatile gles2::cmds::BindTexImage2DCHROMIUM*>( |
| 5215 (void)c; | 5087 cmd_data); |
| 5216 GLenum target = static_cast<GLenum>(c.target); | 5088 GLenum target = static_cast<GLenum>(c.target); |
| 5217 GLint imageId = static_cast<GLint>(c.imageId); | 5089 GLint imageId = static_cast<GLint>(c.imageId); |
| 5218 if (!validators_->texture_bind_target.IsValid(target)) { | 5090 if (!validators_->texture_bind_target.IsValid(target)) { |
| 5219 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTexImage2DCHROMIUM", target, | 5091 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTexImage2DCHROMIUM", target, |
| 5220 "target"); | 5092 "target"); |
| 5221 return error::kNoError; | 5093 return error::kNoError; |
| 5222 } | 5094 } |
| 5223 DoBindTexImage2DCHROMIUM(target, imageId); | 5095 DoBindTexImage2DCHROMIUM(target, imageId); |
| 5224 return error::kNoError; | 5096 return error::kNoError; |
| 5225 } | 5097 } |
| 5226 | 5098 |
| 5227 error::Error GLES2DecoderImpl::HandleReleaseTexImage2DCHROMIUM( | 5099 error::Error GLES2DecoderImpl::HandleReleaseTexImage2DCHROMIUM( |
| 5228 uint32_t immediate_data_size, | 5100 uint32_t immediate_data_size, |
| 5229 const void* cmd_data) { | 5101 const volatile void* cmd_data) { |
| 5230 const gles2::cmds::ReleaseTexImage2DCHROMIUM& c = | 5102 const volatile gles2::cmds::ReleaseTexImage2DCHROMIUM& c = |
| 5231 *static_cast<const gles2::cmds::ReleaseTexImage2DCHROMIUM*>(cmd_data); | 5103 *static_cast<const volatile gles2::cmds::ReleaseTexImage2DCHROMIUM*>( |
| 5232 (void)c; | 5104 cmd_data); |
| 5233 GLenum target = static_cast<GLenum>(c.target); | 5105 GLenum target = static_cast<GLenum>(c.target); |
| 5234 GLint imageId = static_cast<GLint>(c.imageId); | 5106 GLint imageId = static_cast<GLint>(c.imageId); |
| 5235 if (!validators_->texture_bind_target.IsValid(target)) { | 5107 if (!validators_->texture_bind_target.IsValid(target)) { |
| 5236 LOCAL_SET_GL_ERROR_INVALID_ENUM("glReleaseTexImage2DCHROMIUM", target, | 5108 LOCAL_SET_GL_ERROR_INVALID_ENUM("glReleaseTexImage2DCHROMIUM", target, |
| 5237 "target"); | 5109 "target"); |
| 5238 return error::kNoError; | 5110 return error::kNoError; |
| 5239 } | 5111 } |
| 5240 DoReleaseTexImage2DCHROMIUM(target, imageId); | 5112 DoReleaseTexImage2DCHROMIUM(target, imageId); |
| 5241 return error::kNoError; | 5113 return error::kNoError; |
| 5242 } | 5114 } |
| 5243 | 5115 |
| 5244 error::Error GLES2DecoderImpl::HandleTraceEndCHROMIUM( | 5116 error::Error GLES2DecoderImpl::HandleTraceEndCHROMIUM( |
| 5245 uint32_t immediate_data_size, | 5117 uint32_t immediate_data_size, |
| 5246 const void* cmd_data) { | 5118 const volatile void* cmd_data) { |
| 5247 const gles2::cmds::TraceEndCHROMIUM& c = | |
| 5248 *static_cast<const gles2::cmds::TraceEndCHROMIUM*>(cmd_data); | |
| 5249 (void)c; | |
| 5250 DoTraceEndCHROMIUM(); | 5119 DoTraceEndCHROMIUM(); |
| 5251 return error::kNoError; | 5120 return error::kNoError; |
| 5252 } | 5121 } |
| 5253 | 5122 |
| 5254 error::Error GLES2DecoderImpl::HandleDiscardFramebufferEXTImmediate( | 5123 error::Error GLES2DecoderImpl::HandleDiscardFramebufferEXTImmediate( |
| 5255 uint32_t immediate_data_size, | 5124 uint32_t immediate_data_size, |
| 5256 const void* cmd_data) { | 5125 const volatile void* cmd_data) { |
| 5257 const gles2::cmds::DiscardFramebufferEXTImmediate& c = | 5126 const volatile gles2::cmds::DiscardFramebufferEXTImmediate& c = |
| 5258 *static_cast<const gles2::cmds::DiscardFramebufferEXTImmediate*>( | 5127 *static_cast<const volatile gles2::cmds::DiscardFramebufferEXTImmediate*>( |
| 5259 cmd_data); | 5128 cmd_data); |
| 5260 (void)c; | |
| 5261 if (!features().ext_discard_framebuffer) { | 5129 if (!features().ext_discard_framebuffer) { |
| 5262 return error::kUnknownCommand; | 5130 return error::kUnknownCommand; |
| 5263 } | 5131 } |
| 5264 | 5132 |
| 5265 GLenum target = static_cast<GLenum>(c.target); | 5133 GLenum target = static_cast<GLenum>(c.target); |
| 5266 GLsizei count = static_cast<GLsizei>(c.count); | 5134 GLsizei count = static_cast<GLsizei>(c.count); |
| 5267 uint32_t data_size = 0; | 5135 uint32_t data_size = 0; |
| 5268 if (count >= 0 && | 5136 if (count >= 0 && |
| 5269 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { | 5137 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { |
| 5270 return error::kOutOfBounds; | 5138 return error::kOutOfBounds; |
| 5271 } | 5139 } |
| 5272 if (data_size > immediate_data_size) { | 5140 if (data_size > immediate_data_size) { |
| 5273 return error::kOutOfBounds; | 5141 return error::kOutOfBounds; |
| 5274 } | 5142 } |
| 5275 const GLenum* attachments = | 5143 volatile const GLenum* attachments = |
| 5276 GetImmediateDataAs<const GLenum*>(c, data_size, immediate_data_size); | 5144 GetImmediateDataAs<volatile const GLenum*>(c, data_size, |
| 5145 immediate_data_size); |
| 5277 if (count < 0) { | 5146 if (count < 0) { |
| 5278 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glDiscardFramebufferEXT", | 5147 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glDiscardFramebufferEXT", |
| 5279 "count < 0"); | 5148 "count < 0"); |
| 5280 return error::kNoError; | 5149 return error::kNoError; |
| 5281 } | 5150 } |
| 5282 if (attachments == NULL) { | 5151 if (attachments == NULL) { |
| 5283 return error::kOutOfBounds; | 5152 return error::kOutOfBounds; |
| 5284 } | 5153 } |
| 5285 DoDiscardFramebufferEXT(target, count, attachments); | 5154 DoDiscardFramebufferEXT(target, count, attachments); |
| 5286 return error::kNoError; | 5155 return error::kNoError; |
| 5287 } | 5156 } |
| 5288 | 5157 |
| 5289 error::Error GLES2DecoderImpl::HandleLoseContextCHROMIUM( | 5158 error::Error GLES2DecoderImpl::HandleLoseContextCHROMIUM( |
| 5290 uint32_t immediate_data_size, | 5159 uint32_t immediate_data_size, |
| 5291 const void* cmd_data) { | 5160 const volatile void* cmd_data) { |
| 5292 const gles2::cmds::LoseContextCHROMIUM& c = | 5161 const volatile gles2::cmds::LoseContextCHROMIUM& c = |
| 5293 *static_cast<const gles2::cmds::LoseContextCHROMIUM*>(cmd_data); | 5162 *static_cast<const volatile gles2::cmds::LoseContextCHROMIUM*>(cmd_data); |
| 5294 (void)c; | |
| 5295 GLenum current = static_cast<GLenum>(c.current); | 5163 GLenum current = static_cast<GLenum>(c.current); |
| 5296 GLenum other = static_cast<GLenum>(c.other); | 5164 GLenum other = static_cast<GLenum>(c.other); |
| 5297 if (!validators_->reset_status.IsValid(current)) { | 5165 if (!validators_->reset_status.IsValid(current)) { |
| 5298 LOCAL_SET_GL_ERROR_INVALID_ENUM("glLoseContextCHROMIUM", current, | 5166 LOCAL_SET_GL_ERROR_INVALID_ENUM("glLoseContextCHROMIUM", current, |
| 5299 "current"); | 5167 "current"); |
| 5300 return error::kNoError; | 5168 return error::kNoError; |
| 5301 } | 5169 } |
| 5302 if (!validators_->reset_status.IsValid(other)) { | 5170 if (!validators_->reset_status.IsValid(other)) { |
| 5303 LOCAL_SET_GL_ERROR_INVALID_ENUM("glLoseContextCHROMIUM", other, "other"); | 5171 LOCAL_SET_GL_ERROR_INVALID_ENUM("glLoseContextCHROMIUM", other, "other"); |
| 5304 return error::kNoError; | 5172 return error::kNoError; |
| 5305 } | 5173 } |
| 5306 DoLoseContextCHROMIUM(current, other); | 5174 DoLoseContextCHROMIUM(current, other); |
| 5307 return error::kNoError; | 5175 return error::kNoError; |
| 5308 } | 5176 } |
| 5309 | 5177 |
| 5310 error::Error GLES2DecoderImpl::HandleDrawBuffersEXTImmediate( | 5178 error::Error GLES2DecoderImpl::HandleDrawBuffersEXTImmediate( |
| 5311 uint32_t immediate_data_size, | 5179 uint32_t immediate_data_size, |
| 5312 const void* cmd_data) { | 5180 const volatile void* cmd_data) { |
| 5313 const gles2::cmds::DrawBuffersEXTImmediate& c = | 5181 const volatile gles2::cmds::DrawBuffersEXTImmediate& c = |
| 5314 *static_cast<const gles2::cmds::DrawBuffersEXTImmediate*>(cmd_data); | 5182 *static_cast<const volatile gles2::cmds::DrawBuffersEXTImmediate*>( |
| 5315 (void)c; | 5183 cmd_data); |
| 5316 GLsizei count = static_cast<GLsizei>(c.count); | 5184 GLsizei count = static_cast<GLsizei>(c.count); |
| 5317 uint32_t data_size = 0; | 5185 uint32_t data_size = 0; |
| 5318 if (count >= 0 && | 5186 if (count >= 0 && |
| 5319 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { | 5187 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { |
| 5320 return error::kOutOfBounds; | 5188 return error::kOutOfBounds; |
| 5321 } | 5189 } |
| 5322 if (data_size > immediate_data_size) { | 5190 if (data_size > immediate_data_size) { |
| 5323 return error::kOutOfBounds; | 5191 return error::kOutOfBounds; |
| 5324 } | 5192 } |
| 5325 const GLenum* bufs = | 5193 volatile const GLenum* bufs = GetImmediateDataAs<volatile const GLenum*>( |
| 5326 GetImmediateDataAs<const GLenum*>(c, data_size, immediate_data_size); | 5194 c, data_size, immediate_data_size); |
| 5327 if (count < 0) { | 5195 if (count < 0) { |
| 5328 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glDrawBuffersEXT", "count < 0"); | 5196 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glDrawBuffersEXT", "count < 0"); |
| 5329 return error::kNoError; | 5197 return error::kNoError; |
| 5330 } | 5198 } |
| 5331 if (bufs == NULL) { | 5199 if (bufs == NULL) { |
| 5332 return error::kOutOfBounds; | 5200 return error::kOutOfBounds; |
| 5333 } | 5201 } |
| 5334 DoDrawBuffersEXT(count, bufs); | 5202 DoDrawBuffersEXT(count, bufs); |
| 5335 return error::kNoError; | 5203 return error::kNoError; |
| 5336 } | 5204 } |
| 5337 | 5205 |
| 5338 error::Error GLES2DecoderImpl::HandleScheduleCALayerInUseQueryCHROMIUMImmediate( | 5206 error::Error GLES2DecoderImpl::HandleScheduleCALayerInUseQueryCHROMIUMImmediate( |
| 5339 uint32_t immediate_data_size, | 5207 uint32_t immediate_data_size, |
| 5340 const void* cmd_data) { | 5208 const volatile void* cmd_data) { |
| 5341 const gles2::cmds::ScheduleCALayerInUseQueryCHROMIUMImmediate& c = | 5209 const volatile gles2::cmds::ScheduleCALayerInUseQueryCHROMIUMImmediate& c = |
| 5342 *static_cast< | 5210 *static_cast<const volatile gles2::cmds:: |
| 5343 const gles2::cmds::ScheduleCALayerInUseQueryCHROMIUMImmediate*>( | 5211 ScheduleCALayerInUseQueryCHROMIUMImmediate*>(cmd_data); |
| 5344 cmd_data); | |
| 5345 (void)c; | |
| 5346 GLsizei count = static_cast<GLsizei>(c.count); | 5212 GLsizei count = static_cast<GLsizei>(c.count); |
| 5347 uint32_t data_size = 0; | 5213 uint32_t data_size = 0; |
| 5348 if (count >= 0 && | 5214 if (count >= 0 && |
| 5349 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 1, &data_size)) { | 5215 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 1, &data_size)) { |
| 5350 return error::kOutOfBounds; | 5216 return error::kOutOfBounds; |
| 5351 } | 5217 } |
| 5352 if (data_size > immediate_data_size) { | 5218 if (data_size > immediate_data_size) { |
| 5353 return error::kOutOfBounds; | 5219 return error::kOutOfBounds; |
| 5354 } | 5220 } |
| 5355 const GLuint* textures = | 5221 volatile const GLuint* textures = GetImmediateDataAs<volatile const GLuint*>( |
| 5356 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); | 5222 c, data_size, immediate_data_size); |
| 5357 if (count < 0) { | 5223 if (count < 0) { |
| 5358 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScheduleCALayerInUseQueryCHROMIUM", | 5224 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScheduleCALayerInUseQueryCHROMIUM", |
| 5359 "count < 0"); | 5225 "count < 0"); |
| 5360 return error::kNoError; | 5226 return error::kNoError; |
| 5361 } | 5227 } |
| 5362 if (textures == NULL) { | 5228 if (textures == NULL) { |
| 5363 return error::kOutOfBounds; | 5229 return error::kOutOfBounds; |
| 5364 } | 5230 } |
| 5365 DoScheduleCALayerInUseQueryCHROMIUM(count, textures); | 5231 DoScheduleCALayerInUseQueryCHROMIUM(count, textures); |
| 5366 return error::kNoError; | 5232 return error::kNoError; |
| 5367 } | 5233 } |
| 5368 | 5234 |
| 5369 error::Error GLES2DecoderImpl::HandleCommitOverlayPlanesCHROMIUM( | 5235 error::Error GLES2DecoderImpl::HandleCommitOverlayPlanesCHROMIUM( |
| 5370 uint32_t immediate_data_size, | 5236 uint32_t immediate_data_size, |
| 5371 const void* cmd_data) { | 5237 const volatile void* cmd_data) { |
| 5372 const gles2::cmds::CommitOverlayPlanesCHROMIUM& c = | |
| 5373 *static_cast<const gles2::cmds::CommitOverlayPlanesCHROMIUM*>(cmd_data); | |
| 5374 (void)c; | |
| 5375 DoCommitOverlayPlanes(); | 5238 DoCommitOverlayPlanes(); |
| 5376 return error::kNoError; | 5239 return error::kNoError; |
| 5377 } | 5240 } |
| 5378 | 5241 |
| 5379 error::Error GLES2DecoderImpl::HandleSwapInterval(uint32_t immediate_data_size, | 5242 error::Error GLES2DecoderImpl::HandleSwapInterval( |
| 5380 const void* cmd_data) { | 5243 uint32_t immediate_data_size, |
| 5381 const gles2::cmds::SwapInterval& c = | 5244 const volatile void* cmd_data) { |
| 5382 *static_cast<const gles2::cmds::SwapInterval*>(cmd_data); | 5245 const volatile gles2::cmds::SwapInterval& c = |
| 5383 (void)c; | 5246 *static_cast<const volatile gles2::cmds::SwapInterval*>(cmd_data); |
| 5384 GLint interval = static_cast<GLint>(c.interval); | 5247 GLint interval = static_cast<GLint>(c.interval); |
| 5385 DoSwapInterval(interval); | 5248 DoSwapInterval(interval); |
| 5386 return error::kNoError; | 5249 return error::kNoError; |
| 5387 } | 5250 } |
| 5388 | 5251 |
| 5389 error::Error GLES2DecoderImpl::HandleFlushDriverCachesCHROMIUM( | 5252 error::Error GLES2DecoderImpl::HandleFlushDriverCachesCHROMIUM( |
| 5390 uint32_t immediate_data_size, | 5253 uint32_t immediate_data_size, |
| 5391 const void* cmd_data) { | 5254 const volatile void* cmd_data) { |
| 5392 const gles2::cmds::FlushDriverCachesCHROMIUM& c = | |
| 5393 *static_cast<const gles2::cmds::FlushDriverCachesCHROMIUM*>(cmd_data); | |
| 5394 (void)c; | |
| 5395 DoFlushDriverCachesCHROMIUM(); | 5255 DoFlushDriverCachesCHROMIUM(); |
| 5396 return error::kNoError; | 5256 return error::kNoError; |
| 5397 } | 5257 } |
| 5398 | 5258 |
| 5399 error::Error GLES2DecoderImpl::HandleMatrixLoadfCHROMIUMImmediate( | 5259 error::Error GLES2DecoderImpl::HandleMatrixLoadfCHROMIUMImmediate( |
| 5400 uint32_t immediate_data_size, | 5260 uint32_t immediate_data_size, |
| 5401 const void* cmd_data) { | 5261 const volatile void* cmd_data) { |
| 5402 const gles2::cmds::MatrixLoadfCHROMIUMImmediate& c = | 5262 const volatile gles2::cmds::MatrixLoadfCHROMIUMImmediate& c = |
| 5403 *static_cast<const gles2::cmds::MatrixLoadfCHROMIUMImmediate*>(cmd_data); | 5263 *static_cast<const volatile gles2::cmds::MatrixLoadfCHROMIUMImmediate*>( |
| 5404 (void)c; | 5264 cmd_data); |
| 5405 if (!features().chromium_path_rendering) { | 5265 if (!features().chromium_path_rendering) { |
| 5406 return error::kUnknownCommand; | 5266 return error::kUnknownCommand; |
| 5407 } | 5267 } |
| 5408 | 5268 |
| 5409 GLenum matrixMode = static_cast<GLenum>(c.matrixMode); | 5269 GLenum matrixMode = static_cast<GLenum>(c.matrixMode); |
| 5410 uint32_t data_size; | 5270 uint32_t data_size; |
| 5411 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 16, &data_size)) { | 5271 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 16, &data_size)) { |
| 5412 return error::kOutOfBounds; | 5272 return error::kOutOfBounds; |
| 5413 } | 5273 } |
| 5414 if (data_size > immediate_data_size) { | 5274 if (data_size > immediate_data_size) { |
| 5415 return error::kOutOfBounds; | 5275 return error::kOutOfBounds; |
| 5416 } | 5276 } |
| 5417 const GLfloat* m = | 5277 volatile const GLfloat* m = GetImmediateDataAs<volatile const GLfloat*>( |
| 5418 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 5278 c, data_size, immediate_data_size); |
| 5419 if (!validators_->matrix_mode.IsValid(matrixMode)) { | 5279 if (!validators_->matrix_mode.IsValid(matrixMode)) { |
| 5420 LOCAL_SET_GL_ERROR_INVALID_ENUM("glMatrixLoadfCHROMIUM", matrixMode, | 5280 LOCAL_SET_GL_ERROR_INVALID_ENUM("glMatrixLoadfCHROMIUM", matrixMode, |
| 5421 "matrixMode"); | 5281 "matrixMode"); |
| 5422 return error::kNoError; | 5282 return error::kNoError; |
| 5423 } | 5283 } |
| 5424 if (m == NULL) { | 5284 if (m == NULL) { |
| 5425 return error::kOutOfBounds; | 5285 return error::kOutOfBounds; |
| 5426 } | 5286 } |
| 5427 DoMatrixLoadfCHROMIUM(matrixMode, m); | 5287 DoMatrixLoadfCHROMIUM(matrixMode, m); |
| 5428 return error::kNoError; | 5288 return error::kNoError; |
| 5429 } | 5289 } |
| 5430 | 5290 |
| 5431 error::Error GLES2DecoderImpl::HandleMatrixLoadIdentityCHROMIUM( | 5291 error::Error GLES2DecoderImpl::HandleMatrixLoadIdentityCHROMIUM( |
| 5432 uint32_t immediate_data_size, | 5292 uint32_t immediate_data_size, |
| 5433 const void* cmd_data) { | 5293 const volatile void* cmd_data) { |
| 5434 const gles2::cmds::MatrixLoadIdentityCHROMIUM& c = | 5294 const volatile gles2::cmds::MatrixLoadIdentityCHROMIUM& c = |
| 5435 *static_cast<const gles2::cmds::MatrixLoadIdentityCHROMIUM*>(cmd_data); | 5295 *static_cast<const volatile gles2::cmds::MatrixLoadIdentityCHROMIUM*>( |
| 5436 (void)c; | 5296 cmd_data); |
| 5437 if (!features().chromium_path_rendering) { | 5297 if (!features().chromium_path_rendering) { |
| 5438 return error::kUnknownCommand; | 5298 return error::kUnknownCommand; |
| 5439 } | 5299 } |
| 5440 | 5300 |
| 5441 GLenum matrixMode = static_cast<GLenum>(c.matrixMode); | 5301 GLenum matrixMode = static_cast<GLenum>(c.matrixMode); |
| 5442 if (!validators_->matrix_mode.IsValid(matrixMode)) { | 5302 if (!validators_->matrix_mode.IsValid(matrixMode)) { |
| 5443 LOCAL_SET_GL_ERROR_INVALID_ENUM("glMatrixLoadIdentityCHROMIUM", matrixMode, | 5303 LOCAL_SET_GL_ERROR_INVALID_ENUM("glMatrixLoadIdentityCHROMIUM", matrixMode, |
| 5444 "matrixMode"); | 5304 "matrixMode"); |
| 5445 return error::kNoError; | 5305 return error::kNoError; |
| 5446 } | 5306 } |
| 5447 DoMatrixLoadIdentityCHROMIUM(matrixMode); | 5307 DoMatrixLoadIdentityCHROMIUM(matrixMode); |
| 5448 return error::kNoError; | 5308 return error::kNoError; |
| 5449 } | 5309 } |
| 5450 | 5310 |
| 5451 error::Error GLES2DecoderImpl::HandleIsPathCHROMIUM( | 5311 error::Error GLES2DecoderImpl::HandleIsPathCHROMIUM( |
| 5452 uint32_t immediate_data_size, | 5312 uint32_t immediate_data_size, |
| 5453 const void* cmd_data) { | 5313 const volatile void* cmd_data) { |
| 5454 const gles2::cmds::IsPathCHROMIUM& c = | 5314 const volatile gles2::cmds::IsPathCHROMIUM& c = |
| 5455 *static_cast<const gles2::cmds::IsPathCHROMIUM*>(cmd_data); | 5315 *static_cast<const volatile gles2::cmds::IsPathCHROMIUM*>(cmd_data); |
| 5456 (void)c; | |
| 5457 if (!features().chromium_path_rendering) { | 5316 if (!features().chromium_path_rendering) { |
| 5458 return error::kUnknownCommand; | 5317 return error::kUnknownCommand; |
| 5459 } | 5318 } |
| 5460 | 5319 |
| 5461 GLuint path = c.path; | 5320 GLuint path = c.path; |
| 5462 typedef cmds::IsPathCHROMIUM::Result Result; | 5321 typedef cmds::IsPathCHROMIUM::Result Result; |
| 5463 Result* result_dst = GetSharedMemoryAs<Result*>( | 5322 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 5464 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 5323 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 5465 if (!result_dst) { | 5324 if (!result_dst) { |
| 5466 return error::kOutOfBounds; | 5325 return error::kOutOfBounds; |
| 5467 } | 5326 } |
| 5468 *result_dst = DoIsPathCHROMIUM(path); | 5327 *result_dst = DoIsPathCHROMIUM(path); |
| 5469 return error::kNoError; | 5328 return error::kNoError; |
| 5470 } | 5329 } |
| 5471 | 5330 |
| 5472 error::Error GLES2DecoderImpl::HandlePathStencilFuncCHROMIUM( | 5331 error::Error GLES2DecoderImpl::HandlePathStencilFuncCHROMIUM( |
| 5473 uint32_t immediate_data_size, | 5332 uint32_t immediate_data_size, |
| 5474 const void* cmd_data) { | 5333 const volatile void* cmd_data) { |
| 5475 const gles2::cmds::PathStencilFuncCHROMIUM& c = | 5334 const volatile gles2::cmds::PathStencilFuncCHROMIUM& c = |
| 5476 *static_cast<const gles2::cmds::PathStencilFuncCHROMIUM*>(cmd_data); | 5335 *static_cast<const volatile gles2::cmds::PathStencilFuncCHROMIUM*>( |
| 5477 (void)c; | 5336 cmd_data); |
| 5478 if (!features().chromium_path_rendering) { | 5337 if (!features().chromium_path_rendering) { |
| 5479 return error::kUnknownCommand; | 5338 return error::kUnknownCommand; |
| 5480 } | 5339 } |
| 5481 | 5340 |
| 5482 GLenum func = static_cast<GLenum>(c.func); | 5341 GLenum func = static_cast<GLenum>(c.func); |
| 5483 GLint ref = static_cast<GLint>(c.ref); | 5342 GLint ref = static_cast<GLint>(c.ref); |
| 5484 GLuint mask = static_cast<GLuint>(c.mask); | 5343 GLuint mask = static_cast<GLuint>(c.mask); |
| 5485 if (!validators_->cmp_function.IsValid(func)) { | 5344 if (!validators_->cmp_function.IsValid(func)) { |
| 5486 LOCAL_SET_GL_ERROR_INVALID_ENUM("glPathStencilFuncCHROMIUM", func, "func"); | 5345 LOCAL_SET_GL_ERROR_INVALID_ENUM("glPathStencilFuncCHROMIUM", func, "func"); |
| 5487 return error::kNoError; | 5346 return error::kNoError; |
| 5488 } | 5347 } |
| 5489 if (state_.stencil_path_func != func || state_.stencil_path_ref != ref || | 5348 if (state_.stencil_path_func != func || state_.stencil_path_ref != ref || |
| 5490 state_.stencil_path_mask != mask) { | 5349 state_.stencil_path_mask != mask) { |
| 5491 state_.stencil_path_func = func; | 5350 state_.stencil_path_func = func; |
| 5492 state_.stencil_path_ref = ref; | 5351 state_.stencil_path_ref = ref; |
| 5493 state_.stencil_path_mask = mask; | 5352 state_.stencil_path_mask = mask; |
| 5494 glPathStencilFuncNV(func, ref, mask); | 5353 glPathStencilFuncNV(func, ref, mask); |
| 5495 } | 5354 } |
| 5496 return error::kNoError; | 5355 return error::kNoError; |
| 5497 } | 5356 } |
| 5498 | 5357 |
| 5499 error::Error GLES2DecoderImpl::HandleCoverageModulationCHROMIUM( | 5358 error::Error GLES2DecoderImpl::HandleCoverageModulationCHROMIUM( |
| 5500 uint32_t immediate_data_size, | 5359 uint32_t immediate_data_size, |
| 5501 const void* cmd_data) { | 5360 const volatile void* cmd_data) { |
| 5502 const gles2::cmds::CoverageModulationCHROMIUM& c = | 5361 const volatile gles2::cmds::CoverageModulationCHROMIUM& c = |
| 5503 *static_cast<const gles2::cmds::CoverageModulationCHROMIUM*>(cmd_data); | 5362 *static_cast<const volatile gles2::cmds::CoverageModulationCHROMIUM*>( |
| 5504 (void)c; | 5363 cmd_data); |
| 5505 if (!features().chromium_framebuffer_mixed_samples) { | 5364 if (!features().chromium_framebuffer_mixed_samples) { |
| 5506 return error::kUnknownCommand; | 5365 return error::kUnknownCommand; |
| 5507 } | 5366 } |
| 5508 | 5367 |
| 5509 GLenum components = static_cast<GLenum>(c.components); | 5368 GLenum components = static_cast<GLenum>(c.components); |
| 5510 if (!validators_->coverage_modulation_components.IsValid(components)) { | 5369 if (!validators_->coverage_modulation_components.IsValid(components)) { |
| 5511 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCoverageModulationCHROMIUM", components, | 5370 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCoverageModulationCHROMIUM", components, |
| 5512 "components"); | 5371 "components"); |
| 5513 return error::kNoError; | 5372 return error::kNoError; |
| 5514 } | 5373 } |
| 5515 if (state_.coverage_modulation != components) { | 5374 if (state_.coverage_modulation != components) { |
| 5516 state_.coverage_modulation = components; | 5375 state_.coverage_modulation = components; |
| 5517 glCoverageModulationNV(components); | 5376 glCoverageModulationNV(components); |
| 5518 } | 5377 } |
| 5519 return error::kNoError; | 5378 return error::kNoError; |
| 5520 } | 5379 } |
| 5521 | 5380 |
| 5522 error::Error GLES2DecoderImpl::HandleBlendBarrierKHR( | 5381 error::Error GLES2DecoderImpl::HandleBlendBarrierKHR( |
| 5523 uint32_t immediate_data_size, | 5382 uint32_t immediate_data_size, |
| 5524 const void* cmd_data) { | 5383 const volatile void* cmd_data) { |
| 5525 const gles2::cmds::BlendBarrierKHR& c = | |
| 5526 *static_cast<const gles2::cmds::BlendBarrierKHR*>(cmd_data); | |
| 5527 (void)c; | |
| 5528 if (!features().blend_equation_advanced) { | 5384 if (!features().blend_equation_advanced) { |
| 5529 return error::kUnknownCommand; | 5385 return error::kUnknownCommand; |
| 5530 } | 5386 } |
| 5531 | 5387 |
| 5532 glBlendBarrierKHR(); | 5388 glBlendBarrierKHR(); |
| 5533 return error::kNoError; | 5389 return error::kNoError; |
| 5534 } | 5390 } |
| 5535 | 5391 |
| 5536 error::Error GLES2DecoderImpl::HandleApplyScreenSpaceAntialiasingCHROMIUM( | 5392 error::Error GLES2DecoderImpl::HandleApplyScreenSpaceAntialiasingCHROMIUM( |
| 5537 uint32_t immediate_data_size, | 5393 uint32_t immediate_data_size, |
| 5538 const void* cmd_data) { | 5394 const volatile void* cmd_data) { |
| 5539 const gles2::cmds::ApplyScreenSpaceAntialiasingCHROMIUM& c = | |
| 5540 *static_cast<const gles2::cmds::ApplyScreenSpaceAntialiasingCHROMIUM*>( | |
| 5541 cmd_data); | |
| 5542 (void)c; | |
| 5543 if (!features().chromium_screen_space_antialiasing) { | 5395 if (!features().chromium_screen_space_antialiasing) { |
| 5544 return error::kUnknownCommand; | 5396 return error::kUnknownCommand; |
| 5545 } | 5397 } |
| 5546 | 5398 |
| 5547 DoApplyScreenSpaceAntialiasingCHROMIUM(); | 5399 DoApplyScreenSpaceAntialiasingCHROMIUM(); |
| 5548 return error::kNoError; | 5400 return error::kNoError; |
| 5549 } | 5401 } |
| 5550 | 5402 |
| 5551 error::Error | 5403 error::Error |
| 5552 GLES2DecoderImpl::HandleUniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate( | 5404 GLES2DecoderImpl::HandleUniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate( |
| 5553 uint32_t immediate_data_size, | 5405 uint32_t immediate_data_size, |
| 5554 const void* cmd_data) { | 5406 const volatile void* cmd_data) { |
| 5555 const gles2::cmds::UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate& c = | 5407 const volatile gles2::cmds:: |
| 5556 *static_cast<const gles2::cmds:: | 5408 UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate& c = *static_cast< |
| 5557 UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate*>( | 5409 const volatile gles2::cmds:: |
| 5558 cmd_data); | 5410 UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate*>(cmd_data); |
| 5559 (void)c; | |
| 5560 GLint location = static_cast<GLint>(c.location); | 5411 GLint location = static_cast<GLint>(c.location); |
| 5561 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 5412 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
| 5562 uint32_t data_size; | 5413 uint32_t data_size; |
| 5563 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 16, &data_size)) { | 5414 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 16, &data_size)) { |
| 5564 return error::kOutOfBounds; | 5415 return error::kOutOfBounds; |
| 5565 } | 5416 } |
| 5566 if (data_size > immediate_data_size) { | 5417 if (data_size > immediate_data_size) { |
| 5567 return error::kOutOfBounds; | 5418 return error::kOutOfBounds; |
| 5568 } | 5419 } |
| 5569 const GLfloat* transform = | 5420 volatile const GLfloat* transform = |
| 5570 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); | 5421 GetImmediateDataAs<volatile const GLfloat*>(c, data_size, |
| 5422 immediate_data_size); |
| 5571 if (transform == NULL) { | 5423 if (transform == NULL) { |
| 5572 return error::kOutOfBounds; | 5424 return error::kOutOfBounds; |
| 5573 } | 5425 } |
| 5574 DoUniformMatrix4fvStreamTextureMatrixCHROMIUM(location, transpose, transform); | 5426 DoUniformMatrix4fvStreamTextureMatrixCHROMIUM(location, transpose, transform); |
| 5575 return error::kNoError; | 5427 return error::kNoError; |
| 5576 } | 5428 } |
| 5577 | 5429 |
| 5578 bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) { | 5430 bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) { |
| 5579 switch (cap) { | 5431 switch (cap) { |
| 5580 case GL_BLEND: | 5432 case GL_BLEND: |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5678 state_.enable_flags.cached_sample_alpha_to_one_ext = enabled; | 5530 state_.enable_flags.cached_sample_alpha_to_one_ext = enabled; |
| 5679 return true; | 5531 return true; |
| 5680 } | 5532 } |
| 5681 return false; | 5533 return false; |
| 5682 default: | 5534 default: |
| 5683 NOTREACHED(); | 5535 NOTREACHED(); |
| 5684 return false; | 5536 return false; |
| 5685 } | 5537 } |
| 5686 } | 5538 } |
| 5687 #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ | 5539 #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ |
| OLD | NEW |