14ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is auto-generated from 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// gpu/command_buffer/build_gles2_cmd_buffer.py 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// It's formatted by clang-format using chromium coding style: 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// clang-format -i -style=chromium filename 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DO NOT EDIT! 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It is included by gles2_cmd_decoder.cc 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleActiveTexture(uint32_t immediate_data_size, 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::ActiveTexture& c = 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::ActiveTexture*>(cmd_data); 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum texture = static_cast<GLenum>(c.texture); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoActiveTexture(texture); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleAttachShader(uint32_t immediate_data_size, 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::AttachShader& c = 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::AttachShader*>(cmd_data); 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint program = c.program; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint shader = c.shader; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoAttachShader(program, shader); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleBindBuffer(uint32_t immediate_data_size, 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::BindBuffer& c = 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::BindBuffer*>(cmd_data); 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint buffer = c.buffer; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->buffer_target.IsValid(target)) { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindBuffer", target, "target"); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBindBuffer(target, buffer); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleBindFramebuffer( 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::BindFramebuffer& c = 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::BindFramebuffer*>(cmd_data); 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint framebuffer = c.framebuffer; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->frame_buffer_target.IsValid(target)) { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindFramebuffer", target, "target"); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBindFramebuffer(target, framebuffer); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleBindRenderbuffer( 68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::BindRenderbuffer& c = 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::BindRenderbuffer*>(cmd_data); 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint renderbuffer = c.renderbuffer; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->render_buffer_target.IsValid(target)) { 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindRenderbuffer", target, "target"); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBindRenderbuffer(target, renderbuffer); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleBindTexture(uint32_t immediate_data_size, 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::BindTexture& c = 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::BindTexture*>(cmd_data); 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint texture = c.texture; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_bind_target.IsValid(target)) { 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTexture", target, "target"); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBindTexture(target, texture); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleBlendColor(uint32_t immediate_data_size, 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::BlendColor& c = 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::BlendColor*>(cmd_data); 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf red = static_cast<GLclampf>(c.red); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf green = static_cast<GLclampf>(c.green); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf blue = static_cast<GLclampf>(c.blue); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf alpha = static_cast<GLclampf>(c.alpha); 107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (state_.blend_color_red != red || state_.blend_color_green != green || 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state_.blend_color_blue != blue || state_.blend_color_alpha != alpha) { 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_color_red = red; 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_color_green = green; 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_color_blue = blue; 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_color_alpha = alpha; 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glBlendColor(red, green, blue, alpha); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleBlendEquation(uint32_t immediate_data_size, 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::BlendEquation& c = 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::BlendEquation*>(cmd_data); 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum mode = static_cast<GLenum>(c.mode); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->equation.IsValid(mode)) { 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquation", mode, "mode"); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state_.blend_equation_rgb != mode || 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_equation_alpha != mode) { 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_equation_rgb = mode; 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_equation_alpha = mode; 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glBlendEquation(mode); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleBlendEquationSeparate( 138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::BlendEquationSeparate& c = 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::BlendEquationSeparate*>(cmd_data); 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum modeRGB = static_cast<GLenum>(c.modeRGB); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum modeAlpha = static_cast<GLenum>(c.modeAlpha); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->equation.IsValid(modeRGB)) { 146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glBlendEquationSeparate", modeRGB, "modeRGB"); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->equation.IsValid(modeAlpha)) { 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glBlendEquationSeparate", modeAlpha, "modeAlpha"); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state_.blend_equation_rgb != modeRGB || 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_equation_alpha != modeAlpha) { 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_equation_rgb = modeRGB; 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_equation_alpha = modeAlpha; 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glBlendEquationSeparate(modeRGB, modeAlpha); 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleBlendFunc(uint32_t immediate_data_size, 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::BlendFunc& c = 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::BlendFunc*>(cmd_data); 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum sfactor = static_cast<GLenum>(c.sfactor); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum dfactor = static_cast<GLenum>(c.dfactor); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->src_blend_factor.IsValid(sfactor)) { 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFunc", sfactor, "sfactor"); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->dst_blend_factor.IsValid(dfactor)) { 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFunc", dfactor, "dfactor"); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 179a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (state_.blend_source_rgb != sfactor || state_.blend_dest_rgb != dfactor || 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_source_alpha != sfactor || 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_dest_alpha != dfactor) { 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_source_rgb = sfactor; 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_dest_rgb = dfactor; 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_source_alpha = sfactor; 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_dest_alpha = dfactor; 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glBlendFunc(sfactor, dfactor); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleBlendFuncSeparate( 192010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::BlendFuncSeparate& c = 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::BlendFuncSeparate*>(cmd_data); 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum srcRGB = static_cast<GLenum>(c.srcRGB); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum dstRGB = static_cast<GLenum>(c.dstRGB); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum srcAlpha = static_cast<GLenum>(c.srcAlpha); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum dstAlpha = static_cast<GLenum>(c.dstAlpha); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->src_blend_factor.IsValid(srcRGB)) { 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFuncSeparate", srcRGB, "srcRGB"); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->dst_blend_factor.IsValid(dstRGB)) { 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFuncSeparate", dstRGB, "dstRGB"); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->src_blend_factor.IsValid(srcAlpha)) { 210a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 211a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glBlendFuncSeparate", srcAlpha, "srcAlpha"); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->dst_blend_factor.IsValid(dstAlpha)) { 215a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 216a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glBlendFuncSeparate", dstAlpha, "dstAlpha"); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (state_.blend_source_rgb != srcRGB || state_.blend_dest_rgb != dstRGB || 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_source_alpha != srcAlpha || 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_dest_alpha != dstAlpha) { 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_source_rgb = srcRGB; 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_dest_rgb = dstRGB; 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_source_alpha = srcAlpha; 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.blend_dest_alpha = dstAlpha; 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleBufferSubData(uint32_t immediate_data_size, 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::BufferSubData& c = 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::BufferSubData*>(cmd_data); 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLintptr offset = static_cast<GLintptr>(c.offset); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizeiptr size = static_cast<GLsizeiptr>(c.size); 239010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size = size; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const void* data = GetSharedMemoryAs<const void*>( 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.data_shm_id, c.data_shm_offset, data_size); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->buffer_target.IsValid(target)) { 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glBufferSubData", target, "target"); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (size < 0) { 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glBufferSubData", "size < 0"); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data == NULL) { 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBufferSubData(target, offset, size, data); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleCheckFramebufferStatus( 258010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::CheckFramebufferStatus& c = 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::CheckFramebufferStatus*>(cmd_data); 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::CheckFramebufferStatus::Result Result; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result_dst = GetSharedMemoryAs<Result*>( 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!result_dst) { 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->frame_buffer_target.IsValid(target)) { 271a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 272a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glCheckFramebufferStatus", target, "target"); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *result_dst = DoCheckFramebufferStatus(target); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 279010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleClear(uint32_t immediate_data_size, 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Clear& c = 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Clear*>(cmd_data); 2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error::Error error; 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error = WillAccessBoundFramebufferForDraw(); 2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (error != error::kNoError) 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return error; 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GLbitfield mask = static_cast<GLbitfield>(c.mask); 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoClear(mask); 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kNoError; 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleClearColor(uint32_t immediate_data_size, 2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::ClearColor& c = 2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::ClearColor*>(cmd_data); 2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf red = static_cast<GLclampf>(c.red); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf green = static_cast<GLclampf>(c.green); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf blue = static_cast<GLclampf>(c.blue); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf alpha = static_cast<GLclampf>(c.alpha); 302a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (state_.color_clear_red != red || state_.color_clear_green != green || 303a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state_.color_clear_blue != blue || state_.color_clear_alpha != alpha) { 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.color_clear_red = red; 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.color_clear_green = green; 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.color_clear_blue = blue; 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.color_clear_alpha = alpha; 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glClearColor(red, green, blue, alpha); 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleClearDepthf(uint32_t immediate_data_size, 3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::ClearDepthf& c = 3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::ClearDepthf*>(cmd_data); 3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf depth = static_cast<GLclampf>(c.depth); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state_.depth_clear != depth) { 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.depth_clear = depth; 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glClearDepth(depth); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleClearStencil(uint32_t immediate_data_size, 3271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 3281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::ClearStencil& c = 3291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::ClearStencil*>(cmd_data); 3301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint s = static_cast<GLint>(c.s); 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state_.stencil_clear != s) { 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_clear = s; 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glClearStencil(s); 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleColorMask(uint32_t immediate_data_size, 3401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 3411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::ColorMask& c = 3421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::ColorMask*>(cmd_data); 3431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLboolean red = static_cast<GLboolean>(c.red); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLboolean green = static_cast<GLboolean>(c.green); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLboolean blue = static_cast<GLboolean>(c.blue); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLboolean alpha = static_cast<GLboolean>(c.alpha); 348a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (state_.color_mask_red != red || state_.color_mask_green != green || 349a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state_.color_mask_blue != blue || state_.color_mask_alpha != alpha) { 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.color_mask_red = red; 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.color_mask_green = green; 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.color_mask_blue = blue; 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.color_mask_alpha = alpha; 3543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) framebuffer_state_.clear_state_dirty = true; 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleCompileShader(uint32_t immediate_data_size, 3601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 3611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::CompileShader& c = 3621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::CompileShader*>(cmd_data); 3631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint shader = c.shader; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoCompileShader(shader); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2D( 370010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::CompressedTexSubImage2D& c = 3731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::CompressedTexSubImage2D*>(cmd_data); 3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint level = static_cast<GLint>(c.level); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint xoffset = static_cast<GLint>(c.xoffset); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint yoffset = static_cast<GLint>(c.yoffset); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width = static_cast<GLsizei>(c.width); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei height = static_cast<GLsizei>(c.height); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum format = static_cast<GLenum>(c.format); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei imageSize = static_cast<GLsizei>(c.imageSize); 383010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size = imageSize; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const void* data = GetSharedMemoryAs<const void*>( 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.data_shm_id, c.data_shm_offset, data_size); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_target.IsValid(target)) { 387a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 388a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glCompressedTexSubImage2D", target, "target"); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (width < 0) { 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR( 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GL_INVALID_VALUE, "glCompressedTexSubImage2D", "width < 0"); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (height < 0) { 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR( 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GL_INVALID_VALUE, "glCompressedTexSubImage2D", "height < 0"); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->compressed_texture_format.IsValid(format)) { 402a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 403a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glCompressedTexSubImage2D", format, "format"); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (imageSize < 0) { 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR( 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GL_INVALID_VALUE, "glCompressedTexSubImage2D", "imageSize < 0"); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data == NULL) { 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoCompressedTexSubImage2D( 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target, level, xoffset, yoffset, width, height, format, imageSize, data); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleCopyTexImage2D( 420010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 4211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::CopyTexImage2D& c = 4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::CopyTexImage2D*>(cmd_data); 4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 4255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error::Error error; 4265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error = WillAccessBoundFramebufferForRead(); 4275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (error != error::kNoError) 4285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return error; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint level = static_cast<GLint>(c.level); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum internalformat = static_cast<GLenum>(c.internalformat); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint x = static_cast<GLint>(c.x); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint y = static_cast<GLint>(c.y); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width = static_cast<GLsizei>(c.width); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei height = static_cast<GLsizei>(c.height); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint border = static_cast<GLint>(c.border); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_target.IsValid(target)) { 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyTexImage2D", target, "target"); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_internal_format.IsValid(internalformat)) { 442a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 443a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glCopyTexImage2D", internalformat, "internalformat"); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (width < 0) { 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexImage2D", "width < 0"); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (height < 0) { 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexImage2D", "height < 0"); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoCopyTexImage2D(target, level, internalformat, x, y, width, height, border); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleCopyTexSubImage2D( 459010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 4601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 4611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::CopyTexSubImage2D& c = 4621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::CopyTexSubImage2D*>(cmd_data); 4631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 4645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error::Error error; 4655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error = WillAccessBoundFramebufferForRead(); 4665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (error != error::kNoError) 4675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return error; 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint level = static_cast<GLint>(c.level); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint xoffset = static_cast<GLint>(c.xoffset); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint yoffset = static_cast<GLint>(c.yoffset); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint x = static_cast<GLint>(c.x); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint y = static_cast<GLint>(c.y); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width = static_cast<GLsizei>(c.width); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei height = static_cast<GLsizei>(c.height); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_target.IsValid(target)) { 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyTexSubImage2D", target, "target"); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (width < 0) { 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexSubImage2D", "width < 0"); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (height < 0) { 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexSubImage2D", "height < 0"); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleCreateProgram(uint32_t immediate_data_size, 4931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 4941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::CreateProgram& c = 4951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::CreateProgram*>(cmd_data); 4961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 497010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t client_id = c.client_id; 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!CreateProgramHelper(client_id)) { 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleCreateShader(uint32_t immediate_data_size, 5051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 5061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::CreateShader& c = 5071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::CreateShader*>(cmd_data); 5081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum type = static_cast<GLenum>(c.type); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->shader_type.IsValid(type)) { 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glCreateShader", type, "type"); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 514010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t client_id = c.client_id; 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!CreateShaderHelper(type, client_id)) { 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 521010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleCullFace(uint32_t immediate_data_size, 5221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 5231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::CullFace& c = 5241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::CullFace*>(cmd_data); 5251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum mode = static_cast<GLenum>(c.mode); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->face_type.IsValid(mode)) { 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glCullFace", mode, "mode"); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state_.cull_mode != mode) { 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.cull_mode = mode; 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glCullFace(mode); 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleDeleteBuffersImmediate( 539010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 5401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 5411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::DeleteBuffersImmediate& c = 5421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::DeleteBuffersImmediate*>(cmd_data); 5431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei n = static_cast<GLsizei>(c.n); 545010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 549a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLuint* buffers = 550a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (buffers == NULL) { 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteBuffersHelper(n, buffers); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleDeleteFramebuffersImmediate( 559010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 5601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 5611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::DeleteFramebuffersImmediate& c = 5621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::DeleteFramebuffersImmediate*>(cmd_data); 5631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei n = static_cast<GLsizei>(c.n); 565010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 569a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLuint* framebuffers = 570a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (framebuffers == NULL) { 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteFramebuffersHelper(n, framebuffers); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleDeleteRenderbuffersImmediate( 579010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 5801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 5811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::DeleteRenderbuffersImmediate& c = 5821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::DeleteRenderbuffersImmediate*>(cmd_data); 5831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei n = static_cast<GLsizei>(c.n); 585010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 589a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLuint* renderbuffers = 590a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (renderbuffers == NULL) { 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteRenderbuffersHelper(n, renderbuffers); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleDeleteTexturesImmediate( 599010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 6001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 6011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::DeleteTexturesImmediate& c = 6021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::DeleteTexturesImmediate*>(cmd_data); 6031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei n = static_cast<GLsizei>(c.n); 605010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 609a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLuint* textures = 610a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (textures == NULL) { 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteTexturesHelper(n, textures); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleDepthFunc(uint32_t immediate_data_size, 6191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 6201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::DepthFunc& c = 6211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::DepthFunc*>(cmd_data); 6221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum func = static_cast<GLenum>(c.func); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->cmp_function.IsValid(func)) { 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glDepthFunc", func, "func"); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state_.depth_func != func) { 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.depth_func = func; 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glDepthFunc(func); 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleDepthMask(uint32_t immediate_data_size, 6361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 6371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::DepthMask& c = 6381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::DepthMask*>(cmd_data); 6391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLboolean flag = static_cast<GLboolean>(c.flag); 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state_.depth_mask != flag) { 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.depth_mask = flag; 6433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) framebuffer_state_.clear_state_dirty = true; 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleDepthRangef(uint32_t immediate_data_size, 6491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 6501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::DepthRangef& c = 6511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::DepthRangef*>(cmd_data); 6521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf zNear = static_cast<GLclampf>(c.zNear); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf zFar = static_cast<GLclampf>(c.zFar); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoDepthRangef(zNear, zFar); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleDetachShader(uint32_t immediate_data_size, 6601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 6611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::DetachShader& c = 6621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::DetachShader*>(cmd_data); 6631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint program = c.program; 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint shader = c.shader; 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoDetachShader(program, shader); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 670010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleDisable(uint32_t immediate_data_size, 6711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 6721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Disable& c = 6731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Disable*>(cmd_data); 6741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum cap = static_cast<GLenum>(c.cap); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->capability.IsValid(cap)) { 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glDisable", cap, "cap"); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoDisable(cap); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleDisableVertexAttribArray( 685010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 6861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 6871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::DisableVertexAttribArray& c = 6881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::DisableVertexAttribArray*>(cmd_data); 6891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint index = static_cast<GLuint>(c.index); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoDisableVertexAttribArray(index); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleEnable(uint32_t immediate_data_size, 6961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 6971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Enable& c = 6981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Enable*>(cmd_data); 6991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum cap = static_cast<GLenum>(c.cap); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->capability.IsValid(cap)) { 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glEnable", cap, "cap"); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoEnable(cap); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleEnableVertexAttribArray( 710010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 7111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 7121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::EnableVertexAttribArray& c = 7131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::EnableVertexAttribArray*>(cmd_data); 7141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint index = static_cast<GLuint>(c.index); 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoEnableVertexAttribArray(index); 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 720010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleFinish(uint32_t immediate_data_size, 7211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 7221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Finish& c = 7231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Finish*>(cmd_data); 7241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 7255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error::Error error; 7265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error = WillAccessBoundFramebufferForRead(); 7275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (error != error::kNoError) 7285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return error; 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoFinish(); 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 733010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleFlush(uint32_t immediate_data_size, 7341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 7351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Flush& c = 7361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Flush*>(cmd_data); 7371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoFlush(); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleFramebufferRenderbuffer( 743010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 7441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 7451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::FramebufferRenderbuffer& c = 7461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::FramebufferRenderbuffer*>(cmd_data); 7471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum attachment = static_cast<GLenum>(c.attachment); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum renderbuffertarget = static_cast<GLenum>(c.renderbuffertarget); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint renderbuffer = c.renderbuffer; 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->frame_buffer_target.IsValid(target)) { 753a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 754a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glFramebufferRenderbuffer", target, "target"); 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->attachment.IsValid(attachment)) { 758a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 759a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glFramebufferRenderbuffer", attachment, "attachment"); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->render_buffer_target.IsValid(renderbuffertarget)) { 763a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 764a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glFramebufferRenderbuffer", renderbuffertarget, "renderbuffertarget"); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoFramebufferRenderbuffer( 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target, attachment, renderbuffertarget, renderbuffer); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleFramebufferTexture2D( 773010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 7741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 7751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::FramebufferTexture2D& c = 7761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::FramebufferTexture2D*>(cmd_data); 7771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum attachment = static_cast<GLenum>(c.attachment); 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum textarget = static_cast<GLenum>(c.textarget); 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint texture = c.texture; 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint level = static_cast<GLint>(c.level); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->frame_buffer_target.IsValid(target)) { 784a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", target, "target"); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->attachment.IsValid(attachment)) { 788a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 789a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glFramebufferTexture2D", attachment, "attachment"); 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_target.IsValid(textarget)) { 793a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 794a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glFramebufferTexture2D", textarget, "textarget"); 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoFramebufferTexture2D(target, attachment, textarget, texture, level); 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleFrontFace(uint32_t immediate_data_size, 8021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 8031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::FrontFace& c = 8041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::FrontFace*>(cmd_data); 8051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum mode = static_cast<GLenum>(c.mode); 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->face_mode.IsValid(mode)) { 8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glFrontFace", mode, "mode"); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state_.front_face != mode) { 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.front_face = mode; 8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glFrontFace(mode); 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGenBuffersImmediate( 819010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 8201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 8211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GenBuffersImmediate& c = 8221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GenBuffersImmediate*>(cmd_data); 8231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei n = static_cast<GLsizei>(c.n); 825010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 829a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GLuint* buffers = 830a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (buffers == NULL) { 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!GenBuffersHelper(n, buffers)) { 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGenerateMipmap( 841010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 8421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 8431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GenerateMipmap& c = 8441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GenerateMipmap*>(cmd_data); 8451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_bind_target.IsValid(target)) { 8482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glGenerateMipmap", target, "target"); 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoGenerateMipmap(target); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGenFramebuffersImmediate( 856010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 8571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 8581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GenFramebuffersImmediate& c = 8591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GenFramebuffersImmediate*>(cmd_data); 8601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei n = static_cast<GLsizei>(c.n); 862010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 866a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GLuint* framebuffers = 867a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (framebuffers == NULL) { 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!GenFramebuffersHelper(n, framebuffers)) { 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGenRenderbuffersImmediate( 878010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 8791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 8801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GenRenderbuffersImmediate& c = 8811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GenRenderbuffersImmediate*>(cmd_data); 8821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei n = static_cast<GLsizei>(c.n); 884010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 888a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GLuint* renderbuffers = 889a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (renderbuffers == NULL) { 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!GenRenderbuffersHelper(n, renderbuffers)) { 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGenTexturesImmediate( 900010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 9011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 9021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GenTexturesImmediate& c = 9031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GenTexturesImmediate*>(cmd_data); 9041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei n = static_cast<GLsizei>(c.n); 906010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 910a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GLuint* textures = 911a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (textures == NULL) { 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!GenTexturesHelper(n, textures)) { 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleGetBooleanv(uint32_t immediate_data_size, 9221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 9231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GetBooleanv& c = 9241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GetBooleanv*>(cmd_data); 9251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::GetBooleanv::Result Result; 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_values = 0; 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNumValuesReturnedForGLGet(pname, &num_values); 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result = GetSharedMemoryAs<Result*>( 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLboolean* params = result ? result->GetData() : NULL; 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->g_l_state.IsValid(pname)) { 9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBooleanv", pname, "pname"); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params == NULL) { 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetBooleanv"); 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the client initialized the result. 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result->size != 0) { 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoGetBooleanv(pname, params); 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error = glGetError(); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error == GL_NO_ERROR) { 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->SetNumResults(num_values); 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(error, "GetBooleanv", ""); 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGetBufferParameteriv( 956010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 9571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 9581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GetBufferParameteriv& c = 9591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GetBufferParameteriv*>(cmd_data); 9601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 9632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::GetBufferParameteriv::Result Result; 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_values = 0; 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNumValuesReturnedForGLGet(pname, &num_values); 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result = GetSharedMemoryAs<Result*>( 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint* params = result ? result->GetData() : NULL; 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->buffer_target.IsValid(target)) { 970a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteriv", target, "target"); 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->buffer_parameter.IsValid(pname)) { 9742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteriv", pname, "pname"); 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params == NULL) { 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the client initialized the result. 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result->size != 0) { 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoGetBufferParameteriv(target, pname, params); 9852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result->SetNumResults(num_values); 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 988010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleGetError(uint32_t immediate_data_size, 9891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 9901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GetError& c = 9911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GetError*>(cmd_data); 9921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 9932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::GetError::Result Result; 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result_dst = GetSharedMemoryAs<Result*>( 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!result_dst) { 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 999c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *result_dst = GetErrorState()->GetGLError(); 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleGetFloatv(uint32_t immediate_data_size, 10041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 10051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GetFloatv& c = 10061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GetFloatv*>(cmd_data); 10071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::GetFloatv::Result Result; 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_values = 0; 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNumValuesReturnedForGLGet(pname, &num_values); 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result = GetSharedMemoryAs<Result*>( 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat* params = result ? result->GetData() : NULL; 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->g_l_state.IsValid(pname)) { 10162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetFloatv", pname, "pname"); 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params == NULL) { 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetFloatv"); 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the client initialized the result. 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result->size != 0) { 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoGetFloatv(pname, params); 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error = glGetError(); 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error == GL_NO_ERROR) { 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->SetNumResults(num_values); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 10322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(error, "GetFloatv", ""); 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGetFramebufferAttachmentParameteriv( 1038010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 10391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 10401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GetFramebufferAttachmentParameteriv& c = 10411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GetFramebufferAttachmentParameteriv*>( 10421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cmd_data); 10431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum attachment = static_cast<GLenum>(c.attachment); 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 10472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::GetFramebufferAttachmentParameteriv::Result Result; 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_values = 0; 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNumValuesReturnedForGLGet(pname, &num_values); 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result = GetSharedMemoryAs<Result*>( 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint* params = result ? result->GetData() : NULL; 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->frame_buffer_target.IsValid(target)) { 1054a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 1055a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glGetFramebufferAttachmentParameteriv", target, "target"); 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->attachment.IsValid(attachment)) { 1059a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 1060a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glGetFramebufferAttachmentParameteriv", attachment, "attachment"); 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->frame_buffer_parameter.IsValid(pname)) { 1064a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 1065a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glGetFramebufferAttachmentParameteriv", pname, "pname"); 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params == NULL) { 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetFramebufferAttachmentParameteriv"); 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the client initialized the result. 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result->size != 0) { 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoGetFramebufferAttachmentParameteriv(target, attachment, pname, params); 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error = glGetError(); 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error == GL_NO_ERROR) { 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->SetNumResults(num_values); 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 10812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(error, "GetFramebufferAttachmentParameteriv", ""); 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleGetIntegerv(uint32_t immediate_data_size, 10871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 10881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GetIntegerv& c = 10891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GetIntegerv*>(cmd_data); 10901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::GetIntegerv::Result Result; 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_values = 0; 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNumValuesReturnedForGLGet(pname, &num_values); 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result = GetSharedMemoryAs<Result*>( 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint* params = result ? result->GetData() : NULL; 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->g_l_state.IsValid(pname)) { 10992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetIntegerv", pname, "pname"); 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params == NULL) { 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetIntegerv"); 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the client initialized the result. 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result->size != 0) { 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoGetIntegerv(pname, params); 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error = glGetError(); 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error == GL_NO_ERROR) { 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->SetNumResults(num_values); 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(error, "GetIntegerv", ""); 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleGetProgramiv(uint32_t immediate_data_size, 11211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 11221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GetProgramiv& c = 11231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GetProgramiv*>(cmd_data); 11241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint program = c.program; 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 11272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::GetProgramiv::Result Result; 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_values = 0; 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNumValuesReturnedForGLGet(pname, &num_values); 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result = GetSharedMemoryAs<Result*>( 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint* params = result ? result->GetData() : NULL; 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->program_parameter.IsValid(pname)) { 11342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetProgramiv", pname, "pname"); 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params == NULL) { 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetProgramiv"); 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the client initialized the result. 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result->size != 0) { 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoGetProgramiv(program, pname, params); 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error = glGetError(); 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error == GL_NO_ERROR) { 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->SetNumResults(num_values); 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 11502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(error, "GetProgramiv", ""); 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGetRenderbufferParameteriv( 1156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 11571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 11581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GetRenderbufferParameteriv& c = 11591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GetRenderbufferParameteriv*>(cmd_data); 11601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 11632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::GetRenderbufferParameteriv::Result Result; 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_values = 0; 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNumValuesReturnedForGLGet(pname, &num_values); 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result = GetSharedMemoryAs<Result*>( 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint* params = result ? result->GetData() : NULL; 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->render_buffer_target.IsValid(target)) { 1170a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 1171a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glGetRenderbufferParameteriv", target, "target"); 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->render_buffer_parameter.IsValid(pname)) { 1175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 1176a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glGetRenderbufferParameteriv", pname, "pname"); 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params == NULL) { 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetRenderbufferParameteriv"); 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the client initialized the result. 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result->size != 0) { 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoGetRenderbufferParameteriv(target, pname, params); 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error = glGetError(); 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error == GL_NO_ERROR) { 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->SetNumResults(num_values); 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 11922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(error, "GetRenderbufferParameteriv", ""); 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleGetShaderiv(uint32_t immediate_data_size, 11981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 11991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GetShaderiv& c = 12001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GetShaderiv*>(cmd_data); 12011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint shader = c.shader; 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 12042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::GetShaderiv::Result Result; 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_values = 0; 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNumValuesReturnedForGLGet(pname, &num_values); 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result = GetSharedMemoryAs<Result*>( 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint* params = result ? result->GetData() : NULL; 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->shader_parameter.IsValid(pname)) { 12112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetShaderiv", pname, "pname"); 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params == NULL) { 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetShaderiv"); 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the client initialized the result. 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result->size != 0) { 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoGetShaderiv(shader, pname, params); 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error = glGetError(); 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error == GL_NO_ERROR) { 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->SetNumResults(num_values); 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 12272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(error, "GetShaderiv", ""); 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGetTexParameterfv( 1233010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 12341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 12351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GetTexParameterfv& c = 12361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GetTexParameterfv*>(cmd_data); 12371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 12402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::GetTexParameterfv::Result Result; 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_values = 0; 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNumValuesReturnedForGLGet(pname, &num_values); 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result = GetSharedMemoryAs<Result*>( 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat* params = result ? result->GetData() : NULL; 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->get_tex_param_target.IsValid(target)) { 12472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetTexParameterfv", target, "target"); 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_parameter.IsValid(pname)) { 12512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetTexParameterfv", pname, "pname"); 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params == NULL) { 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetTexParameterfv"); 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the client initialized the result. 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result->size != 0) { 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1262a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoGetTexParameterfv(target, pname, params); 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error = glGetError(); 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error == GL_NO_ERROR) { 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->SetNumResults(num_values); 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 12672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(error, "GetTexParameterfv", ""); 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGetTexParameteriv( 1273010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 12741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 12751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GetTexParameteriv& c = 12761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GetTexParameteriv*>(cmd_data); 12771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 12802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::GetTexParameteriv::Result Result; 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_values = 0; 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNumValuesReturnedForGLGet(pname, &num_values); 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result = GetSharedMemoryAs<Result*>( 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint* params = result ? result->GetData() : NULL; 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->get_tex_param_target.IsValid(target)) { 12872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetTexParameteriv", target, "target"); 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_parameter.IsValid(pname)) { 12912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetTexParameteriv", pname, "pname"); 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params == NULL) { 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetTexParameteriv"); 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the client initialized the result. 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result->size != 0) { 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1302a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoGetTexParameteriv(target, pname, params); 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error = glGetError(); 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error == GL_NO_ERROR) { 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->SetNumResults(num_values); 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 13072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(error, "GetTexParameteriv", ""); 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGetVertexAttribfv( 1313010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 13141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 13151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GetVertexAttribfv& c = 13161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GetVertexAttribfv*>(cmd_data); 13171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint index = static_cast<GLuint>(c.index); 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 13202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::GetVertexAttribfv::Result Result; 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_values = 0; 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNumValuesReturnedForGLGet(pname, &num_values); 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result = GetSharedMemoryAs<Result*>( 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat* params = result ? result->GetData() : NULL; 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->vertex_attribute.IsValid(pname)) { 13272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribfv", pname, "pname"); 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params == NULL) { 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetVertexAttribfv"); 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the client initialized the result. 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result->size != 0) { 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoGetVertexAttribfv(index, pname, params); 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error = glGetError(); 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error == GL_NO_ERROR) { 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->SetNumResults(num_values); 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 13432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(error, "GetVertexAttribfv", ""); 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGetVertexAttribiv( 1349010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 13501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 13511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GetVertexAttribiv& c = 13521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GetVertexAttribiv*>(cmd_data); 13531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint index = static_cast<GLuint>(c.index); 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 13562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::GetVertexAttribiv::Result Result; 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_values = 0; 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNumValuesReturnedForGLGet(pname, &num_values); 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result = GetSharedMemoryAs<Result*>( 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint* params = result ? result->GetData() : NULL; 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->vertex_attribute.IsValid(pname)) { 13632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribiv", pname, "pname"); 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params == NULL) { 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetVertexAttribiv"); 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the client initialized the result. 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result->size != 0) { 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoGetVertexAttribiv(index, pname, params); 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error = glGetError(); 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error == GL_NO_ERROR) { 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->SetNumResults(num_values); 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 13792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(error, "GetVertexAttribiv", ""); 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1384010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleHint(uint32_t immediate_data_size, 13851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 13861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Hint& c = *static_cast<const gles2::cmds::Hint*>(cmd_data); 13871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum mode = static_cast<GLenum>(c.mode); 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->hint_target.IsValid(target)) { 13912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glHint", target, "target"); 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->hint_mode.IsValid(mode)) { 13952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glHint", mode, "mode"); 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1398868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) switch (target) { 1399868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case GL_GENERATE_MIPMAP_HINT: 1400868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (state_.hint_generate_mipmap != mode) { 1401868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) state_.hint_generate_mipmap = mode; 1402868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) glHint(target, mode); 1403868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 1404868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 1405868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES: 1406868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (state_.hint_fragment_shader_derivative != mode) { 1407868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) state_.hint_fragment_shader_derivative = mode; 1408868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) glHint(target, mode); 1409868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 1410868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 1411868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) default: 1412868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NOTREACHED(); 1413868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1417010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleIsBuffer(uint32_t immediate_data_size, 14181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 14191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::IsBuffer& c = 14201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::IsBuffer*>(cmd_data); 14211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint buffer = c.buffer; 14232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::IsBuffer::Result Result; 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result_dst = GetSharedMemoryAs<Result*>( 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!result_dst) { 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *result_dst = DoIsBuffer(buffer); 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleIsEnabled(uint32_t immediate_data_size, 14341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 14351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::IsEnabled& c = 14361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::IsEnabled*>(cmd_data); 14371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum cap = static_cast<GLenum>(c.cap); 14392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::IsEnabled::Result Result; 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result_dst = GetSharedMemoryAs<Result*>( 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!result_dst) { 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->capability.IsValid(cap)) { 14462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glIsEnabled", cap, "cap"); 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *result_dst = DoIsEnabled(cap); 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleIsFramebuffer(uint32_t immediate_data_size, 14541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 14551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::IsFramebuffer& c = 14561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::IsFramebuffer*>(cmd_data); 14571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint framebuffer = c.framebuffer; 14592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::IsFramebuffer::Result Result; 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result_dst = GetSharedMemoryAs<Result*>( 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!result_dst) { 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *result_dst = DoIsFramebuffer(framebuffer); 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleIsProgram(uint32_t immediate_data_size, 14701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 14711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::IsProgram& c = 14721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::IsProgram*>(cmd_data); 14731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint program = c.program; 14752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::IsProgram::Result Result; 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result_dst = GetSharedMemoryAs<Result*>( 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!result_dst) { 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *result_dst = DoIsProgram(program); 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleIsRenderbuffer( 1486010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 14871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 14881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::IsRenderbuffer& c = 14891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::IsRenderbuffer*>(cmd_data); 14901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint renderbuffer = c.renderbuffer; 14922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::IsRenderbuffer::Result Result; 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result_dst = GetSharedMemoryAs<Result*>( 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!result_dst) { 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *result_dst = DoIsRenderbuffer(renderbuffer); 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1502010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleIsShader(uint32_t immediate_data_size, 15031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 15041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::IsShader& c = 15051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::IsShader*>(cmd_data); 15061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint shader = c.shader; 15082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::IsShader::Result Result; 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result_dst = GetSharedMemoryAs<Result*>( 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!result_dst) { 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *result_dst = DoIsShader(shader); 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleIsTexture(uint32_t immediate_data_size, 15191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 15201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::IsTexture& c = 15211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::IsTexture*>(cmd_data); 15221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint texture = c.texture; 15242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::IsTexture::Result Result; 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result_dst = GetSharedMemoryAs<Result*>( 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!result_dst) { 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *result_dst = DoIsTexture(texture); 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleLineWidth(uint32_t immediate_data_size, 15351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 15361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::LineWidth& c = 15371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::LineWidth*>(cmd_data); 15381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat width = static_cast<GLfloat>(c.width); 15406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (width <= 0.0f || base::IsNaN(width)) { 15412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "LineWidth", "width out of range"); 15422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kNoError; 15432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state_.line_width != width) { 15452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.line_width = width; 15462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glLineWidth(width); 15472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleLinkProgram(uint32_t immediate_data_size, 15521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 15531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::LinkProgram& c = 15541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::LinkProgram*>(cmd_data); 15551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint program = c.program; 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoLinkProgram(program); 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandlePolygonOffset(uint32_t immediate_data_size, 15621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 15631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::PolygonOffset& c = 15641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::PolygonOffset*>(cmd_data); 15651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat factor = static_cast<GLfloat>(c.factor); 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat units = static_cast<GLfloat>(c.units); 15682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state_.polygon_offset_factor != factor || 15692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.polygon_offset_units != units) { 15702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.polygon_offset_factor = factor; 15712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.polygon_offset_units = units; 15722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glPolygonOffset(factor, units); 15732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleReleaseShaderCompiler( 1578010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 15791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 15801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::ReleaseShaderCompiler& c = 15811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::ReleaseShaderCompiler*>(cmd_data); 15821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoReleaseShaderCompiler(); 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleRenderbufferStorage( 1588010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 15891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 15901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::RenderbufferStorage& c = 15911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::RenderbufferStorage*>(cmd_data); 15921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum internalformat = static_cast<GLenum>(c.internalformat); 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width = static_cast<GLsizei>(c.width); 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei height = static_cast<GLsizei>(c.height); 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->render_buffer_target.IsValid(target)) { 15982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorage", target, "target"); 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->render_buffer_format.IsValid(internalformat)) { 1602a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 1603a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glRenderbufferStorage", internalformat, "internalformat"); 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (width < 0) { 16072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glRenderbufferStorage", "width < 0"); 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (height < 0) { 1611a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glRenderbufferStorage", "height < 0"); 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoRenderbufferStorage(target, internalformat, width, height); 16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleSampleCoverage( 1619010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 16201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 16211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::SampleCoverage& c = 16221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::SampleCoverage*>(cmd_data); 16231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf value = static_cast<GLclampf>(c.value); 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLboolean invert = static_cast<GLboolean>(c.invert); 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoSampleCoverage(value, invert); 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1630010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleScissor(uint32_t immediate_data_size, 16311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 16321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Scissor& c = 16331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Scissor*>(cmd_data); 16341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint x = static_cast<GLint>(c.x); 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint y = static_cast<GLint>(c.y); 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width = static_cast<GLsizei>(c.width); 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei height = static_cast<GLsizei>(c.height); 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (width < 0) { 16402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScissor", "width < 0"); 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (height < 0) { 16442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScissor", "height < 0"); 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1647a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (state_.scissor_x != x || state_.scissor_y != y || 1648a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state_.scissor_width != width || state_.scissor_height != height) { 16492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.scissor_x = x; 16502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.scissor_y = y; 16512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.scissor_width = width; 16522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.scissor_height = height; 16532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glScissor(x, y, width, height); 16542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleStencilFunc(uint32_t immediate_data_size, 16591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 16601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::StencilFunc& c = 16611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::StencilFunc*>(cmd_data); 16621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum func = static_cast<GLenum>(c.func); 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint ref = static_cast<GLint>(c.ref); 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint mask = static_cast<GLuint>(c.mask); 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->cmp_function.IsValid(func)) { 16672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFunc", func, "func"); 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1670a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (state_.stencil_front_func != func || state_.stencil_front_ref != ref || 1671a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state_.stencil_front_mask != mask || state_.stencil_back_func != func || 1672a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state_.stencil_back_ref != ref || state_.stencil_back_mask != mask) { 16732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_func = func; 16742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_ref = ref; 16752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_mask = mask; 16762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_func = func; 16772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_ref = ref; 16782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_mask = mask; 16792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glStencilFunc(func, ref, mask); 16802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleStencilFuncSeparate( 1685010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 16861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 16871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::StencilFuncSeparate& c = 16881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::StencilFuncSeparate*>(cmd_data); 16891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum face = static_cast<GLenum>(c.face); 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum func = static_cast<GLenum>(c.func); 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint ref = static_cast<GLint>(c.ref); 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint mask = static_cast<GLuint>(c.mask); 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->face_type.IsValid(face)) { 16952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFuncSeparate", face, "face"); 16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->cmp_function.IsValid(func)) { 16992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFuncSeparate", func, "func"); 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool changed = false; 17032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { 17042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) changed |= state_.stencil_front_func != func || 1705a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state_.stencil_front_ref != ref || 1706a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state_.stencil_front_mask != mask; 17072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 17082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (face == GL_BACK || face == GL_FRONT_AND_BACK) { 17092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) changed |= state_.stencil_back_func != func || 1710a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state_.stencil_back_ref != ref || 1711a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state_.stencil_back_mask != mask; 17122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 17132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (changed) { 17142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { 17152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_func = func; 17162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_ref = ref; 17172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_mask = mask; 17182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 17192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (face == GL_BACK || face == GL_FRONT_AND_BACK) { 17202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_func = func; 17212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_ref = ref; 17222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_mask = mask; 17232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 17242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glStencilFuncSeparate(face, func, ref, mask); 17252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleStencilMask(uint32_t immediate_data_size, 17301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 17311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::StencilMask& c = 17321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::StencilMask*>(cmd_data); 17331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint mask = static_cast<GLuint>(c.mask); 17352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state_.stencil_front_writemask != mask || 17362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_writemask != mask) { 17372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_writemask = mask; 17382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_writemask = mask; 17393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) framebuffer_state_.clear_state_dirty = true; 17402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleStencilMaskSeparate( 1745010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 17461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 17471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::StencilMaskSeparate& c = 17481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::StencilMaskSeparate*>(cmd_data); 17491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum face = static_cast<GLenum>(c.face); 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint mask = static_cast<GLuint>(c.mask); 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->face_type.IsValid(face)) { 17532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilMaskSeparate", face, "face"); 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool changed = false; 17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { 17582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) changed |= state_.stencil_front_writemask != mask; 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (face == GL_BACK || face == GL_FRONT_AND_BACK) { 17612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) changed |= state_.stencil_back_writemask != mask; 17622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 17632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (changed) { 17642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { 17652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_writemask = mask; 17662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 17672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (face == GL_BACK || face == GL_FRONT_AND_BACK) { 17682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_writemask = mask; 17692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 17703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) framebuffer_state_.clear_state_dirty = true; 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleStencilOp(uint32_t immediate_data_size, 17761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 17771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::StencilOp& c = 17781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::StencilOp*>(cmd_data); 17791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum fail = static_cast<GLenum>(c.fail); 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum zfail = static_cast<GLenum>(c.zfail); 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum zpass = static_cast<GLenum>(c.zpass); 17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->stencil_op.IsValid(fail)) { 17842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOp", fail, "fail"); 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->stencil_op.IsValid(zfail)) { 17882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOp", zfail, "zfail"); 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->stencil_op.IsValid(zpass)) { 17922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOp", zpass, "zpass"); 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state_.stencil_front_fail_op != fail || 17962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_z_fail_op != zfail || 17972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_z_pass_op != zpass || 17982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_fail_op != fail || 17992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_z_fail_op != zfail || 18002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_z_pass_op != zpass) { 18012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_fail_op = fail; 18022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_z_fail_op = zfail; 18032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_z_pass_op = zpass; 18042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_fail_op = fail; 18052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_z_fail_op = zfail; 18062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_z_pass_op = zpass; 18072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glStencilOp(fail, zfail, zpass); 18082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleStencilOpSeparate( 1813010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 18141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 18151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::StencilOpSeparate& c = 18161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::StencilOpSeparate*>(cmd_data); 18171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum face = static_cast<GLenum>(c.face); 18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum fail = static_cast<GLenum>(c.fail); 18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum zfail = static_cast<GLenum>(c.zfail); 18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum zpass = static_cast<GLenum>(c.zpass); 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->face_type.IsValid(face)) { 18232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOpSeparate", face, "face"); 18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->stencil_op.IsValid(fail)) { 18272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOpSeparate", fail, "fail"); 18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->stencil_op.IsValid(zfail)) { 18312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOpSeparate", zfail, "zfail"); 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->stencil_op.IsValid(zpass)) { 18352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOpSeparate", zpass, "zpass"); 18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool changed = false; 18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { 18402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) changed |= state_.stencil_front_fail_op != fail || 1841a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state_.stencil_front_z_fail_op != zfail || 1842a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state_.stencil_front_z_pass_op != zpass; 18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (face == GL_BACK || face == GL_FRONT_AND_BACK) { 18452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) changed |= state_.stencil_back_fail_op != fail || 1846a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state_.stencil_back_z_fail_op != zfail || 1847a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state_.stencil_back_z_pass_op != zpass; 18482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (changed) { 18502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { 18512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_fail_op = fail; 18522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_z_fail_op = zfail; 18532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_front_z_pass_op = zpass; 18542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (face == GL_BACK || face == GL_FRONT_AND_BACK) { 18562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_fail_op = fail; 18572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_z_fail_op = zfail; 18582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_.stencil_back_z_pass_op = zpass; 18592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) glStencilOpSeparate(face, fail, zfail, zpass); 18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleTexParameterf(uint32_t immediate_data_size, 18661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 18671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::TexParameterf& c = 18681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::TexParameterf*>(cmd_data); 18691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat param = static_cast<GLfloat>(c.param); 18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_bind_target.IsValid(target)) { 18742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterf", target, "target"); 18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_parameter.IsValid(pname)) { 18782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterf", pname, "pname"); 18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoTexParameterf(target, pname, param); 18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleTexParameterfvImmediate( 1886010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 18871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 18881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::TexParameterfvImmediate& c = 18891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::TexParameterfvImmediate*>(cmd_data); 18901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 1893010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) { 18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1900a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLfloat* params = 1901a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_bind_target.IsValid(target)) { 19032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterfv", target, "target"); 19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_parameter.IsValid(pname)) { 19072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterfv", pname, "pname"); 19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params == NULL) { 19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoTexParameterfv(target, pname, params); 19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleTexParameteri(uint32_t immediate_data_size, 19181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 19191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::TexParameteri& c = 19201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::TexParameteri*>(cmd_data); 19211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint param = static_cast<GLint>(c.param); 19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_bind_target.IsValid(target)) { 19262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteri", target, "target"); 19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_parameter.IsValid(pname)) { 19302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteri", pname, "pname"); 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoTexParameteri(target, pname, param); 19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleTexParameterivImmediate( 1938010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 19391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 19401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::TexParameterivImmediate& c = 19411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::TexParameterivImmediate*>(cmd_data); 19421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum pname = static_cast<GLenum>(c.pname); 1945010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(1, sizeof(GLint), 1, &data_size)) { 19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1952a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLint* params = 1953a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); 19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_bind_target.IsValid(target)) { 19552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteriv", target, "target"); 19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_parameter.IsValid(pname)) { 19592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteriv", pname, "pname"); 19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params == NULL) { 19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoTexParameteriv(target, pname, params); 19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleUniform1f(uint32_t immediate_data_size, 19701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 19711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform1f& c = 19721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform1f*>(cmd_data); 19731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat x = static_cast<GLfloat>(c.x); 19765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GLfloat temp[1] = { 19775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu x, 19785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }; 19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform1fv(location, 1, &temp[0]); 19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleUniform1fvImmediate( 1984010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 19851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 19861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform1fvImmediate& c = 19871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform1fvImmediate*>(cmd_data); 19881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 19905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei count = static_cast<GLsizei>(c.count); 1991010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 19925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(count, sizeof(GLfloat), 1, &data_size)) { 19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 19945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1998a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLfloat* v = 1999a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (v == NULL) { 20015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform1fv(location, count, v); 20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleUniform1i(uint32_t immediate_data_size, 20081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 20091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform1i& c = 20101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform1i*>(cmd_data); 20111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 20135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint x = static_cast<GLint>(c.x); 20145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform1i(location, x); 20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleUniform1ivImmediate( 2019010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 20201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 20211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform1ivImmediate& c = 20221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform1ivImmediate*>(cmd_data); 20231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 20245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 20255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei count = static_cast<GLsizei>(c.count); 2026010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 20275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(count, sizeof(GLint), 1, &data_size)) { 20285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 20295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2033a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLint* v = 2034a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); 20355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (v == NULL) { 20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform1iv(location, count, v); 20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 20405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleUniform2f(uint32_t immediate_data_size, 20431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 20441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform2f& c = 20451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform2f*>(cmd_data); 20461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat x = static_cast<GLfloat>(c.x); 20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat y = static_cast<GLfloat>(c.y); 20505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GLfloat temp[2] = { 20515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu x, y, 20525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }; 20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform2fv(location, 1, &temp[0]); 20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleUniform2fvImmediate( 2058010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 20591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 20601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform2fvImmediate& c = 20611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform2fvImmediate*>(cmd_data); 20621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei count = static_cast<GLsizei>(c.count); 2065010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 20665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(count, sizeof(GLfloat), 2, &data_size)) { 20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 20715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2072a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLfloat* v = 2073a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 20745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (v == NULL) { 20755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 20765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform2fv(location, count, v); 20785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 20795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleUniform2i(uint32_t immediate_data_size, 20821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 20831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform2i& c = 20841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform2i*>(cmd_data); 20851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 20865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 20875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint x = static_cast<GLint>(c.x); 20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint y = static_cast<GLint>(c.y); 20895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GLint temp[2] = { 20905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu x, y, 20915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }; 20925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform2iv(location, 1, &temp[0]); 20935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 20945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleUniform2ivImmediate( 2097010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 20981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 20991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform2ivImmediate& c = 21001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform2ivImmediate*>(cmd_data); 21011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 21025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 21035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei count = static_cast<GLsizei>(c.count); 2104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 21055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(count, sizeof(GLint), 2, &data_size)) { 21065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 21075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 21095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 21105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLint* v = 2112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); 21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (v == NULL) { 21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 21155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform2iv(location, count, v); 21175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 21185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleUniform3f(uint32_t immediate_data_size, 21211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 21221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform3f& c = 21231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform3f*>(cmd_data); 21241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 21255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 21265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat x = static_cast<GLfloat>(c.x); 21275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat y = static_cast<GLfloat>(c.y); 21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat z = static_cast<GLfloat>(c.z); 21295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GLfloat temp[3] = { 21305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu x, y, z, 21315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }; 21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform3fv(location, 1, &temp[0]); 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleUniform3fvImmediate( 2137010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 21381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 21391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform3fvImmediate& c = 21401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform3fvImmediate*>(cmd_data); 21411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei count = static_cast<GLsizei>(c.count); 2144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(count, sizeof(GLfloat), 3, &data_size)) { 21465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 21495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 21505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLfloat* v = 2152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 21535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (v == NULL) { 21545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 21555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform3fv(location, count, v); 21575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 21585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleUniform3i(uint32_t immediate_data_size, 21611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 21621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform3i& c = 21631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform3i*>(cmd_data); 21641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 21655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 21665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint x = static_cast<GLint>(c.x); 21675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint y = static_cast<GLint>(c.y); 21685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint z = static_cast<GLint>(c.z); 21695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GLint temp[3] = { 21705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu x, y, z, 21715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }; 21725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform3iv(location, 1, &temp[0]); 21735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 21745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleUniform3ivImmediate( 2177010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 21781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 21791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform3ivImmediate& c = 21801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform3ivImmediate*>(cmd_data); 21811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 21825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 21835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei count = static_cast<GLsizei>(c.count); 2184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 21855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(count, sizeof(GLint), 3, &data_size)) { 21865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 21875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 21895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 21905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2191a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLint* v = 2192a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); 21935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (v == NULL) { 21945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform3iv(location, count, v); 21975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 21985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleUniform4f(uint32_t immediate_data_size, 22011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 22021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform4f& c = 22031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform4f*>(cmd_data); 22041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 22055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 22065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat x = static_cast<GLfloat>(c.x); 22075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat y = static_cast<GLfloat>(c.y); 22085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat z = static_cast<GLfloat>(c.z); 22095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat w = static_cast<GLfloat>(c.w); 22105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GLfloat temp[4] = { 22115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu x, y, z, w, 22125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }; 22135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform4fv(location, 1, &temp[0]); 22145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 22155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleUniform4fvImmediate( 2218010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 22191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 22201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform4fvImmediate& c = 22211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform4fvImmediate*>(cmd_data); 22221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 22235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 22245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei count = static_cast<GLsizei>(c.count); 2225010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 22265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(count, sizeof(GLfloat), 4, &data_size)) { 22275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 22285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 22305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 22315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2232a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLfloat* v = 2233a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 22345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (v == NULL) { 22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 22365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform4fv(location, count, v); 22385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleUniform4i(uint32_t immediate_data_size, 22421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 22431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform4i& c = 22441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform4i*>(cmd_data); 22451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 22465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 22475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint x = static_cast<GLint>(c.x); 22485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint y = static_cast<GLint>(c.y); 22495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint z = static_cast<GLint>(c.z); 22505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint w = static_cast<GLint>(c.w); 22515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GLint temp[4] = { 22525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu x, y, z, w, 22535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }; 22545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform4iv(location, 1, &temp[0]); 22555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 22565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleUniform4ivImmediate( 2259010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 22601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 22611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Uniform4ivImmediate& c = 22621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Uniform4ivImmediate*>(cmd_data); 22631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 22645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 22655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei count = static_cast<GLsizei>(c.count); 2266010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 22675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(count, sizeof(GLint), 4, &data_size)) { 22685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 22715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 22725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2273a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLint* v = 2274a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); 22755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (v == NULL) { 22765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 22775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniform4iv(location, count, v); 22795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 22805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleUniformMatrix2fvImmediate( 2283010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 22841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 22851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::UniformMatrix2fvImmediate& c = 22861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::UniformMatrix2fvImmediate*>(cmd_data); 22871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 22885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 22895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei count = static_cast<GLsizei>(c.count); 22905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLboolean transpose = static_cast<GLboolean>(c.transpose); 2291010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 22925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(count, sizeof(GLfloat), 4, &data_size)) { 22935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 22945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 22965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 22975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2298a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLfloat* value = 2299a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 23005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value == NULL) { 23015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 23025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniformMatrix2fv(location, count, transpose, value); 23045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 23055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleUniformMatrix3fvImmediate( 2308010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 23091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 23101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::UniformMatrix3fvImmediate& c = 23111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::UniformMatrix3fvImmediate*>(cmd_data); 23121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 23135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 23145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei count = static_cast<GLsizei>(c.count); 23155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLboolean transpose = static_cast<GLboolean>(c.transpose); 2316010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 23175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(count, sizeof(GLfloat), 9, &data_size)) { 23185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 23195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 23215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 23225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2323a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLfloat* value = 2324a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 23255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value == NULL) { 23265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 23275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniformMatrix3fv(location, count, transpose, value); 23295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 23305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleUniformMatrix4fvImmediate( 2333010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 23341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 23351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::UniformMatrix4fvImmediate& c = 23361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::UniformMatrix4fvImmediate*>(cmd_data); 23371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 23385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint location = static_cast<GLint>(c.location); 23395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei count = static_cast<GLsizei>(c.count); 23405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLboolean transpose = static_cast<GLboolean>(c.transpose); 2341010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 23425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(count, sizeof(GLfloat), 16, &data_size)) { 23435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 23445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 23465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 23475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2348a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLfloat* value = 2349a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 23505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value == NULL) { 23515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 23525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUniformMatrix4fv(location, count, transpose, value); 23545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 23555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleUseProgram(uint32_t immediate_data_size, 23581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 23591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::UseProgram& c = 23601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::UseProgram*>(cmd_data); 23611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 23625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint program = c.program; 23635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoUseProgram(program); 23645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 23655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleValidateProgram( 2368010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 23691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 23701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::ValidateProgram& c = 23711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::ValidateProgram*>(cmd_data); 23721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 23735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint program = c.program; 23745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoValidateProgram(program); 23755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 23765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleVertexAttrib1f( 2379010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 23801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 23811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::VertexAttrib1f& c = 23821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::VertexAttrib1f*>(cmd_data); 23831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 23845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint indx = static_cast<GLuint>(c.indx); 23855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat x = static_cast<GLfloat>(c.x); 23865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoVertexAttrib1f(indx, x); 23875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 23885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleVertexAttrib1fvImmediate( 2391010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 23921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 23931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::VertexAttrib1fvImmediate& c = 23941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::VertexAttrib1fvImmediate*>(cmd_data); 23951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 23965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint indx = static_cast<GLuint>(c.indx); 2397010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 23985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) { 23995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 24005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 24025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 24035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLfloat* values = 2405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 24065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (values == NULL) { 24075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 24085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoVertexAttrib1fv(indx, values); 24105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 24115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleVertexAttrib2f( 2414010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 24151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 24161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::VertexAttrib2f& c = 24171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::VertexAttrib2f*>(cmd_data); 24181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 24195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint indx = static_cast<GLuint>(c.indx); 24205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat x = static_cast<GLfloat>(c.x); 24215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat y = static_cast<GLfloat>(c.y); 24225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoVertexAttrib2f(indx, x, y); 24235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 24245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleVertexAttrib2fvImmediate( 2427010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 24281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 24291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::VertexAttrib2fvImmediate& c = 24301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::VertexAttrib2fvImmediate*>(cmd_data); 24311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 24325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint indx = static_cast<GLuint>(c.indx); 2433010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 24345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(1, sizeof(GLfloat), 2, &data_size)) { 24355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 24365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 24385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 24395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2440a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLfloat* values = 2441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 24425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (values == NULL) { 24435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 24445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoVertexAttrib2fv(indx, values); 24465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 24475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleVertexAttrib3f( 2450010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 24511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 24521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::VertexAttrib3f& c = 24531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::VertexAttrib3f*>(cmd_data); 24541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 24555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint indx = static_cast<GLuint>(c.indx); 24565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat x = static_cast<GLfloat>(c.x); 24575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat y = static_cast<GLfloat>(c.y); 24585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat z = static_cast<GLfloat>(c.z); 24595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoVertexAttrib3f(indx, x, y, z); 24605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 24615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleVertexAttrib3fvImmediate( 2464010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 24651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 24661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::VertexAttrib3fvImmediate& c = 24671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::VertexAttrib3fvImmediate*>(cmd_data); 24681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 24695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint indx = static_cast<GLuint>(c.indx); 2470010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 24715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(1, sizeof(GLfloat), 3, &data_size)) { 24725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 24735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 24755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 24765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2477a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLfloat* values = 2478a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 24795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (values == NULL) { 24805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 24815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoVertexAttrib3fv(indx, values); 24835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 24845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleVertexAttrib4f( 2487010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 24881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 24891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::VertexAttrib4f& c = 24901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::VertexAttrib4f*>(cmd_data); 24911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 24925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint indx = static_cast<GLuint>(c.indx); 24935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat x = static_cast<GLfloat>(c.x); 24945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat y = static_cast<GLfloat>(c.y); 24955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat z = static_cast<GLfloat>(c.z); 24965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat w = static_cast<GLfloat>(c.w); 24975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoVertexAttrib4f(indx, x, y, z, w); 24985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 24995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleVertexAttrib4fvImmediate( 2502010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 25031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 25041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::VertexAttrib4fvImmediate& c = 25051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::VertexAttrib4fvImmediate*>(cmd_data); 25061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 25075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint indx = static_cast<GLuint>(c.indx); 2508010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 25095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) { 25105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 25115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 25135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 25145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2515a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLfloat* values = 2516a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 25175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (values == NULL) { 25185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 25195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoVertexAttrib4fv(indx, values); 25215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 25225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2524010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleViewport(uint32_t immediate_data_size, 25251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 25261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::Viewport& c = 25271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::Viewport*>(cmd_data); 25281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 25295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint x = static_cast<GLint>(c.x); 25305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint y = static_cast<GLint>(c.y); 25315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width = static_cast<GLsizei>(c.width); 25325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei height = static_cast<GLsizei>(c.height); 25335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (width < 0) { 25342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glViewport", "width < 0"); 25355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 25365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (height < 0) { 25382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glViewport", "height < 0"); 25395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 25405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoViewport(x, y, width, height); 25425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 25435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleBlitFramebufferCHROMIUM( 2546010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 25471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 25481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::BlitFramebufferCHROMIUM& c = 25491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::BlitFramebufferCHROMIUM*>(cmd_data); 25501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 2551cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!features().chromium_framebuffer_multisample) { 2552cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, 2553cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "glBlitFramebufferCHROMIUM", 2554cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "function not available"); 2555cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return error::kNoError; 2556cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 2557cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 25585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error::Error error; 25595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error = WillAccessBoundFramebufferForDraw(); 25605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (error != error::kNoError) 25615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return error; 25625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error = WillAccessBoundFramebufferForRead(); 25635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (error != error::kNoError) 25645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return error; 25655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint srcX0 = static_cast<GLint>(c.srcX0); 25665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint srcY0 = static_cast<GLint>(c.srcY0); 25675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint srcX1 = static_cast<GLint>(c.srcX1); 25685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint srcY1 = static_cast<GLint>(c.srcY1); 25695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint dstX0 = static_cast<GLint>(c.dstX0); 25705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint dstY0 = static_cast<GLint>(c.dstY0); 25715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint dstX1 = static_cast<GLint>(c.dstX1); 25725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint dstY1 = static_cast<GLint>(c.dstY1); 25735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLbitfield mask = static_cast<GLbitfield>(c.mask); 25745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum filter = static_cast<GLenum>(c.filter); 25755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->blit_filter.IsValid(filter)) { 2576a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 2577a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glBlitFramebufferCHROMIUM", filter, "filter"); 25785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 25795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2580f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DoBlitFramebufferCHROMIUM( 25815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); 25825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 25835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleCHROMIUM( 2586010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 25871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 25881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::RenderbufferStorageMultisampleCHROMIUM& c = 25891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::RenderbufferStorageMultisampleCHROMIUM*>( 25901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cmd_data); 25911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 2592cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!features().chromium_framebuffer_multisample) { 2593cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, 2594cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "glRenderbufferStorageMultisampleCHROMIUM", 2595cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "function not available"); 2596cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return error::kNoError; 2597cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 2598cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2599f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 2600f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GLsizei samples = static_cast<GLsizei>(c.samples); 2601f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GLenum internalformat = static_cast<GLenum>(c.internalformat); 2602f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GLsizei width = static_cast<GLsizei>(c.width); 2603f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GLsizei height = static_cast<GLsizei>(c.height); 2604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!validators_->render_buffer_target.IsValid(target)) { 2605a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 2606a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glRenderbufferStorageMultisampleCHROMIUM", target, "target"); 2607f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return error::kNoError; 2608f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 2609f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (samples < 0) { 2610a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, 2611a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glRenderbufferStorageMultisampleCHROMIUM", 2612a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "samples < 0"); 2613f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return error::kNoError; 2614f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 2615f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!validators_->render_buffer_format.IsValid(internalformat)) { 2616a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorageMultisampleCHROMIUM", 2617a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) internalformat, 2618a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "internalformat"); 2619f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return error::kNoError; 2620f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 2621f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (width < 0) { 2622a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, 2623a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glRenderbufferStorageMultisampleCHROMIUM", 2624a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "width < 0"); 2625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return error::kNoError; 2626f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 2627f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (height < 0) { 2628a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, 2629a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glRenderbufferStorageMultisampleCHROMIUM", 2630a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "height < 0"); 2631f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return error::kNoError; 2632f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 2633f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DoRenderbufferStorageMultisampleCHROMIUM( 2634f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) target, samples, internalformat, width, height); 2635f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return error::kNoError; 2636f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 2637f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 26385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleEXT( 2639010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 26401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 26411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::RenderbufferStorageMultisampleEXT& c = 26421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::RenderbufferStorageMultisampleEXT*>( 26431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cmd_data); 26441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 2645cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!features().multisampled_render_to_texture) { 2646cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, 2647cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "glRenderbufferStorageMultisampleEXT", 2648cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "function not available"); 2649cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return error::kNoError; 2650cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 2651cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 26525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 26535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei samples = static_cast<GLsizei>(c.samples); 26545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum internalformat = static_cast<GLenum>(c.internalformat); 26555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width = static_cast<GLsizei>(c.width); 26565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei height = static_cast<GLsizei>(c.height); 26575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->render_buffer_target.IsValid(target)) { 2658a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 2659a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glRenderbufferStorageMultisampleEXT", target, "target"); 26605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 26615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (samples < 0) { 26632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR( 26645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_INVALID_VALUE, "glRenderbufferStorageMultisampleEXT", "samples < 0"); 26655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 26665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->render_buffer_format.IsValid(internalformat)) { 2668a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorageMultisampleEXT", 2669a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) internalformat, 2670a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "internalformat"); 26715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 26725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (width < 0) { 26742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR( 26755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_INVALID_VALUE, "glRenderbufferStorageMultisampleEXT", "width < 0"); 26765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 26775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (height < 0) { 26792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR( 26805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_INVALID_VALUE, "glRenderbufferStorageMultisampleEXT", "height < 0"); 26815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 26825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2683f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DoRenderbufferStorageMultisampleEXT( 26845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target, samples, internalformat, width, height); 26855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 26865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdocherror::Error GLES2DecoderImpl::HandleFramebufferTexture2DMultisampleEXT( 2689010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 26901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 26911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::FramebufferTexture2DMultisampleEXT& c = 26921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::FramebufferTexture2DMultisampleEXT*>( 26931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cmd_data); 26941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 2695cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!features().multisampled_render_to_texture) { 2696cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, 2697cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "glFramebufferTexture2DMultisampleEXT", 2698cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "function not available"); 2699cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return error::kNoError; 2700cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 2701cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 27027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GLenum target = static_cast<GLenum>(c.target); 27037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GLenum attachment = static_cast<GLenum>(c.attachment); 27047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GLenum textarget = static_cast<GLenum>(c.textarget); 27057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GLuint texture = c.texture; 27067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GLint level = static_cast<GLint>(c.level); 27077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GLsizei samples = static_cast<GLsizei>(c.samples); 27087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!validators_->frame_buffer_target.IsValid(target)) { 2709a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 2710a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glFramebufferTexture2DMultisampleEXT", target, "target"); 27117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return error::kNoError; 27127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 27137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!validators_->attachment.IsValid(attachment)) { 2714a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 2715a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glFramebufferTexture2DMultisampleEXT", attachment, "attachment"); 27167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return error::kNoError; 27177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 27187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!validators_->texture_target.IsValid(textarget)) { 2719a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 2720a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glFramebufferTexture2DMultisampleEXT", textarget, "textarget"); 27217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return error::kNoError; 27227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 27237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (samples < 0) { 2724a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, 2725a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glFramebufferTexture2DMultisampleEXT", 2726a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "samples < 0"); 27277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return error::kNoError; 27287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 27297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DoFramebufferTexture2DMultisample( 27307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch target, attachment, textarget, texture, level, samples); 27317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return error::kNoError; 27327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 27337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 27345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleTexStorage2DEXT( 2735010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 27361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 27371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::TexStorage2DEXT& c = 27381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::TexStorage2DEXT*>(cmd_data); 27391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 27405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 27415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei levels = static_cast<GLsizei>(c.levels); 27425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum internalFormat = static_cast<GLenum>(c.internalFormat); 27435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width = static_cast<GLsizei>(c.width); 27445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei height = static_cast<GLsizei>(c.height); 27455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_target.IsValid(target)) { 27462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexStorage2DEXT", target, "target"); 27475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 27485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (levels < 0) { 27502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage2DEXT", "levels < 0"); 27515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 27525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_internal_format_storage.IsValid(internalFormat)) { 2754a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 2755a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glTexStorage2DEXT", internalFormat, "internalFormat"); 27565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 27575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (width < 0) { 27592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage2DEXT", "width < 0"); 27605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 27615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (height < 0) { 27632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage2DEXT", "height < 0"); 27645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 27655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoTexStorage2DEXT(target, levels, internalFormat, width, height); 27675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 27685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 27695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGenQueriesEXTImmediate( 2771010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 27721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 27731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GenQueriesEXTImmediate& c = 27741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GenQueriesEXTImmediate*>(cmd_data); 27751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 27765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei n = static_cast<GLsizei>(c.n); 2777010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 27785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 27795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 27805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2781a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GLuint* queries = 2782a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); 27835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (queries == NULL) { 27845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 27855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!GenQueriesEXTHelper(n, queries)) { 27875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 27885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 27905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 27915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleDeleteQueriesEXTImmediate( 2793010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 27941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 27951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::DeleteQueriesEXTImmediate& c = 27961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::DeleteQueriesEXTImmediate*>(cmd_data); 27971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 27985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei n = static_cast<GLsizei>(c.n); 2799010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 28005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 28015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 28025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2803a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLuint* queries = 2804a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 28055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (queries == NULL) { 28065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 28075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteQueriesEXTHelper(n, queries); 28095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 28105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 28115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleInsertEventMarkerEXT( 2813010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 28141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 28151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::InsertEventMarkerEXT& c = 28161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::InsertEventMarkerEXT*>(cmd_data); 28171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 28181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 28195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint bucket_id = static_cast<GLuint>(c.bucket_id); 28205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bucket* bucket = GetBucket(bucket_id); 28215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!bucket || bucket->size() == 0) { 28225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 28235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string str; 28255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!bucket->GetAsString(&str)) { 28265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 28275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoInsertEventMarkerEXT(0, str.c_str()); 28295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 28305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 28315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandlePushGroupMarkerEXT( 2833010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 28341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 28351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::PushGroupMarkerEXT& c = 28361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::PushGroupMarkerEXT*>(cmd_data); 28371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 28381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 28395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint bucket_id = static_cast<GLuint>(c.bucket_id); 28405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bucket* bucket = GetBucket(bucket_id); 28415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!bucket || bucket->size() == 0) { 28425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 28435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string str; 28455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!bucket->GetAsString(&str)) { 28465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 28475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoPushGroupMarkerEXT(0, str.c_str()); 28495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 28505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 28515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandlePopGroupMarkerEXT( 2853010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 28541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 28551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::PopGroupMarkerEXT& c = 28561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::PopGroupMarkerEXT*>(cmd_data); 28571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 28585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoPopGroupMarkerEXT(); 28595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 28605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 28615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGenVertexArraysOESImmediate( 2863010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 28641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 28651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GenVertexArraysOESImmediate& c = 28661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GenVertexArraysOESImmediate*>(cmd_data); 28671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 28685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei n = static_cast<GLsizei>(c.n); 2869010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 28705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 28715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 28725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2873a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GLuint* arrays = 2874a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); 28755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (arrays == NULL) { 28765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 28775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!GenVertexArraysOESHelper(n, arrays)) { 28795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kInvalidArguments; 28805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 28825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 28835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleDeleteVertexArraysOESImmediate( 2885010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 28861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 28871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::DeleteVertexArraysOESImmediate& c = 28881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::DeleteVertexArraysOESImmediate*>( 28891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cmd_data); 28901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 28915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei n = static_cast<GLsizei>(c.n); 2892010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 28935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 28945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 28955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2896a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLuint* arrays = 2897a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 28985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (arrays == NULL) { 28995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 29005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteVertexArraysOESHelper(n, arrays); 29025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 29035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleIsVertexArrayOES( 2906010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 29071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 29081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::IsVertexArrayOES& c = 29091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::IsVertexArrayOES*>(cmd_data); 29101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 29115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint array = c.array; 29122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::IsVertexArrayOES::Result Result; 29135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result_dst = GetSharedMemoryAs<Result*>( 29145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 29155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!result_dst) { 29165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 29175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *result_dst = DoIsVertexArrayOES(array); 29195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 29205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleBindVertexArrayOES( 2923010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 29241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 29251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::BindVertexArrayOES& c = 29261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::BindVertexArrayOES*>(cmd_data); 29271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 29285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint array = c.array; 29295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBindVertexArrayOES(array); 29305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 29315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleSwapBuffers(uint32_t immediate_data_size, 29341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 29351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::SwapBuffers& c = 29361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::SwapBuffers*>(cmd_data); 29371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 2938a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) DoSwapBuffers(); 2939a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return error::kNoError; 2940a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 2941a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 29425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleGetMaxValueInBufferCHROMIUM( 2943010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 29441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 29451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::GetMaxValueInBufferCHROMIUM& c = 29461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::GetMaxValueInBufferCHROMIUM*>(cmd_data); 29471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 29485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint buffer_id = c.buffer_id; 29495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei count = static_cast<GLsizei>(c.count); 29505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum type = static_cast<GLenum>(c.type); 29515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint offset = static_cast<GLuint>(c.offset); 29522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef cmds::GetMaxValueInBufferCHROMIUM::Result Result; 29535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result* result_dst = GetSharedMemoryAs<Result*>( 29545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 29555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!result_dst) { 29565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 29575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (count < 0) { 29592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR( 29602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GL_INVALID_VALUE, "glGetMaxValueInBufferCHROMIUM", "count < 0"); 29615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 29625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->get_max_index_type.IsValid(type)) { 2964a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 2965a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glGetMaxValueInBufferCHROMIUM", type, "type"); 29665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 29675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *result_dst = DoGetMaxValueInBufferCHROMIUM(buffer_id, count, type, offset); 29695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 29705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleTexImageIOSurface2DCHROMIUM( 2973010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 29741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 29751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::TexImageIOSurface2DCHROMIUM& c = 29761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::TexImageIOSurface2DCHROMIUM*>(cmd_data); 29771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 29785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 29795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width = static_cast<GLsizei>(c.width); 29805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei height = static_cast<GLsizei>(c.height); 29815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint ioSurfaceId = static_cast<GLuint>(c.ioSurfaceId); 29825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint plane = static_cast<GLuint>(c.plane); 29835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_bind_target.IsValid(target)) { 2984a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 2985a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glTexImageIOSurface2DCHROMIUM", target, "target"); 29865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 29875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (width < 0) { 29892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR( 29902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GL_INVALID_VALUE, "glTexImageIOSurface2DCHROMIUM", "width < 0"); 29915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 29925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (height < 0) { 29942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR( 29955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_INVALID_VALUE, "glTexImageIOSurface2DCHROMIUM", "height < 0"); 29965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 29975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoTexImageIOSurface2DCHROMIUM(target, width, height, ioSurfaceId, plane); 29995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 30005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 30015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleCopyTextureCHROMIUM( 3003010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 30041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 30051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::CopyTextureCHROMIUM& c = 30061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::CopyTextureCHROMIUM*>(cmd_data); 30071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 30085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 30095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum source_id = static_cast<GLenum>(c.source_id); 30105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum dest_id = static_cast<GLenum>(c.dest_id); 30115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint level = static_cast<GLint>(c.level); 30125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint internalformat = static_cast<GLint>(c.internalformat); 3013c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GLenum dest_type = static_cast<GLenum>(c.dest_type); 30145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_internal_format.IsValid(internalformat)) { 3015a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, 3016a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glCopyTextureCHROMIUM", 3017a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "internalformat GL_INVALID_VALUE"); 30185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 30195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3020c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!validators_->pixel_type.IsValid(dest_type)) { 3021a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 3022a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glCopyTextureCHROMIUM", dest_type, "dest_type"); 3023c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return error::kNoError; 3024c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 3025c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DoCopyTextureCHROMIUM( 3026c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) target, source_id, dest_id, level, internalformat, dest_type); 30275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 30285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 30295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleProduceTextureCHROMIUMImmediate( 3031010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 30321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 30331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::ProduceTextureCHROMIUMImmediate& c = 30341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::ProduceTextureCHROMIUMImmediate*>( 30351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cmd_data); 30361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 30375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 3038010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 30395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { 30405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 30415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 30425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 30435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 30445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3045a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLbyte* mailbox = 3046a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size); 3047c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!validators_->texture_bind_target.IsValid(target)) { 3048a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 3049a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glProduceTextureCHROMIUM", target, "target"); 30505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 30515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 30525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (mailbox == NULL) { 30535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 30545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 30555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoProduceTextureCHROMIUM(target, mailbox); 30565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 30575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 30585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3059f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleProduceTextureDirectCHROMIUMImmediate( 3060f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32_t immediate_data_size, 30611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 30621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::ProduceTextureDirectCHROMIUMImmediate& c = 30631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::ProduceTextureDirectCHROMIUMImmediate*>( 30641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cmd_data); 30651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 3066f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GLuint texture = c.texture; 3067f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 3068f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32_t data_size; 3069f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { 3070f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return error::kOutOfBounds; 3071f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 3072f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (data_size > immediate_data_size) { 3073f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return error::kOutOfBounds; 3074f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 3075f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GLbyte* mailbox = 3076f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size); 3077f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!validators_->texture_bind_target.IsValid(target)) { 3078f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 3079f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "glProduceTextureDirectCHROMIUM", target, "target"); 3080f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return error::kNoError; 3081f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 3082f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (mailbox == NULL) { 3083f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return error::kOutOfBounds; 3084f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 3085f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DoProduceTextureDirectCHROMIUM(texture, target, mailbox); 3086f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return error::kNoError; 3087f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 3088f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 30895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleConsumeTextureCHROMIUMImmediate( 3090010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 30911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 30921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::ConsumeTextureCHROMIUMImmediate& c = 30931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::ConsumeTextureCHROMIUMImmediate*>( 30941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cmd_data); 30951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 30965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 3097010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 30985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { 30995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 31005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data_size > immediate_data_size) { 31025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 31035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLbyte* mailbox = 3105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size); 3106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!validators_->texture_bind_target.IsValid(target)) { 3107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 3108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glConsumeTextureCHROMIUM", target, "target"); 31095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 31105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (mailbox == NULL) { 31125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kOutOfBounds; 31135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoConsumeTextureCHROMIUM(target, mailbox); 31155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 31165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 31175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleBindTexImage2DCHROMIUM( 3119010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 31201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 31211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::BindTexImage2DCHROMIUM& c = 31221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::BindTexImage2DCHROMIUM*>(cmd_data); 31231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 31245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 31255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint imageId = static_cast<GLint>(c.imageId); 31265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_bind_target.IsValid(target)) { 3127a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 3128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glBindTexImage2DCHROMIUM", target, "target"); 31295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 31305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBindTexImage2DCHROMIUM(target, imageId); 31325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 31335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 31345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleReleaseTexImage2DCHROMIUM( 3136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 31371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 31381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::ReleaseTexImage2DCHROMIUM& c = 31391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::ReleaseTexImage2DCHROMIUM*>(cmd_data); 31401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 31415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 31425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint imageId = static_cast<GLint>(c.imageId); 31435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!validators_->texture_bind_target.IsValid(target)) { 3144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 3145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "glReleaseTexImage2DCHROMIUM", target, "target"); 31465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 31475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoReleaseTexImage2DCHROMIUM(target, imageId); 31495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error::kNoError; 31505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 31515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleTraceEndCHROMIUM( 3153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 31541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 31551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::TraceEndCHROMIUM& c = 31561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::TraceEndCHROMIUM*>(cmd_data); 31571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 31582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoTraceEndCHROMIUM(); 31592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kNoError; 31602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 31612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleDiscardFramebufferEXTImmediate( 3163010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 31641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 31651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::DiscardFramebufferEXTImmediate& c = 31661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::DiscardFramebufferEXTImmediate*>( 31671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cmd_data); 31681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 3169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!features().ext_discard_framebuffer) { 3170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, 3171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "glDiscardFramebufferEXT", 3172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "function not available"); 31732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kNoError; 31742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 31752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 31762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GLenum target = static_cast<GLenum>(c.target); 31772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GLsizei count = static_cast<GLsizei>(c.count); 3178010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 31792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { 31802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kOutOfBounds; 31812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 31822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (data_size > immediate_data_size) { 31832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kOutOfBounds; 31842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLenum* attachments = 3186a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLenum*>(c, data_size, immediate_data_size); 31872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (count < 0) { 31882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR( 31892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GL_INVALID_VALUE, "glDiscardFramebufferEXT", "count < 0"); 31902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kNoError; 31912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 31922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (attachments == NULL) { 31932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kOutOfBounds; 31942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 31952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoDiscardFramebufferEXT(target, count, attachments); 31962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kNoError; 31972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 31982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)error::Error GLES2DecoderImpl::HandleLoseContextCHROMIUM( 3200010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 32011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 32021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::LoseContextCHROMIUM& c = 32031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::LoseContextCHROMIUM*>(cmd_data); 32041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 3205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GLenum current = static_cast<GLenum>(c.current); 3206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GLenum other = static_cast<GLenum>(c.other); 3207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!validators_->reset_status.IsValid(current)) { 3208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM( 3209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "glLoseContextCHROMIUM", current, "current"); 32102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kNoError; 32112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!validators_->reset_status.IsValid(other)) { 3213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) LOCAL_SET_GL_ERROR_INVALID_ENUM("glLoseContextCHROMIUM", other, "other"); 3214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return error::kNoError; 32152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoLoseContextCHROMIUM(current, other); 32172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kNoError; 32182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 32192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 32202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)error::Error GLES2DecoderImpl::HandleDrawBuffersEXTImmediate( 3221010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t immediate_data_size, 32221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 32231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::DrawBuffersEXTImmediate& c = 32241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::DrawBuffersEXTImmediate*>(cmd_data); 32251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 32262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GLsizei count = static_cast<GLsizei>(c.count); 3227010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t data_size; 32282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { 32292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kOutOfBounds; 32302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 32312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (data_size > immediate_data_size) { 32322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kOutOfBounds; 32332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3234a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GLenum* bufs = 3235a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetImmediateDataAs<const GLenum*>(c, data_size, immediate_data_size); 32362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (count < 0) { 32372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glDrawBuffersEXT", "count < 0"); 32382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kNoError; 32392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 32402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (bufs == NULL) { 32412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kOutOfBounds; 32422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 32432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoDrawBuffersEXT(count, bufs); 32442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error::kNoError; 32452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 32462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 32471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleMatrixLoadfCHROMIUMImmediate( 32481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32_t immediate_data_size, 32491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 32501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::MatrixLoadfCHROMIUMImmediate& c = 32511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::MatrixLoadfCHROMIUMImmediate*>(cmd_data); 32521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 32531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!features().chromium_path_rendering) { 32541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, 32551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "glMatrixLoadfCHROMIUM", 32561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "function not available"); 32571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return error::kNoError; 32581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 32591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 32601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GLenum matrixMode = static_cast<GLenum>(c.matrixMode); 32611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32_t data_size; 32621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!ComputeDataSize(1, sizeof(GLfloat), 16, &data_size)) { 32631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return error::kOutOfBounds; 32641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 32651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (data_size > immediate_data_size) { 32661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return error::kOutOfBounds; 32671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 32681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const GLfloat* m = 32691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 32701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!validators_->matrix_mode.IsValid(matrixMode)) { 32711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOCAL_SET_GL_ERROR_INVALID_ENUM( 32721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "glMatrixLoadfCHROMIUM", matrixMode, "matrixMode"); 32731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return error::kNoError; 32741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 32751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (m == NULL) { 32761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return error::kOutOfBounds; 32771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 32781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DoMatrixLoadfCHROMIUM(matrixMode, m); 32791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return error::kNoError; 32801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 32811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 32821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccierror::Error GLES2DecoderImpl::HandleMatrixLoadIdentityCHROMIUM( 32831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32_t immediate_data_size, 32841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const void* cmd_data) { 32851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gles2::cmds::MatrixLoadIdentityCHROMIUM& c = 32861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *static_cast<const gles2::cmds::MatrixLoadIdentityCHROMIUM*>(cmd_data); 32871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (void)c; 32881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!features().chromium_path_rendering) { 32891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, 32901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "glMatrixLoadIdentityCHROMIUM", 32911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "function not available"); 32921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return error::kNoError; 32931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 32941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 32951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GLenum matrixMode = static_cast<GLenum>(c.matrixMode); 32961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!validators_->matrix_mode.IsValid(matrixMode)) { 32971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOCAL_SET_GL_ERROR_INVALID_ENUM( 32981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "glMatrixLoadIdentityCHROMIUM", matrixMode, "matrixMode"); 32991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return error::kNoError; 33001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 33011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DoMatrixLoadIdentityCHROMIUM(matrixMode); 33021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return error::kNoError; 33031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 33041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 33055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) { 33065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (cap) { 33075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BLEND: 33085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_.enable_flags.blend = enabled; 3309010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (state_.enable_flags.cached_blend != enabled || 3310010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.ignore_cached_state) { 3311010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.enable_flags.cached_blend = enabled; 3312010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return true; 3313010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 3314010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return false; 33155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_CULL_FACE: 33165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_.enable_flags.cull_face = enabled; 3317010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (state_.enable_flags.cached_cull_face != enabled || 3318010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.ignore_cached_state) { 3319010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.enable_flags.cached_cull_face = enabled; 3320010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return true; 3321010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 3322010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return false; 33235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_TEST: 3324010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.enable_flags.depth_test = enabled; 3325010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (state_.enable_flags.cached_depth_test != enabled || 3326010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.ignore_cached_state) { 33273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) framebuffer_state_.clear_state_dirty = true; 33285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 33305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DITHER: 33315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_.enable_flags.dither = enabled; 3332010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (state_.enable_flags.cached_dither != enabled || 3333010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.ignore_cached_state) { 3334010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.enable_flags.cached_dither = enabled; 3335010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return true; 3336010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 3337010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return false; 33385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_POLYGON_OFFSET_FILL: 33395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_.enable_flags.polygon_offset_fill = enabled; 3340010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (state_.enable_flags.cached_polygon_offset_fill != enabled || 3341010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.ignore_cached_state) { 3342010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.enable_flags.cached_polygon_offset_fill = enabled; 3343010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return true; 3344010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 3345010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return false; 33465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SAMPLE_ALPHA_TO_COVERAGE: 33475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_.enable_flags.sample_alpha_to_coverage = enabled; 3348010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (state_.enable_flags.cached_sample_alpha_to_coverage != enabled || 3349010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.ignore_cached_state) { 3350010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.enable_flags.cached_sample_alpha_to_coverage = enabled; 3351010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return true; 3352010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 3353010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return false; 33545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SAMPLE_COVERAGE: 33555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_.enable_flags.sample_coverage = enabled; 3356010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (state_.enable_flags.cached_sample_coverage != enabled || 3357010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.ignore_cached_state) { 3358010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.enable_flags.cached_sample_coverage = enabled; 3359010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return true; 3360010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 3361010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return false; 33625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SCISSOR_TEST: 3363010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.enable_flags.scissor_test = enabled; 3364010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (state_.enable_flags.cached_scissor_test != enabled || 3365010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.ignore_cached_state) { 3366010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.enable_flags.cached_scissor_test = enabled; 3367010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return true; 33682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 33692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 33705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_TEST: 3371010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.enable_flags.stencil_test = enabled; 3372010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (state_.enable_flags.cached_stencil_test != enabled || 3373010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_.ignore_cached_state) { 33743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) framebuffer_state_.clear_state_dirty = true; 33755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 33775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 33785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 33795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 33805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 33825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ 3383