OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This file is auto-generated from | 5 // This file is auto-generated from |
6 // gpu/command_buffer/build_gles2_cmd_buffer.py | 6 // gpu/command_buffer/build_gles2_cmd_buffer.py |
7 // It's formatted by clang-format using chromium coding style: | 7 // It's formatted by clang-format using chromium coding style: |
8 // clang-format -i -style=chromium filename | 8 // clang-format -i -style=chromium filename |
9 // DO NOT EDIT! | 9 // DO NOT EDIT! |
10 | 10 |
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
696 DoCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); | 696 DoCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); |
697 return error::kNoError; | 697 return error::kNoError; |
698 } | 698 } |
699 | 699 |
700 error::Error GLES2DecoderImpl::HandleCreateProgram(uint32_t immediate_data_size, | 700 error::Error GLES2DecoderImpl::HandleCreateProgram(uint32_t immediate_data_size, |
701 const void* cmd_data) { | 701 const void* cmd_data) { |
702 const gles2::cmds::CreateProgram& c = | 702 const gles2::cmds::CreateProgram& c = |
703 *static_cast<const gles2::cmds::CreateProgram*>(cmd_data); | 703 *static_cast<const gles2::cmds::CreateProgram*>(cmd_data); |
704 (void)c; | 704 (void)c; |
705 uint32_t client_id = c.client_id; | 705 uint32_t client_id = c.client_id; |
706 if (!CreateProgramHelper(client_id)) { | 706 if (GetProgram(client_id)) { |
707 return error::kInvalidArguments; | 707 return error::kInvalidArguments; |
708 } | 708 } |
| 709 GLuint service_id = glCreateProgram(); |
| 710 if (service_id) { |
| 711 CreateProgram(client_id, service_id); |
| 712 } |
709 return error::kNoError; | 713 return error::kNoError; |
710 } | 714 } |
711 | 715 |
712 error::Error GLES2DecoderImpl::HandleCreateShader(uint32_t immediate_data_size, | 716 error::Error GLES2DecoderImpl::HandleCreateShader(uint32_t immediate_data_size, |
713 const void* cmd_data) { | 717 const void* cmd_data) { |
714 const gles2::cmds::CreateShader& c = | 718 const gles2::cmds::CreateShader& c = |
715 *static_cast<const gles2::cmds::CreateShader*>(cmd_data); | 719 *static_cast<const gles2::cmds::CreateShader*>(cmd_data); |
716 (void)c; | 720 (void)c; |
717 GLenum type = static_cast<GLenum>(c.type); | 721 GLenum type = static_cast<GLenum>(c.type); |
718 if (!validators_->shader_type.IsValid(type)) { | 722 if (!validators_->shader_type.IsValid(type)) { |
719 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCreateShader", type, "type"); | 723 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCreateShader", type, "type"); |
720 return error::kNoError; | 724 return error::kNoError; |
721 } | 725 } |
722 uint32_t client_id = c.client_id; | 726 uint32_t client_id = c.client_id; |
723 if (!CreateShaderHelper(type, client_id)) { | 727 if (GetShader(client_id)) { |
724 return error::kInvalidArguments; | 728 return error::kInvalidArguments; |
725 } | 729 } |
| 730 GLuint service_id = glCreateShader(type); |
| 731 if (service_id) { |
| 732 CreateShader(client_id, service_id, type); |
| 733 } |
726 return error::kNoError; | 734 return error::kNoError; |
727 } | 735 } |
728 | 736 |
729 error::Error GLES2DecoderImpl::HandleCullFace(uint32_t immediate_data_size, | 737 error::Error GLES2DecoderImpl::HandleCullFace(uint32_t immediate_data_size, |
730 const void* cmd_data) { | 738 const void* cmd_data) { |
731 const gles2::cmds::CullFace& c = | 739 const gles2::cmds::CullFace& c = |
732 *static_cast<const gles2::cmds::CullFace*>(cmd_data); | 740 *static_cast<const gles2::cmds::CullFace*>(cmd_data); |
733 (void)c; | 741 (void)c; |
734 GLenum mode = static_cast<GLenum>(c.mode); | 742 GLenum mode = static_cast<GLenum>(c.mode); |
735 if (!validators_->face_type.IsValid(mode)) { | 743 if (!validators_->face_type.IsValid(mode)) { |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
824 for (GLsizei ii = 0; ii < n; ++ii) { | 832 for (GLsizei ii = 0; ii < n; ++ii) { |
825 GLuint service_id = 0; | 833 GLuint service_id = 0; |
826 if (group_->GetSamplerServiceId(samplers[ii], &service_id)) { | 834 if (group_->GetSamplerServiceId(samplers[ii], &service_id)) { |
827 glDeleteSamplers(1, &service_id); | 835 glDeleteSamplers(1, &service_id); |
828 group_->RemoveSamplerId(samplers[ii]); | 836 group_->RemoveSamplerId(samplers[ii]); |
829 } | 837 } |
830 } | 838 } |
831 return error::kNoError; | 839 return error::kNoError; |
832 } | 840 } |
833 | 841 |
| 842 error::Error GLES2DecoderImpl::HandleDeleteSync(uint32_t immediate_data_size, |
| 843 const void* cmd_data) { |
| 844 if (!unsafe_es3_apis_enabled()) |
| 845 return error::kUnknownCommand; |
| 846 const gles2::cmds::DeleteSync& c = |
| 847 *static_cast<const gles2::cmds::DeleteSync*>(cmd_data); |
| 848 (void)c; |
| 849 GLuint sync = c.sync; |
| 850 GLsync service_id = 0; |
| 851 if (group_->GetSyncServiceId(sync, &service_id)) { |
| 852 glDeleteSync(service_id); |
| 853 group_->RemoveSyncId(sync); |
| 854 } else { |
| 855 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glDeleteSync", "unknown sync"); |
| 856 } |
| 857 return error::kNoError; |
| 858 } |
| 859 |
834 error::Error GLES2DecoderImpl::HandleDeleteTexturesImmediate( | 860 error::Error GLES2DecoderImpl::HandleDeleteTexturesImmediate( |
835 uint32_t immediate_data_size, | 861 uint32_t immediate_data_size, |
836 const void* cmd_data) { | 862 const void* cmd_data) { |
837 const gles2::cmds::DeleteTexturesImmediate& c = | 863 const gles2::cmds::DeleteTexturesImmediate& c = |
838 *static_cast<const gles2::cmds::DeleteTexturesImmediate*>(cmd_data); | 864 *static_cast<const gles2::cmds::DeleteTexturesImmediate*>(cmd_data); |
839 (void)c; | 865 (void)c; |
840 GLsizei n = static_cast<GLsizei>(c.n); | 866 GLsizei n = static_cast<GLsizei>(c.n); |
841 uint32_t data_size; | 867 uint32_t data_size; |
842 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 868 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
843 return error::kOutOfBounds; | 869 return error::kOutOfBounds; |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
975 uint32_t immediate_data_size, | 1001 uint32_t immediate_data_size, |
976 const void* cmd_data) { | 1002 const void* cmd_data) { |
977 const gles2::cmds::EnableVertexAttribArray& c = | 1003 const gles2::cmds::EnableVertexAttribArray& c = |
978 *static_cast<const gles2::cmds::EnableVertexAttribArray*>(cmd_data); | 1004 *static_cast<const gles2::cmds::EnableVertexAttribArray*>(cmd_data); |
979 (void)c; | 1005 (void)c; |
980 GLuint index = static_cast<GLuint>(c.index); | 1006 GLuint index = static_cast<GLuint>(c.index); |
981 DoEnableVertexAttribArray(index); | 1007 DoEnableVertexAttribArray(index); |
982 return error::kNoError; | 1008 return error::kNoError; |
983 } | 1009 } |
984 | 1010 |
| 1011 error::Error GLES2DecoderImpl::HandleFenceSync(uint32_t immediate_data_size, |
| 1012 const void* cmd_data) { |
| 1013 if (!unsafe_es3_apis_enabled()) |
| 1014 return error::kUnknownCommand; |
| 1015 const gles2::cmds::FenceSync& c = |
| 1016 *static_cast<const gles2::cmds::FenceSync*>(cmd_data); |
| 1017 (void)c; |
| 1018 GLenum condition = static_cast<GLenum>(c.condition); |
| 1019 GLbitfield flags = static_cast<GLbitfield>(c.flags); |
| 1020 uint32_t client_id = c.client_id; |
| 1021 GLsync service_id = 0; |
| 1022 if (group_->GetSyncServiceId(client_id, &service_id)) { |
| 1023 return error::kInvalidArguments; |
| 1024 } |
| 1025 service_id = glFenceSync(condition, flags); |
| 1026 if (service_id) { |
| 1027 group_->AddSyncId(client_id, service_id); |
| 1028 } |
| 1029 return error::kNoError; |
| 1030 } |
| 1031 |
985 error::Error GLES2DecoderImpl::HandleFinish(uint32_t immediate_data_size, | 1032 error::Error GLES2DecoderImpl::HandleFinish(uint32_t immediate_data_size, |
986 const void* cmd_data) { | 1033 const void* cmd_data) { |
987 const gles2::cmds::Finish& c = | 1034 const gles2::cmds::Finish& c = |
988 *static_cast<const gles2::cmds::Finish*>(cmd_data); | 1035 *static_cast<const gles2::cmds::Finish*>(cmd_data); |
989 (void)c; | 1036 (void)c; |
990 error::Error error; | 1037 error::Error error; |
991 error = WillAccessBoundFramebufferForRead(); | 1038 error = WillAccessBoundFramebufferForRead(); |
992 if (error != error::kNoError) | 1039 if (error != error::kNoError) |
993 return error; | 1040 return error; |
994 DoFinish(); | 1041 DoFinish(); |
(...skipping 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2037 const gles2::cmds::IsSampler& c = | 2084 const gles2::cmds::IsSampler& c = |
2038 *static_cast<const gles2::cmds::IsSampler*>(cmd_data); | 2085 *static_cast<const gles2::cmds::IsSampler*>(cmd_data); |
2039 (void)c; | 2086 (void)c; |
2040 GLuint sampler = c.sampler; | 2087 GLuint sampler = c.sampler; |
2041 typedef cmds::IsSampler::Result Result; | 2088 typedef cmds::IsSampler::Result Result; |
2042 Result* result_dst = GetSharedMemoryAs<Result*>( | 2089 Result* result_dst = GetSharedMemoryAs<Result*>( |
2043 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 2090 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
2044 if (!result_dst) { | 2091 if (!result_dst) { |
2045 return error::kOutOfBounds; | 2092 return error::kOutOfBounds; |
2046 } | 2093 } |
2047 *result_dst = group_->GetSamplerServiceId(sampler, &sampler); | 2094 GLuint service_sampler = 0; |
| 2095 *result_dst = group_->GetSamplerServiceId(sampler, &service_sampler); |
2048 return error::kNoError; | 2096 return error::kNoError; |
2049 } | 2097 } |
2050 | 2098 |
2051 error::Error GLES2DecoderImpl::HandleIsShader(uint32_t immediate_data_size, | 2099 error::Error GLES2DecoderImpl::HandleIsShader(uint32_t immediate_data_size, |
2052 const void* cmd_data) { | 2100 const void* cmd_data) { |
2053 const gles2::cmds::IsShader& c = | 2101 const gles2::cmds::IsShader& c = |
2054 *static_cast<const gles2::cmds::IsShader*>(cmd_data); | 2102 *static_cast<const gles2::cmds::IsShader*>(cmd_data); |
2055 (void)c; | 2103 (void)c; |
2056 GLuint shader = c.shader; | 2104 GLuint shader = c.shader; |
2057 typedef cmds::IsShader::Result Result; | 2105 typedef cmds::IsShader::Result Result; |
2058 Result* result_dst = GetSharedMemoryAs<Result*>( | 2106 Result* result_dst = GetSharedMemoryAs<Result*>( |
2059 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 2107 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
2060 if (!result_dst) { | 2108 if (!result_dst) { |
2061 return error::kOutOfBounds; | 2109 return error::kOutOfBounds; |
2062 } | 2110 } |
2063 *result_dst = DoIsShader(shader); | 2111 *result_dst = DoIsShader(shader); |
2064 return error::kNoError; | 2112 return error::kNoError; |
2065 } | 2113 } |
2066 | 2114 |
| 2115 error::Error GLES2DecoderImpl::HandleIsSync(uint32_t immediate_data_size, |
| 2116 const void* cmd_data) { |
| 2117 if (!unsafe_es3_apis_enabled()) |
| 2118 return error::kUnknownCommand; |
| 2119 const gles2::cmds::IsSync& c = |
| 2120 *static_cast<const gles2::cmds::IsSync*>(cmd_data); |
| 2121 (void)c; |
| 2122 GLuint sync = c.sync; |
| 2123 typedef cmds::IsSync::Result Result; |
| 2124 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 2125 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 2126 if (!result_dst) { |
| 2127 return error::kOutOfBounds; |
| 2128 } |
| 2129 GLsync service_sync = 0; |
| 2130 *result_dst = group_->GetSyncServiceId(sync, &service_sync); |
| 2131 return error::kNoError; |
| 2132 } |
| 2133 |
2067 error::Error GLES2DecoderImpl::HandleIsTexture(uint32_t immediate_data_size, | 2134 error::Error GLES2DecoderImpl::HandleIsTexture(uint32_t immediate_data_size, |
2068 const void* cmd_data) { | 2135 const void* cmd_data) { |
2069 const gles2::cmds::IsTexture& c = | 2136 const gles2::cmds::IsTexture& c = |
2070 *static_cast<const gles2::cmds::IsTexture*>(cmd_data); | 2137 *static_cast<const gles2::cmds::IsTexture*>(cmd_data); |
2071 (void)c; | 2138 (void)c; |
2072 GLuint texture = c.texture; | 2139 GLuint texture = c.texture; |
2073 typedef cmds::IsTexture::Result Result; | 2140 typedef cmds::IsTexture::Result Result; |
2074 Result* result_dst = GetSharedMemoryAs<Result*>( | 2141 Result* result_dst = GetSharedMemoryAs<Result*>( |
2075 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 2142 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
2076 if (!result_dst) { | 2143 if (!result_dst) { |
(...skipping 11 matching lines...) Expand all Loading... |
2088 const gles2::cmds::IsTransformFeedback& c = | 2155 const gles2::cmds::IsTransformFeedback& c = |
2089 *static_cast<const gles2::cmds::IsTransformFeedback*>(cmd_data); | 2156 *static_cast<const gles2::cmds::IsTransformFeedback*>(cmd_data); |
2090 (void)c; | 2157 (void)c; |
2091 GLuint transformfeedback = c.transformfeedback; | 2158 GLuint transformfeedback = c.transformfeedback; |
2092 typedef cmds::IsTransformFeedback::Result Result; | 2159 typedef cmds::IsTransformFeedback::Result Result; |
2093 Result* result_dst = GetSharedMemoryAs<Result*>( | 2160 Result* result_dst = GetSharedMemoryAs<Result*>( |
2094 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 2161 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
2095 if (!result_dst) { | 2162 if (!result_dst) { |
2096 return error::kOutOfBounds; | 2163 return error::kOutOfBounds; |
2097 } | 2164 } |
2098 *result_dst = group_->GetTransformFeedbackServiceId(transformfeedback, | 2165 GLuint service_transformfeedback = 0; |
2099 &transformfeedback); | 2166 *result_dst = group_->GetTransformFeedbackServiceId( |
| 2167 transformfeedback, &service_transformfeedback); |
2100 return error::kNoError; | 2168 return error::kNoError; |
2101 } | 2169 } |
2102 | 2170 |
2103 error::Error GLES2DecoderImpl::HandleLineWidth(uint32_t immediate_data_size, | 2171 error::Error GLES2DecoderImpl::HandleLineWidth(uint32_t immediate_data_size, |
2104 const void* cmd_data) { | 2172 const void* cmd_data) { |
2105 const gles2::cmds::LineWidth& c = | 2173 const gles2::cmds::LineWidth& c = |
2106 *static_cast<const gles2::cmds::LineWidth*>(cmd_data); | 2174 *static_cast<const gles2::cmds::LineWidth*>(cmd_data); |
2107 (void)c; | 2175 (void)c; |
2108 GLfloat width = static_cast<GLfloat>(c.width); | 2176 GLfloat width = static_cast<GLfloat>(c.width); |
2109 if (width <= 0.0f || base::IsNaN(width)) { | 2177 if (width <= 0.0f || base::IsNaN(width)) { |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2346 state_.scissor_width != width || state_.scissor_height != height) { | 2414 state_.scissor_width != width || state_.scissor_height != height) { |
2347 state_.scissor_x = x; | 2415 state_.scissor_x = x; |
2348 state_.scissor_y = y; | 2416 state_.scissor_y = y; |
2349 state_.scissor_width = width; | 2417 state_.scissor_width = width; |
2350 state_.scissor_height = height; | 2418 state_.scissor_height = height; |
2351 glScissor(x, y, width, height); | 2419 glScissor(x, y, width, height); |
2352 } | 2420 } |
2353 return error::kNoError; | 2421 return error::kNoError; |
2354 } | 2422 } |
2355 | 2423 |
| 2424 error::Error GLES2DecoderImpl::HandleShaderSourceBucket( |
| 2425 uint32_t immediate_data_size, |
| 2426 const void* cmd_data) { |
| 2427 const gles2::cmds::ShaderSourceBucket& c = |
| 2428 *static_cast<const gles2::cmds::ShaderSourceBucket*>(cmd_data); |
| 2429 (void)c; |
| 2430 GLuint shader = static_cast<GLuint>(c.shader); |
| 2431 |
| 2432 const size_t kMinBucketSize = sizeof(GLint); |
| 2433 // Each string has at least |length| in the header and a NUL character. |
| 2434 const size_t kMinStringSize = sizeof(GLint) + 1; |
| 2435 Bucket* bucket = GetBucket(c.str_bucket_id); |
| 2436 if (!bucket) { |
| 2437 return error::kInvalidArguments; |
| 2438 } |
| 2439 const size_t bucket_size = bucket->size(); |
| 2440 if (bucket_size < kMinBucketSize) { |
| 2441 return error::kInvalidArguments; |
| 2442 } |
| 2443 const char* bucket_data = bucket->GetDataAs<const char*>(0, bucket_size); |
| 2444 const GLint* header = reinterpret_cast<const GLint*>(bucket_data); |
| 2445 GLsizei count = static_cast<GLsizei>(header[0]); |
| 2446 if (count < 0) { |
| 2447 return error::kInvalidArguments; |
| 2448 } |
| 2449 const size_t max_count = (bucket_size - kMinBucketSize) / kMinStringSize; |
| 2450 if (max_count < static_cast<size_t>(count)) { |
| 2451 return error::kInvalidArguments; |
| 2452 } |
| 2453 const GLint* length = header + 1; |
| 2454 scoped_ptr<const char* []> strs; |
| 2455 if (count > 0) |
| 2456 strs.reset(new const char* [count]); |
| 2457 const char** str = strs.get(); |
| 2458 base::CheckedNumeric<size_t> total_size = sizeof(GLint); |
| 2459 total_size *= count + 1; // Header size. |
| 2460 if (!total_size.IsValid()) |
| 2461 return error::kInvalidArguments; |
| 2462 for (GLsizei ii = 0; ii < count; ++ii) { |
| 2463 str[ii] = bucket_data + total_size.ValueOrDefault(0); |
| 2464 total_size += length[ii]; |
| 2465 total_size += 1; // NUL char at the end of each char array. |
| 2466 if (!total_size.IsValid() || total_size.ValueOrDefault(0) > bucket_size || |
| 2467 str[ii][length[ii]] != 0) { |
| 2468 return error::kInvalidArguments; |
| 2469 } |
| 2470 } |
| 2471 if (total_size.ValueOrDefault(0) != bucket_size) { |
| 2472 return error::kInvalidArguments; |
| 2473 } |
| 2474 DoShaderSource(shader, count, str, length); |
| 2475 return error::kNoError; |
| 2476 } |
| 2477 |
2356 error::Error GLES2DecoderImpl::HandleStencilFunc(uint32_t immediate_data_size, | 2478 error::Error GLES2DecoderImpl::HandleStencilFunc(uint32_t immediate_data_size, |
2357 const void* cmd_data) { | 2479 const void* cmd_data) { |
2358 const gles2::cmds::StencilFunc& c = | 2480 const gles2::cmds::StencilFunc& c = |
2359 *static_cast<const gles2::cmds::StencilFunc*>(cmd_data); | 2481 *static_cast<const gles2::cmds::StencilFunc*>(cmd_data); |
2360 (void)c; | 2482 (void)c; |
2361 GLenum func = static_cast<GLenum>(c.func); | 2483 GLenum func = static_cast<GLenum>(c.func); |
2362 GLint ref = static_cast<GLint>(c.ref); | 2484 GLint ref = static_cast<GLint>(c.ref); |
2363 GLuint mask = static_cast<GLuint>(c.mask); | 2485 GLuint mask = static_cast<GLuint>(c.mask); |
2364 if (!validators_->cmp_function.IsValid(func)) { | 2486 if (!validators_->cmp_function.IsValid(func)) { |
2365 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFunc", func, "func"); | 2487 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFunc", func, "func"); |
(...skipping 2340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4706 state_.ignore_cached_state) { | 4828 state_.ignore_cached_state) { |
4707 framebuffer_state_.clear_state_dirty = true; | 4829 framebuffer_state_.clear_state_dirty = true; |
4708 } | 4830 } |
4709 return false; | 4831 return false; |
4710 default: | 4832 default: |
4711 NOTREACHED(); | 4833 NOTREACHED(); |
4712 return false; | 4834 return false; |
4713 } | 4835 } |
4714 } | 4836 } |
4715 #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ | 4837 #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ |
OLD | NEW |